SkyVault is a self-hosted cloud storage solution designed to help you securely store, organize, and share your files. It features a responsive mobile-first web UI and provides full control over your data.
- π Secure Authentication: JWT-based authentication system
- π Folder Management: Create and navigate through folder structures
- π€ File Upload: Upload files with chunked upload support for large files
- π₯ File Download: Download your files anytime
- πΎ Storage Quotas: Per-user storage limits with real-time usage tracking
- π± Mobile-First UI: Responsive design optimized for mobile devices
- π¨ Modern Interface: Built with SolidJS and Tailwind CSS
- π High Performance: Go backend with clean architecture
- π³ Easy Deployment: Docker-based deployment with PostgreSQL
- Docker and Docker Compose installed
- At least 2GB of available disk space
-
Download the configuration file
wget https://raw.githubusercontent.com/vish9812/skyvault/main/.env.example -O .env
-
Configure your environment
Edit the
.envfile and update the following critical values:# IMPORTANT: Change these to secure values! DB__PASS=your-secure-database-password AUTH__JWT__KEY=your-secure-jwt-key-at-least-32-characters-longGenerate a secure JWT key:
openssl rand -base64 32
-
Download the Docker Compose file
wget https://raw.githubusercontent.com/vish9812/skyvault/main/docker-compose.prod.yml -O compose.yml
-
Start SkyVault
docker compose up -d
-
Access the application
Open your browser and navigate to:
http://localhost:8090Or replace
localhostwith your server's IP address. -
Create your account
On first launch, create your user account through the signup page.
SkyVault is configured through environment variables in the .env file:
| Variable | Description | Default |
|---|---|---|
SERVER__PORT |
Port to expose the application | 8090 |
DB__NAME |
PostgreSQL database name | skyvault |
DB__USER |
PostgreSQL username | skyvault |
DB__PASS |
PostgreSQL password | |
AUTH__JWT__KEY |
JWT secret key (min 32 chars) | |
AUTH__JWT__TOKEN_TIMEOUT_MIN |
Token expiration in minutes | 43200 (30 days) |
STORAGE__DEFAULT_QUOTA_MB |
Default storage quota for new users | 10240 (10GB) |
LOG__LEVEL |
Logging level (debug/info/warn/error) | info |
SkyVault supports per-user storage quotas. You can configure the default quota for new users:
# Set default storage quota to 50GB for new users
STORAGE__DEFAULT_QUOTA_MB=51200
# Set to 100GB for generous storage
STORAGE__DEFAULT_QUOTA_MB=102400
# Set to 100TB for unlimited storage feel
STORAGE__DEFAULT_QUOTA_MB=104857600Features:
- Each user has their own storage quota
- Real-time storage usage tracking displayed in the UI
- Visual indicators when approaching storage limits (80% = warning, 95% = critical)
- Automatic validation prevents uploads exceeding available storage
- Chunked uploads for large files with upfront quota reservation (concurrent-upload protection)
# All logs
docker compose logs -f
# Application logs only
docker compose logs -f app
# Database logs only
docker compose logs -f db# Pull the latest image
docker compose pull
# Restart with the new image
docker compose up -dYour data is stored in Docker volumes. To backup:
# Backup database
docker compose exec db pg_dump -U skyvault skyvault > backup.sql
# Backup uploaded files
docker run --rm -v skyvault_app-data:/data -v $(pwd):/backup alpine tar czf /backup/files-backup.tar.gz /data# Restore database
cat backup.sql | docker compose exec -T db psql -U skyvault skyvault
# Restore uploaded files
docker run --rm -v skyvault_app-data:/data -v $(pwd):/backup alpine tar xzf /backup/files-backup.tar.gz -C /# Stop services
docker compose down
# Stop and remove all data (β οΈ WARNING: This deletes everything!)
docker compose down -v- Go 1.26 or higher
- Node.js 20 or higher
- pnpm
- PostgreSQL 16
- just command runner
-
Clone the repository
git clone https://github.com/vish9812/skyvault.git cd skyvault -
Configure environment
cp server/dev.env.example server/dev.env # Edit server/dev.env with your database credentials -
Start the database
just postgres-up
-
Start development servers
# Terminal 1: Start backend just server-run # Terminal 2: Start frontend just web-dev
Access the app at
http://localhost:5173(Vite dev server)
# Build everything
just build
# Run all tests
just test
# Run server tests
just server-test
# Lint web code
just web-lint
# Generate DB models after schema changes
just gen-db-models
# Create a new migration
just migrate-create NAME=add_something
# Clean everything
just nukeskyvault/
βββ server/ # Go backend
β βββ cmd/ # Application entrypoint
β βββ internal/
β β βββ domain/ # Domain layer (CQRS pattern)
β β βββ infrastructure/ # Infrastructure implementations
β β βββ api/ # HTTP API handlers
β β βββ workflows/ # Cross-domain operations
β βββ pkg/ # Shared packages
βββ web/ # SolidJS frontend
β βββ src/
β βββ components/ # UI components
β βββ pages/ # Page components
β βββ store/ # State management
β βββ apis/ # API client
βββ justfile # Task automation
- Language: Go 1.26
- Architecture: Clean Architecture with CQRS pattern
- Database: PostgreSQL 16
- Authentication: JWT tokens
- API: RESTful HTTP API with Chi router
- Framework: SolidJS 1.9
- Styling: Tailwind CSS 4
- UI Components: Kobalte
- State Management: Solid Signals + TanStack Query
- Build Tool: Vite
- Type: Local filesystem storage
- Features:
- Per-user storage quotas
- Real-time usage tracking
- Chunked uploads for large files
- Streaming downloads
- Concurrent upload protection
- Configuration: Default quota configurable via
STORAGE__DEFAULT_QUOTA_MB
- JWT-based authentication
- Folder creation and navigation
- File upload with chunked upload support
- File download
- Per-user storage quotas with real-time tracking
- Storage usage visualization in UI
- Epic 1: File Operations (rename, move, delete)
- Epic 2: Folder Operations (rename, move, delete)
- Epic 3: Contact Management System
- Epic 4: Core File Sharing
- Epic 5: Shared Content Management
- Epic 6: Advanced Sharing Features
See TODO.md for detailed roadmap.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the conventions in CONVENTIONS.md
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
This project is licensed under the GNU AGPLv3 License - see the LICENSE file for details.
- SolidJS - Reactive UI framework
- Go - Backend language
- Chi - HTTP router
- Kobalte - Accessible UI components
- Tailwind CSS - Utility-first CSS
- Issues: GitHub Issues
- Discussions: GitHub Discussions
If you discover a security vulnerability, please email vishapps@outlook.com instead of using the issue tracker.
Made with β€οΈ by Vish
β Star this repository if you find it useful!