Laterfeed lets you save articles and videos to read or watch later.
It exposes your saved links as an Atom feed, so you can consume them in any RSS reader.
- Save articles and videos with a single API call
- Automatic metadata extraction (title and description) from saved URLs
- Atom feed generation for use with any RSS reader
- Chrome & Firefox extensions for one-click saving from the browser
- OpenAPI documentation with interactive Scalar UI at
/docs - Simple token authentication
- SQLite database - no external dependencies
Generate an authentication token using this method or any other method that you prefer:
openssl rand -hex 32Run the container:
docker run -d -p 8000:8000 \
-v $(pwd)/data:/data \
-e PORT=8000 \
-e DATABASE_URL=sqlite:/data/data.db \
-e BASE_URL=http://localhost:8000 \
-e AUTH_TOKEN=changeme \
reaperberri/laterfeed:latestLaterfeed is configured via environment variables:
| Variable | Description | Example |
|---|---|---|
PORT |
Port the server listens on | 8000 |
DATABASE_URL |
SQLite connection string | sqlite:data.db |
BASE_URL |
Public URL of the server (used in feed links) | http://localhost:8000 |
AUTH_TOKEN |
Bearer token for authenticated endpoints | changeme |
RETENTION_DAYS |
Auto-delete entries older than this many days (optional) | 30 |
MAX_ENTRIES |
Keep only the N most recent entries (optional) | 500 |
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/health |
No | Health check |
GET |
/feed |
No | Get saved entries as an Atom feed |
GET |
/entries |
No | List all entries as JSON |
POST |
/entries |
Yes | Add a new entry |
DELETE |
/entries/{id} |
Yes | Delete an entry |
GET |
/docs |
No | Interactive OpenAPI documentation |
By default, saved entries are kept forever. You can configure automatic cleanup using these optional environment variables:
RETENTION_DAYS- Entries older than this many days are automatically deleted. Set to0or leave unset to disable.MAX_ENTRIES- Only the N most recent entries are kept. Older entries beyond this limit are automatically deleted. Set to0or leave unset to disable.
Both options can be used together. The cleanup task runs every hour in the background. Entries can also be deleted manually via the DELETE /entries/{id} endpoint.
Copy .env.example to .env and update the values where necessary.
Run:
just migrate-up
just run