spasteg
A secure self-hostable burn-after-reading paste service with ephemeral storage written in Gleam.
Have a glimpse of the interface, check out screenshots!
Features
- Deletes pastes after they are viewed
- Data is stored only in memory
- No user accounts needed
- Easy to run yourself
- Fast and reliable
- Written in Gleam (type-safe)
Architecture
| Component | Description |
|---|---|
| Backend/Core | Gleam (type-safe language built upon the BEAM) |
| Web | Wisp framework + Mist HTTP server |
| Frontend | Lustre for HTML rendering |
| Storage | In-memory only (no persistence) |
| Security | AES-256-GCM client-side encryption, CSRF tokens, rate limiting, security headers |
Configuration
SECRET_KEY_BASE (Required for Production)
The application uses a secret key base for signing cookies and security tokens.
You must set this for production deployments to ensure security and session persistence across restarts.
# Generate a secure key (48 bytes of random data)
export SECRET_KEY_BASE=$(openssl rand -base64 48)
# Or set it manually
export SECRET_KEY_BASE="your-secret-key-here"
⚠️ Warning: If not set, a temporary key will be generated on each startup. This:
- Invalidates all existing user sessions/cookies after restart
- Reduces security (new key generated each time)
- Generates a warning in the logs
For development, you can use:
SECRET_KEY_BASE=dev gleam run
How to run
Development
# Clone and build
git clone https://git.kharec.info/Kharec/spasteg.git
cd spasteg
gleam run
The server starts on http://localhost:3000.
Note: you can run tests with gleam test.
Production
The production environment is designed to run via Docker.
You can build the Docker image with:
docker build -t spasteg .
Then run the container with:
docker run -d --name pasteg -p <your_port>:3000 -e SECRET_KEY_BASE=$(openssl rand -base64 48) spasteg
The key is generated at startup here, and the container exposes port 3000 so feel free to use the port you want. It also runs as a non-root user with a health check configured.
Usage
- Visit http://localhost:3000
- Enter your text in the form
- Click "Create Paste"
- Share the generated URL
- The paste auto-destructs after first access
License
This project is licensed under the GNU General Public License v3.0 or later (GPLv3+).
See the LICENSE file for details.