Deploy homepage
Self-hosted app dashboard with 100+ service integrations. Single-container.
homepage
Just deployed
Deploy and Host
> Canonical code: homepage — deploy URL: https://railway.com/new/template/homepage
Homepage is a modern, highly-configurable self-hosted application dashboard with 100+ service integrations. Deploy it on Railway in minutes to turn your stack into a beautiful start page.
About Hosting
Homepage runs as a single container with a persistent Railway volume for config (/app/config). Railway provides the compute, TLS at the edge, and a public URL. The service restarts automatically on failures via Railway's built-in health check. No external database or cache is needed — everything runs in one container.
Why Deploy
- 100+ service integrations — Plex, Sonarr, Radarr, Grafana, GitHub, Docker, Kubernetes, Home Assistant, Uptime Kuma, and many more widgets with live status.
- Zero external dependencies — Single container with a persistent volume. No PostgreSQL, no Redis, no sidecars.
- Drag-and-drop layout — Widgetized cards, collapsible groups, search bar with keyboard shortcuts, and per-user settings.
- Themeable UI — Dark, light, neon, glassmorphism, and more. Custom backgrounds supported.
- Persistent config — All settings survive redeploys via the Railway volume mount.
- Ships with sensible defaults — Dark theme, Railway PORT binding, English locale — ready out of the box.
Common Use Cases
- Personal dashboard — Aggregate all your self-hosted services into one beautiful start page.
- Team operations hub — Share a dashboard with your team showing CI/CD status, monitoring, and deployment links.
- Homelab control center — Monitor and access all your homelab services from a single pane of glass.
- New tab replacement — Set Homepage as your browser's new tab page for instant access to everything.
- Status board — Display live service status on a dedicated monitor or kiosk.
Dependencies for Homepage
Deployment Dependencies
Homepage requires no external dependencies on Railway. It runs as a standalone Next.js server with a persistent Railway volume for configuration files. No database, cache, or third-party services are needed.
🚀 One-Click Deploy
Click the button above to deploy Homepage to Railway instantly. The build uses our pinned, reproducible Dockerfile (Homepage v1.13.2).
📋 Description
Homepage is a modern, highly-configurable self-hosted application dashboard with 100+ service integrations. It turns your Railway stack into a beautiful start page featuring live status, monitoring widgets, bookmarks, and custom service cards — everything you need at a glance when you open a new tab.
This template ships a production-ready single-container deployment:
- ✅ Pinned upstream (Homepage
v1.13.2, released June 9 2026) - ✅ Auto-injected persistent Railway volume for
/app/config - ✅ Sensible defaults — dark theme, Railway PORT binding, language
en - ✅ Healthcheck endpoint tuned for Railway's monitoring
- ✅ Non-root runtime (upstream image convention preserved)
- ✅ Env-var-driven config — no manual file editing required (but supported)
- ✅ GitHub Actions security lint on every PR
✨ Features
- 100+ service integrations: Plex, Sonarr, Radarr, Grafana, GitHub, Docker, Home Assistant, Uptime Kuma, and many more — full list.
- Drag-and-drop layout with widgetized cards, collapsible groups, search bar, and per-user settings.
- Live status synced every 30s — click any service to open its web UI.
- Themeable — dark, light, neon, glassmorphism and others. Custom backgrounds supported.
- Persistent config survives every Railway redeploy via volume mount.
- No external dependencies — single container, no database or cache required.
🖼️ Screenshots
(The Publisher stage normally captures 3 screenshots of the live deployment and inserts them here. For this offline build, see the preview image above.)
🏗️ Architecture
Railway Container
├── Homepage (Next.js) → :$PORT, healthcheck GET /
└── Persistent Volume → /app/config (settings, services, bookmarks, widgets, icons)
Single web service. One Railway volume. No database, no Redis, no extra sidecars. Healthcheck: GET / → 200 OK. Restart: ON_FAILURE (5 retries). HTTPS at Railway edge (TLS automatic).
🔧 Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
PORT | no | 8080 | Container port. Railway injects this automatically. |
HOMEPAGE_PORT | no | (auto) | Optional: override the port Homepage binds to. Defaults to Railway's PORT. |
HOMEPAGE_VAR_DEFAULT_THEME | no | dark | UI theme on first load (dark, light, neon, glassmorphism, …). |
LOG_LEVEL | no | info | Server-side log verbosity. |
HOMEPAGE_VAR_TITLE | no | (n/a) | Optional: title shown in the browser tab. |
HOMEPAGE_VAR_LANGUAGE | no | en | UI language code. |
HOMEPAGE_VAR_BACKGROUND_IMAGE_URL | no | (n/a) | Optional: custom background image. |
HOMEPAGE_VAR_BACKGROUND_OPACITY | no | (n/a) | Optional: backdrop opacity 0.0–1.0. |
> All HOMEPAGE_VAR_* settings can also be set inline via the env mapping — they're automatically read on container start.
🧩 Configuring your dashboard
Homepage reads YAML config files from the persistent volume at /app/config.
Option A — Visual editor (recommended)
Deploy, open the live URL, click ⚙️ to customize, and click Save. Config persists to the Railway volume automatically.
Option B — File-based config
If you prefer YAML, clone the repo, edit config/settings.yaml, and redeploy. The volume at /app/config loads your files on start. Reference:
🛠️ Local Development
git clone https://github.com/INAPP-Mobile/railway-homepage.git && cd railway-homepage
cp .env.example .env && $EDITOR .env
docker build -t railway-homepage .
docker run -d --name homepage -p 3000:3000 -v "$(pwd)/config:/app/config" --env-file .env railway-homepage
curl -sf http://localhost:3000/ | head -20
Open in your browser.
🧪 Testing
docker build -t railway-homepage .
docker run --rm -p 3000:3000 railway-homepage & sleep 10
curl -sf http://localhost:3000/ && echo OK
🐛 Troubleshooting
| Issue | Solution |
|---|---|
| Container exits immediately | Check Railway logs — usually a malformed HOMEPAGE_VAR_*. |
| Theme/Widgets reset on redeploy | Confirm /app/config volume is still mounted. |
| Health checks failing | Raise start-period in railway.json; first-build cold cache may take longer. |
| Port already in use | Override PORT and HOMEPAGE_PORT — Railway auto-routes. |
For upstream-specific issues, consult .
🔄 Updating
This template pins Homepage to v1.13.2. To upgrade:
- Edit the
FROMline inDockerfileto a newer tag (e.g.v1.14.0). - Rebuild — Railway auto-detects a Dockerfile change.
- Confirm the new version against the release notes.
A GitHub Actions workflow (.github/workflows/publish-lint.yml) prevents publishing regressions.
📄 License
Homepage upstream is MIT-licensed. Template by INAPP-Mobile. Issues/PRs: .
Template Content
