go-puush is a go implementation of the puush file sharing service, providing file upload, sharing, and management capabilities.
The service consists of three main components:
- API - Handles communication with the puush client
- CDN - Serves uploaded files and thumbnails
- Web Interface - Provides a web-based user interface, closely matching the original
A key advantage is the ease of use, as this project uses only Go and SQLite. No external dependencies are required!
The following features have been implemented or are planned for the future:
- API
- Authentication
- Upload
- History
- Delete
- Thumbnail
- CDN
- Serving uploaded files
- Serving thumbnails
- Web
- Public pages (Home, Login, Register, About, ...)
- Account page(s)
- Gallery page
- Login functionality
- Logout functionality
- Registration functionality
- Registration
- Email activation
- Invite codes
- Password reset functionality
- Account page functionality
- Move uploads
- Delete uploads
- Update default pool
- Reset API key
- Switch between views
- Search for uploads
- Change password
- Username check
- Username claiming
- "Stop asking about my username"
If you want to quickly try out go-puush without setting up a development environment:
- Go to the GitHub Actions page
- Click on the latest successful workflow run
- Download the artifact for your platform
- Extract and run the binary
It will download all the required files off of GitHub automatically.
For development with hot reloading support:
-
Install Air
go install github.com/air-verse/air@latest
-
Clone the repository
git clone https://github.com/Lekuruu/go-puush.git cd go-puush -
Install dependencies
go mod download
-
Run with hot reloading
air
Air will automatically rebuild and restart the application when you make changes to the code.
For a docker deployment, you can run the prebuilt container published to ghcr.io:
-
Copy the example environment file and tweak it as needed:
cp .example.env .env
-
Create a
docker-compose.ymlfile:services: puush: image: ghcr.io/lekuruu/go-puush:latest container_name: puush restart: unless-stopped env_file: - .env ports: - "${WEB_HOST}:${WEB_PORT}:${WEB_PORT}" volumes: - ./data:/app/.data - ./web:/app/web
-
Start the stack:
docker compose up -d
This setup won't require you to have the repository downloaded. The web directory will be populated automatically upon first launch, allowing you to edit web assets.
