Skip to content
paoloroncoPublic

About

Open-source public page builder for links, media, profiles, venues, and events. Self-host with Docker or use the managed OrbitPage service.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

59 stars

Watchers

2 watching

Forks

Repository files navigation

OrbitPage - Open-source, self-hosted public page builder

OrbitPage open-source self-hosted public page builder

Create your page. Host it on your server.
Design visually. Publish on your domain. Keep control of your data.

OrbitPage continuous integration status Latest OrbitPage version MIT License OrbitPage Docker Hub pulls GitHub Container Registry

Quick start · Dashboard · Documentation · Contributing · Security

OrbitPage is an open-source visual page builder for anyone who wants a public page on their own server. Create portfolios, service pages, venue menus, or event pages. Add images, video, links, contact details, maps, and calls to action. Edit the layout, colors, and typography with a live preview.

Your page adapts to phones and desktops, with SEO, QR codes, analytics, and newsletters built in. The self-hosted edition is free, MIT-licensed, and runs in one Docker container, keeping your content and data on your own server.

Prefer managed hosting? Explore orbitpage.com. This repository contains the self-hosted application.

OrbitPage dashboard walkthrough: page, content, menu, additional pages, themes, newsletter, publishing and the public page

Docker Hub namespace migration: the official image is now paoloronco/orbitpage. The former paueron/orbitpage path is a temporary compatibility feed and stops receiving updates on October 9, 2026. Existing volumes and data are unaffected; see Deployment.

Contents

Why OrbitPage

  • Self-hosted. Run one Docker container with SQLite and local storage on your server or homelab.
  • Visual editing. Manage content, design, menus, subpages, and publishing from the dashboard.
  • Flexible content. Add images, video, links, contact details, events, maps, and venue menus.
  • Sharing and discovery. Generate QR codes, set search and social metadata, and track visits with consent-aware analytics.

Docker

Docker is the recommended deployment method.

Docker Run and Compose publish port 8080 on all host interfaces. Replace device_ip with the Docker host's LAN address.

Registry Image
Docker Hub paoloronco/orbitpage
GitHub Container Registry ghcr.io/paoloronco/orbitpage

Docker Run (recommended)

docker pull paoloronco/orbitpage:latest

docker run -d \
  --name orbitpage \
  --restart unless-stopped \
  -p 8080:8080 \
  -v orbitpage-data:/app/data \
  --security-opt no-new-privileges:true \
  paoloronco/orbitpage:latest

Open the dashboard and choose a password for the admin.
The public page is at http://device_ip:8080.
Change the port or data mount in the command if needed. See the Docker deployment guide for options.

GHCR

docker pull ghcr.io/paoloronco/orbitpage:latest

docker run -d \
  --name orbitpage \
  --restart unless-stopped \
  -p 8080:8080 \
  -v orbitpage-data:/app/data \
  --security-opt no-new-privileges:true \
  ghcr.io/paoloronco/orbitpage:latest

Open the dashboard and choose a password for the admin.
The public page is at http://device_ip:8080.
Change the port or data mount in the command if needed. See the Docker deployment guide for options.

Docker Compose

Clone the repository and start the included configuration:

git clone https://github.com/paoloronco/OrbitPage.git
cd OrbitPage
docker compose up -d

Open the dashboard and choose a password for the admin.
The public page is at http://device_ip:8080.

Edit docker-compose.yml to change the image, port, environment, or storage path.

Linux installer

Use a Debian 12/13 or Ubuntu 22.04/24.04/26.04 server, VM, or LXC on amd64 or arm64. Run the Proxmox installer below on a Proxmox host.

sudo apt-get update
sudo apt-get install -y git
git clone https://github.com/paoloronco/OrbitPage.git
cd OrbitPage
sudo ./install.sh

Open http://SERVER_IP:8080/dashboard/profile and choose a password for the admin.
The public page is at http://SERVER_IP:8080.
Replace SERVER_IP with the server's LAN address. For local-only access, see LAN and loopback.

Proxmox VE

The installer creates a dedicated unprivileged Debian 12 LXC and installs OrbitPage inside it.

Use an x86-64 Proxmox VE 8+ host with patched lxc-pve: at least 6.0.0-2 on PVE 8, or 6.0.5-2 on PVE 9+. Run as root:

apt-get update
apt-get install -y git
git clone https://github.com/paoloronco/OrbitPage.git
cd OrbitPage
./install-pve.sh

Open http://GUEST_IP:8080/dashboard/profile and choose a password for the admin.
The public page is at http://GUEST_IP:8080.
Use the LXC's LAN address shown by the installer for GUEST_IP. For local-only access, see LAN and loopback.

Run from source

git clone https://github.com/paoloronco/OrbitPage.git
cd OrbitPage/app
npm ci
npm run install:server
cp .env.example .env
chmod 600 .env
printf '\nJWT_SECRET=%s\n' "$(node -p "require('crypto').randomBytes(32).toString('hex')")" >> .env
npm run build
cd server
node --env-file=../.env server.js

Open the dashboard and choose a password for the admin.
The public page is at http://device_ip:8080.
Edit app/.env if needed; set HOST=0.0.0.0 for LAN access.

Updates

Dashboard buttons: Check for updates and Install update

Open Dashboard → Edition → Instance details and click Check for updates. When a release is available, click Install update… as an administrator. The dialog installs it through the host update service or shows terminal instructions if the service is unavailable.

Updating OrbitPage

Linux and Proxmox

For installer-managed deployments using latest:

sudo orbitpage update

From the Proxmox host:

pct exec CTID -- orbitpage update
Docker Compose
docker compose pull
docker compose up -d
Docker Run

Pull the new image and recreate the container with the same volume, ports, and environment:

docker pull paoloronco/orbitpage:latest

docker stop orbitpage
docker rm orbitpage

docker run -d \
  --name orbitpage \
  --restart unless-stopped \
  -p 8080:8080 \
  -v orbitpage-data:/app/data \
  --security-opt no-new-privileges:true \
  paoloronco/orbitpage:latest

After every update, verify on the Docker host or inside the Proxmox guest:

curl -fsS http://127.0.0.1:8080/health

Also verify dashboard login, the public page, and uploaded media.

For backups and rollback procedures, see Maintenance.


Data and backups

The data directory contains:

orbitpage.db
uploads/
.jwt-secret (Docker-generated installations)
.instance-env.json (dashboard environment overrides, when saved)

Back up the whole data directory before upgrades or restores: /app/data in Docker, or your source installation's DATA_DIR. Keep any host-managed secrets backed up separately and private.

The dashboard exports selected application data as JSON, with an optional Include images (ZIP) archive. Newsletter records, SMTP credentials, and provider secrets require an infrastructure backup. Follow the backup and restore guide for a consistent copy of the database and uploads.

Dashboard workspaces

Workspace Purpose URL path
Page Profile, image, social links, browser metadata, and footer /dashboard/editor/page
Content Main-page blocks, ordering, visibility, and scheduling /dashboard/editor/content
Menu Venue menu settings, sections, products, and design /dashboard/editor/menu/content
Shop Digital products, services, orders and owner Stripe payments; setup guide /dashboard/editor/shop/products
Pages Additional public pages and their blocks /dashboard/editor/pages
AI Assistant Propose profile, content, and theme changes to review and confirm /dashboard/ai
Theme Colors, typography, cards, background, and live preview /dashboard/theme/page
Publish Static and scheduled QR links, sitemap, and discovery text files /dashboard/publish/QR
Backup JSON or image ZIP export, selective restore, and unused-media cleanup /dashboard/backup
Analytics Visit and content reports, plus optional GA4 /dashboard/analytics
Privacy Consent banner, legal policies, and external CMP settings /dashboard/privacy
Newsletter SMTP settings, subscribers, campaigns, scheduling, and reports /dashboard/newsletter/overview
Team Users, roles, permissions, and personal API tokens /dashboard/team
Account Account details, public page controls, password, TOTP, and admin audit log /dashboard/account/general
Edition Instance details, updates, environment settings, self-hosted features, and server responsibilities /dashboard/plan

