A Python TUI client for Miniflux RSS reader with feed sorting capabilities
Project description
miniflux-tui-py
A Python TUI (Terminal User Interface) client for the Miniflux self-hosted RSS reader built with textual.
Installation
From PyPI (Recommended with uv)
# Install uv (see: https://docs.astral.sh/uv/getting-started/installation/)
# On macOS/Linux: brew install uv
# On Windows: winget install astral-sh.uv
# Or visit https://docs.astral.sh/uv/getting-started/installation/
# Install miniflux-tui-py
uv tool install miniflux-tui-py
# Create configuration
miniflux-tui --init
# Run the application
miniflux-tui
Alternative: Using pip
pip install miniflux-tui-py
miniflux-tui --init
miniflux-tui
Prebuilt Binaries (GitHub Releases)
If you do not want to manage a Python environment, each tagged release now attaches standalone binaries for Linux (x86_64), macOS (arm64), and Windows (x86_64):
- Download the archive for your platform from the GitHub Releases page.
- Extract the archive:
- Linux/macOS:
tar -xzf miniflux-tui-<os>-<arch>.tar.gz - Windows: right-click the
.zipfile and choose Extract All…
- Linux/macOS:
- (Linux/macOS only) Make the binary executable:
chmod +x miniflux-tui - Run the TUI:
./miniflux-tui --init
Note: macOS may quarantine binaries downloaded from the internet. If macOS blocks execution, run
xattr -d com.apple.quarantine miniflux-tuionce after extraction.
Container Image (Docker/Podman)
# Pull the signed image from GitHub Container Registry
# `latest` tracks the default branch. Replace with a release tag (e.g. v0.4.0) to pin.
docker pull ghcr.io/reuteras/miniflux-tui:latest
# Create a configuration directory on the host if it does not exist
mkdir -p ~/.config/miniflux-tui
# Generate a config file (writes to the mounted directory)
docker run --rm -it \
-v ~/.config/miniflux-tui:/home/miniflux/.config/miniflux-tui \
ghcr.io/reuteras/miniflux-tui:latest \
--init
# Launch the TUI (shares configuration and uses your terminal)
docker run --rm -it \
-v ~/.config/miniflux-tui:/home/miniflux/.config/miniflux-tui \
ghcr.io/reuteras/miniflux-tui:latest
The image is built in CI, published to GHCR, and signed with Sigstore Cosign using GitHub OIDC so you can verify it with:
cosign verify ghcr.io/reuteras/miniflux-tui:latest
From Source (For Developers)
# Install uv (see: https://docs.astral.sh/uv/getting-started/installation/)
# On macOS/Linux: brew install uv
# On Windows: winget install astral-sh.uv
# Or visit https://docs.astral.sh/uv/getting-started/installation/
# Clone the repository
git clone https://github.com/reuteras/miniflux-tui-py.git
cd miniflux-tui-py
# Install all dependencies (including dev and docs)
uv sync --all-groups
# Create default configuration
uv run miniflux-tui --init
# Run the application
uv run miniflux-tui
Documentation
Full documentation is available at reuteras.github.io/miniflux-tui-py
GitHub Codespaces
GitHub Codespaces provides a preconfigured, browser-accessible development
environment that works well with the terminal-based interface of
miniflux-tui-py. This repository includes a .devcontainer/devcontainer.json
so every Codespace starts from a Python 3.11 image, installs uv, and runs
uv sync --locked --all-groups automatically. After the first boot you can launch the
TUI with the same commands documented in the
From Source section:
uv run miniflux-tui --init
uv run miniflux-tui
To verify the setup before running the application, use:
uv run miniflux-tui --check-config
Keeping your Miniflux token secret
Use Codespaces secrets to store your API token so only the Codespaces that you start can read it:
-
In the repository, go to Settings → Codespaces secrets and add a new secret named
MINIFLUX_TOKEN(or add a personal Codespaces secret from your user settings). -
Launch a Codespace for this repository. GitHub injects the secret into the environment as
MINIFLUX_TOKENeach time the Codespace starts. -
Configure
config.tomlto read the token from the environment by using a command for thepasswordfield, for example:password = ["/bin/sh", "-c", "printf %s \"$MINIFLUX_TOKEN\""]
Each collaborator must define their own secret—your personal Codespaces secrets are never shared with other users, and theirs are not shared with you. Avoid writing the raw token to tracked files inside the Codespace so it is not accidentally committed.
The Codespace is set up so the VS Code Testing view is ready to run the project's
pytest suite without extra configuration. VS Code also auto-formats Python files
with Ruff on save and wires up the default interpreter to the repo's .venv, so
the editor, formatter, and tests all work straight away.
Configuration
Create a configuration file at:
- Linux:
~/.config/miniflux-tui/config.toml - macOS:
~/.config/miniflux-tui/config.toml - Windows:
%APPDATA%\miniflux-tui\config.toml
Example configuration:
server_url = "https://miniflux.example.com"
password = ["op", "read", "op://Personal/Miniflux/API Token"]
allow_invalid_certs = false
[theme]
unread_color = "cyan"
read_color = "gray"
[sorting]
default_sort = "feed" # Options: "feed", "date", "status"
default_group_by_feed = false
Retrieving your API token securely
Miniflux authenticates using API tokens. Instead of storing the token directly
in config.toml, configure the password field with a command that prints the
token to stdout. This keeps the secret in your password manager (for example
1Password, Bitwarden, or pass).
To create a token:
-
Log into your Miniflux server.
-
Go to Settings → API Keys → Create a new API key.
-
Store the generated token in your password manager.
-
Update the
passwordcommand so it outputs the token, e.g.:# 1Password example password = ["op", "read", "op://Personal/Miniflux/API Token"] # Environment variable example password = ["/bin/sh", "-c", "printf %s \"$MINIFLUX_TOKEN\""]
Keyboard Shortcuts
Entry List View
| Key | Action |
|---|---|
| ↑/↓ or k/j | Navigate entries |
| Enter | Open entry |
| m | Toggle read/unread |
| * | Toggle star |
| e | Save entry to third-party service |
| s | Cycle sort mode (date/feed/status) |
| g | Toggle grouping by feed |
| Shift+G | Expand all feeds (when grouped) |
| Shift+Z | Collapse all feeds (when grouped) |
| o | Toggle fold/unfold on feed header (when grouped) |
| h or ← | Collapse individual feed (when grouped) |
| l or → | Expand individual feed (when grouped) |
| r or , | Refresh entries |
| u | Show unread entries |
| t | Show starred entries |
| ? | Show keyboard help |
| q | Quit application |
Entry Reader View
| Key | Action |
|---|---|
| ↑/↓ or k/j | Scroll up/down |
| PageUp/PageDown | Fast scroll |
| J | Next entry |
| K | Previous entry |
| m | Toggle read/unread |
| * | Toggle star |
| e | Save entry to third-party service |
| o | Open in browser |
| f | Fetch original content |
| b or Esc | Back to list |
| ? | Show keyboard help |
Contributing
Contributions are welcome! See CONTRIBUTING.md for details on:
- Setting up your development environment
- Running tests and checks
- Submitting pull requests
For release information and troubleshooting, see:
- RELEASE.md - How to create releases
- docs/RELEASE_TROUBLESHOOTING.md - Handling release failures
Development
# Install all development dependencies
uv sync --all-groups
# Lint code
uv run ruff check .
# Type check
uv run pyright miniflux_tui tests
# Run tests
uv run pytest tests --cov=miniflux_tui
# Preview documentation locally
uv run mkdocs serve
Why Python?
This project is a Python implementation of cliflux (Rust), created since I don't now Rust and wanted to do some changes to that code.
License
MIT License - see LICENSE file for details.
Related Projects
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file miniflux_tui_py-0.4.21.tar.gz.
File metadata
- Download URL: miniflux_tui_py-0.4.21.tar.gz
- Upload date:
- Size: 301.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88b78afc0b3c7cd9a242d8da7313c9cf5cc8f27abf8b5d22f2001bccc5648886
|
|
| MD5 |
75b80dd6ccb613f4c58453c99ec4f072
|
|
| BLAKE2b-256 |
74c55499a5e07f210c9770819c6435d1e6bf911b66edac6465f7851028f91a72
|
Provenance
The following attestation bundles were made for miniflux_tui_py-0.4.21.tar.gz:
Publisher:
publish.yml on reuteras/miniflux-tui-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniflux_tui_py-0.4.21.tar.gz -
Subject digest:
88b78afc0b3c7cd9a242d8da7313c9cf5cc8f27abf8b5d22f2001bccc5648886 - Sigstore transparency entry: 654578326
- Sigstore integration time:
-
Permalink:
reuteras/miniflux-tui-py@8e801485e5208c079b859dbc6cd180fe5dc47f44 -
Branch / Tag:
refs/tags/v0.4.21 - Owner: https://github.com/reuteras
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e801485e5208c079b859dbc6cd180fe5dc47f44 -
Trigger Event:
push
-
Statement type:
File details
Details for the file miniflux_tui_py-0.4.21-py3-none-any.whl.
File metadata
- Download URL: miniflux_tui_py-0.4.21-py3-none-any.whl
- Upload date:
- Size: 41.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6de7f247ecf305df22f0e256b4a26abcf1f88ab5dffe45f73e77cbf65826bff
|
|
| MD5 |
11efca7e0d0a99e19fe496fe50b98b1e
|
|
| BLAKE2b-256 |
40f25b67c23520dbf79bdc9e82675ec0b6ba7afa3e2df474f33a48cd1b19ea1d
|
Provenance
The following attestation bundles were made for miniflux_tui_py-0.4.21-py3-none-any.whl:
Publisher:
publish.yml on reuteras/miniflux-tui-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniflux_tui_py-0.4.21-py3-none-any.whl -
Subject digest:
d6de7f247ecf305df22f0e256b4a26abcf1f88ab5dffe45f73e77cbf65826bff - Sigstore transparency entry: 654578369
- Sigstore integration time:
-
Permalink:
reuteras/miniflux-tui-py@8e801485e5208c079b859dbc6cd180fe5dc47f44 -
Branch / Tag:
refs/tags/v0.4.21 - Owner: https://github.com/reuteras
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e801485e5208c079b859dbc6cd180fe5dc47f44 -
Trigger Event:
push
-
Statement type: