Self-hosted file manager. Upload, browse, share, and organize files from any browser.
1.0K
A self-hosted, web-based personal file explorer with a cyberpunk aesthetic. Upload, browse, organize, and share your files from any browser — or install it as a PWA directly on your phone's home screen.
/admin for adding, editing, and deleting accounts#7c0eb3) + cyan (#22d3ee) color palettedocker run -d \
--name skybit \
-p 7070:7070 \
-v /path/to/your/files:/data \
-v /path/to/config:/app/config \
-e SECRET_KEY=change-this-to-a-long-random-string \
rayderc/skybit:latest
Open http://localhost:7070 — default login is admin / admin.
Change the password immediately via the Profile page.
services:
skybit:
image: rayderc/skybit:latest
container_name: skybit
restart: unless-stopped
ports:
- "7070:7070"
volumes:
- /path/to/your/files:/data
- /path/to/config:/app/config
Set SECRET_KEY in a .env file next to your compose file and reference it with env_file: [.env], or pass it directly via the environment: key.
| Variable | Default | Description |
|---|---|---|
SECRET_KEY | (insecure built-in) | Session encryption key — must be set in production (≥ 32 characters) |
BASE_DIRECTORY | /data | Root directory served by the file browser |
SITE_NAME | SkyBit | Display name shown in the navigation bar |
PORT | 7070 | Port the HTTP server listens on |
| Container path | Purpose |
|---|---|
/data | Your files — mount your file storage directory here |
/app/config | App data — user accounts, share links (data.json), and the RAW thumbnail cache (thumbcache/). Persist this or you will lose accounts on container restart. |
The container starts as root, chowns both volumes to the nextjs user, then drops privileges before starting the server.
docker pull rayderc/skybit:latest
docker stop skybit && docker rm skybit
# re-run the docker run command above
With docker-compose:
docker compose pull
docker compose up -d
Requirements: Node.js 20+
git clone https://github.com/RayderC/SkyBit.git
cd SkyBit
npm install
npm run dev
Open http://localhost:7070. Files are served from the data/ folder in the project root by default (created automatically on first run).
Create a .env.local file:
SECRET_KEY=any-long-string-for-local-dev
BASE_DIRECTORY=./data
SITE_NAME=SkyBit
PORT=7070
| Concern | Choice |
|---|---|
| Framework | Next.js 15 (App Router for pages, Pages Router for API routes) |
| Language | TypeScript (strict) |
| Auth | iron-session — encrypted HTTP-only cookies, 30-day sessions |
| Passwords | bcryptjs — pure JS, no native compilation required |
| File uploads | busboy — streams directly to disk, handles large files |
| ZIP downloads | archiver |
| Data store | JSON file (config/data.json) — no database server needed |
| Styling | Custom CSS with design tokens, no UI framework |
SECRET_KEY before exposing to the internet. The built-in default is not secret.admin / admin) immediately after first login.BASE_DIRECTORY to prevent path traversal./api/temp-shares/access?token=...).httpOnly, secure (in production), and sameSite: lax.MIT
Content type
Image
Digest
sha256:9014faf97…
Size
68.9 MB
Last updated
4 months ago
docker pull rayderc/skybit