Cabinet is a lean, high-performance "File Locker" designed for self-hosting. It prioritizes a fast web experience, mobile-first design, and simple file management without the bloat of complex syncing engines.
- Mobile-First UI: Responsive React frontend with Tailwind CSS.
- Drag & Drop Uploads: Fast uploads with real-time progress bars.
- Media Previews: Auto-generated thumbnails for images and videos, plus PDF previews.
- Secure Sharing: Generate public links with password protection, expiration dates, and download limits.
- Single Container: Entire stack (Frontend + Backend + DB) runs in one Docker container.
- Configurable Limits: Set maximum file upload size via environment variables.
- Docker
-
Build the Image
docker build -t cabinet . -
Run the Container
docker run -d -p 4444:4444 -v $(pwd)/user_data:/app/users cabinet -
Access Cabinet
- Open
http://localhost:4444in your browser. - API Documentation:
http://localhost:4444/api/docs
- Open
-
Run with Compose
docker-compose up -d --build
-
Clean Rebuild (No Cache) To ensure a completely fresh build without using cached layers:
docker-compose build --no-cache && docker-compose up -d
Cabinet is designed to work behind a reverse proxy (like Traefik, Nginx, or Caddy) for SSL termination. The application listens on HTTP port 4444 inside the container. HSTS and strict HTTPS enforcement are disabled in the application to allow the proxy to handle security headers.
- Backend: Located in
backend/. Runnpm run devinside. - Frontend: Located in
frontend/. Runnpm run devinside.