A lightweight web client for Miniflux. Single Go binary with embedded frontend.
- Three-panel layout (sidebar, entry list, article reader)
- Mobile responsive (single-panel with slide navigation)
- Keyboard navigation (
j/kfor next/previous article) - Multi-user auth via Miniflux username/password
- Themeable via CSS (ships with
defaultanddark) - Sessions persist across restarts (encrypted cookies)
cp .env.example .env
# Edit .env with your Miniflux URL and a secret key
task devOpen http://localhost:8080 and sign in with your Miniflux credentials.
All configuration is via environment variables (or .env file):
| Variable | Required | Description |
|---|---|---|
MINIFLUX_URL |
Yes | URL of your Miniflux instance |
STACK_PORT |
No | Listen port. Defaults to 8080 |
STACK_SECRET |
No | 32 hex chars for cookie encryption. If unset, sessions are lost on restart |
STACK_THEME |
No | Theme name (default, dark). Defaults to default |
Generate a secret:
python3 -c "import secrets; print(secrets.token_hex(16))"docker build -t stack .
docker run -p 8080:8080 \
-e MINIFLUX_URL=https://rss.example.com/ \
-e STACK_SECRET=$(python3 -c "import secrets; print(secrets.token_hex(16))") \
stackRequires Task.
| Command | Description |
|---|---|
task dev |
Run with go run |
task build |
Compile to ./stack |
task build-and-run |
Build then run |
Themes live in themes/ as CSS files. Set STACK_THEME to the filename (without .css). Each theme defines CSS custom properties (colors, fonts) and can include @font-face declarations referencing fonts in themes/fonts/.
├── main.go # Go backend (API proxy + embedded frontend)
├── frontend/
│ ├── index.html
│ ├── app.js
│ └── style.css
├── themes/
│ ├── default.css
│ ├── dark.css
│ └── fonts/
├── Dockerfile
├── Taskfile.yml
└── .env.example