302Hub is an open-source homelab dashboard for service monitoring, quick links, kiosk screens, and integration-driven wallboards.
Repository: github.com/302Co/302Hub
Please keep in mind that this is a beta (pre-release) version. You might encounter some bugs, rough edges, or missing features. We released it early because we want to build this with the community!
If you find a bug or have a great idea:
- 🐛 Report Issues: Please open an issue on our GitHub repository.
- 🛠️ Contribute: Pull Requests (PRs) are more than welcome. Let's make this better together!
- 📧 Contact: You can also reach out to us at info@302.com.tr.
- Guided setup with
PIN unlockorusername + password - Home dashboard and kiosk wallboard
- Live layout editing with panels and kiosk pages
- Built-in widgets such as
Clock,Stats,Services,Notes,Quick note,Weather,Google,Pi-hole,REST, andIframe - Integration engine for
Pi-hole v6,Portainer,Grafana iframe, andCustom REST - Theme, quick links, compact UI scale, backup, cleanup, and update checks
- Usage guide: docs/USAGE.md
- Docker deployment: docs/DEPLOYMENT.md
- Next.js 16 App Router
- TypeScript
- Tailwind CSS 4
- Prisma ORM
- SQLite
The easiest way to run 302Hub is via Docker. Create a docker-compose.yml file:
services:
app:
image: 302co/302hub:latest
container_name: 302hub
environment:
DATABASE_URL: file:/app/data/dev.db
SESSION_SECRET: "change-this-to-a-long-random-string"
MASTER_PASSWORD: "your-secure-password"
NEXT_PUBLIC_APP_NAME: 302Hub
NEXT_PUBLIC_DEFAULT_LOCALE: en
ports:
- "3020:3020"
volumes:
- ./302hub_data:/app/data
restart: unless-stoppedStart the container:
docker compose up -dThen open http://localhost:3020.
- Copy
.env.exampleto.env - Install dependencies
- Generate the Prisma client
- Start the app
npm install
npm run prisma:generate
npm run devThen open http://localhost:3020.
Example local environment:
DATABASE_URL="file:./dev.db"
SESSION_SECRET="change-this-before-production"
MASTER_PASSWORD=""
NEXT_PUBLIC_APP_NAME="302Hub"
NEXT_PUBLIC_DEFAULT_LOCALE="en"npm run dev
npm run build
npm run lint
npm run typecheck
npm run prisma:generate
npm run prisma:migrate:dev
npm run db:seed- Settings and mutation APIs are protected by the active auth mode
PIN unlockkeeps the dashboard readable but protects settings changesCredentialsmode requires an admin session for protected routesIframepanels only allow parsedhttporhttpssources from embed code- External links and branding URLs are sanitized to safe protocols
Contributions are welcome.
Typical contribution flow:
- Fork the repository
- Create a feature branch
- Make your changes
- Run:
npm run lint
npm run build- Open a Pull Request
If you prefer, you can also share improvements directly with us at info@302.com.tr.
This project is licensed under AGPL-3.0-only.
If you run a modified network-accessible version of this project, you must provide the complete corresponding source code of that modified version under the same license terms.
If you want to use this project commercially, keep your modifications private, or remove the 302.com.tr references and resell it under your own brand, the AGPL license does not permit that. In those cases, you must contact 302 Yazılım Geliştirme to purchase a separate commercial license.
This project is licensed under AGPL-3.0. To help improvements flow back into the community and keep the main repository growing, please send your changes as a Pull Request (PR) or share them with us at info@302.com.tr.