Dashboard URLs include the interface language, for example /it-IT/dashboard/account/general. The paths above omit that prefix for readability. Navigation shows only the tools your role can access.

See the dashboard guide for tab URLs and editing instructions.

Configuration & Environment

Common runtime settings:

Variable Default Purpose
DATA_DIR app/server from source; /app/data in Docker Database, uploads, and saved instance settings
JWT_SECRET Generated and saved in Docker; required from source Stable session and encryption secret; explicit values must be at least 32 characters
NODE_ENV Unset from source; production in Docker Use production for deployed source installations
PORT 3001 from source; 8080 in Docker HTTP port
HOST 127.0.0.1 from source; 0.0.0.0 in Docker Listener address
PUBLIC_SITE_URL Request origin Public URL for metadata, QR codes, sitemap, and newsletter links
PUBLIC_SITE_NAME OrbitPage Site name in generated metadata
SEO_INDEXING true Set to false for staging or private instances
UPLOAD_STORAGE_QUOTA_MB 1024 Total upload quota in MB
VIDEO_UPLOAD_LIMIT_MB 100 Per-file video limit in MB
ORBITPAGE_BACKUP_MEDIA_LIMIT_MB 128 Total decoded media limit per backup export or restore in MB
MEDIA_CLEANUP_ENABLED true outside tests and demo mode Automatic unused-upload cleanup
MEDIA_CLEANUP_GRACE_HOURS 24 Minimum age of an unused upload before cleanup
TZ UTC Fallback timezone for scheduled content
OPENAI_API_KEY Unset Optional AI key; a key saved in AI Assistant takes precedence
ORBITPAGE_SECRET_ENCRYPTION_KEY JWT_SECRET Optional separate stable secret of at least 32 characters for the saved AI key
NEWSLETTER_SECRET_KEY JWT_SECRET Optional separate stable secret of at least 32 characters for SMTP encryption and newsletter links
ORBITPAGE_TRUST_PROXY Disabled Trusted proxy IPs or CIDRs; see the configuration reference before enabling
BASE_PATH Empty Mount path when serving under a subdirectory

Administrators can change instance settings under Edition → Instance details → Environment variables.

Newsletters require SMTP configuration. See the newsletter guide for setup and the Configuration reference for all variables, defaults, and examples.

Documentation

Start from the documentation index.

Task Guide
Deploy, update, or use Proxmox Deployment
Configure environment variables Configuration
Navigate the editor Dashboard guide
Manage users, passwords and two-factor authentication Account and team
Share or print a QR code Publishing and QR
Build content, menus, subpages, and themes Content and design
Export, restore, clean media, or evaluate demo mode Backups, media, and demo mode
Configure AI safely AI assistant
Configure analytics and consent Analytics and privacy
Configure SMTP and send newsletters Newsletters
Configure search and discovery SEO and indexing
Troubleshoot Troubleshooting

To automate a self-hosted installation, see the API guide. For pages hosted on orbitpage.com, use the n8n community node.

Security and contributing

Report suspected vulnerabilities privately through a GitHub Security Advisory or the contact in SECURITY.md. Do not open a public issue for an unpatched vulnerability.

Issues and focused pull requests are welcome. Read CONTRIBUTING.md for setup, checks, compatibility expectations, and the contribution workflow. Participation follows the Code of Conduct.

OrbitPage's open-source edition is available under the MIT License.

About

Open-source public page builder for links, media, profiles, venues, and events. Self-host with Docker or use the managed OrbitPage service.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

59 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages