Skip to main content

miniflux-tui-py

miniflux-tui-py logo

PyPI version Python 3.11+ | 3.12 | 3.13 | 3.14 | 3.15 Downloads License: MIT Test Status Last Commit Python 3.15 Preview OSV Scanner CodeQL Container Builds SBOM Documentation pre-commit OpenSSF Best Practices

A Python TUI (Terminal User Interface) client for the Miniflux self-hosted RSS reader built with Textual.

Status

Production/Stable

This project has reached production stability with:

  • ✅ Comprehensive feature set (categories, feeds, settings, history, runtime theme switching)
  • ✅ Non-blocking background operations (sync while using the UI)
  • ✅ Robust CI/CD with automated security and quality workflows
  • ✅ High test coverage (>60%) across Python 3.11-3.15
  • ✅ OpenSSF Best Practices badge
  • ✅ Container builds with SLSA attestation
  • ✅ Professional documentation and API reference

Features

Core Functionality

  • 📖 Browse and read RSS entries with keyboard navigation
  • ✓ Mark entries as read/unread, starred/unstarred
  • 💾 Save entries to third-party services (Pocket, Instapaper, etc.)
  • 🌐 Open in browser or fetch original content for truncated entries
  • 📝 HTML to Markdown conversion for readable display

Organization & Filtering

  • 🗂️ Multiple sort modes - date (newest first), feed (alphabetical), or status (unread first)
  • 📁 Group by feed or category with expand/collapse
  • 🔍 Filter by status - unread only or starred only
  • 🔎 Search through entries by title or content
  • 🏷️ Category management - organize feeds into categories

Feed Management

  • 🔄 Auto-discover feeds from URLs
  • ⚙️ Configure feeds - scraping rules, rewrite rules, fetch settings, blocklist/allowlist
  • 🔁 Refresh feeds - individual feeds or all feeds
  • 📊 Feed status - view problematic feeds and errors
  • 🛠️ Feed settings editor - comprehensive feed configuration

User Experience

  • ⌨️ Keyboard-driven - extensive Vim-style shortcuts
  • 🎨 Runtime theme switching - toggle dark/light mode instantly with 'T' key
  • 🔄 Non-blocking sync - navigate and read entries while syncing in background
  • 📚 Reading history - browse your 200 most recently read entries
  • 🔐 Password manager integration for secure credential storage
  • 📦 Multi-platform - Linux, macOS, Windows support

Installation

# 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

Note: After installation with uv tool install or pip install, you can run the application directly with miniflux-tui (no uv run needed). You can also run it as a Python module: python -m 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):

  1. Download the archive for your platform from the GitHub Releases page.
  2. Extract the archive:
    • Linux/macOS: tar -xzf miniflux-tui-<os>-<arch>.tar.gz
    • Windows: right-click the .zip file and choose Extract All…
  3. (Linux/macOS only) Make the binary executable: chmod +x miniflux-tui
  4. 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-tui once 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 (use 'uv run' when running from source without installing)
uv run miniflux-tui

Note: uv run is only needed when running from source without installing the package. After installing with uv tool install or pip install, use miniflux-tui directly.

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.13+ 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 credentials secret

Use Codespaces secrets to store your credentials so only the Codespaces that you start can read them:

  1. In the repository, go to Settings → Codespaces secrets and add two secrets:
    • MINIFLUX_SERVER_URL: Your Miniflux server URL (e.g. https://miniflux.example.com)
    • MINIFLUX_API_KEY: Your Miniflux API token
  2. Launch a Codespace for this repository. GitHub injects the secrets into the environment each time the Codespace starts. If both secrets are present and no config file exists, miniflux-tui will create a Codespaces-optimized config automatically on first run.
  3. To create the config manually instead, run miniflux-tui --init-codespace.

Each collaborator must define their own secrets—your personal Codespaces secrets are never shared with other users, and theirs are not shared with you. Avoid writing raw tokens to tracked files inside the Codespace so they are not accidentally committed.

The Codespace is set up so the Visual Studio Code Testing view is ready to run the project's pytest suite without extra configuration. Visual Studio 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:

  1. Log into your Miniflux server.

  2. Go to Settings → API Keys → Create a new API key.

  3. Store the generated token in your password manager.

  4. Update the password command 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
c Toggle grouping by category
Shift+G Expand all feeds/categories (when grouped)
Shift+Z Collapse all feeds/categories (when grouped)
h or ← Collapse individual feed/category (when grouped)
l or → Expand individual feed/category (when grouped)
X Open feed settings (when on a feed)
r Refresh current feed on server
Shift+R Refresh all feeds on server
, Sync entries from server (fetch new)
u Show unread entries only
t Show starred entries only
/ Search entries (interactive dialog)
Shift+M Manage categories
Shift+H Toggle reading history view
Shift+X Open scraping rule helper
Shift+T Toggle theme (dark/light)
? Show keyboard help
i Show system status
Shift+S Show TUI settings
q Quit application

Entry Reader View

Key Action
↑/↓ or k/j Scroll up/down
PageUp/PageDown Fast scroll
J Next entry
K Previous entry
u Mark as unread
* Toggle star
e Save entry to third-party service
o Open in browser
f Fetch original content
X Open feed settings
Shift+X Open scraping rule helper
b or Esc Back to list
? Show keyboard help
i Show system status
Shift+S Show TUI settings

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:

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 zensical 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.

  • cliflux - Original Rust TUI client for Miniflux that inspired this tool.
  • Miniflux is a minimalist and opinionated feed reader.
  • textual

Metadata

Release files for miniflux-tui-py 0.8.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for miniflux-tui-py 0.8.12
File Size Uploaded
miniflux_tui_py-0.8.12.tar.gz 454.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for miniflux-tui-py 0.8.12
File Interpreter ABI Platform
miniflux_tui_py-0.8.12-py3-none-any.whl Python 3 none any Details

Total release size: 585.3 kB

Release files / miniflux_tui_py-0.8.12.tar.gz

Download URL miniflux_tui_py-0.8.12.tar.gz
Size 454.3 kB
Tags Source
SHA-256 checksum
How to use checksums
552dc88976dc7f9688d97c46b35c077b99e7acc1162aa2a517995a3c8b42051f
BLAKE2b-256 checksum
How to use checksums
16f34f0a32c9aef149103cce641b6290d70189c3b5c3677793c7ca92e225782f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.

Transparency log

Release files / miniflux_tui_py-0.8.12-py3-none-any.whl

Download URL miniflux_tui_py-0.8.12-py3-none-any.whl
Size 131.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec1b2b4554ea888e7e59e9fa95eb8da05847e98788f4ec734a78d8a49064cb07
BLAKE2b-256 checksum
How to use checksums
1976b45fb0edeb50e2645d57d3e16b6c7562a1dbf1cfaed8dc2ec720245aa65c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.8.21

2 release files

0.8.20

2 release files

0.8.19

2 release files

0.8.17

2 release files

0.8.16

2 release files

0.8.15

2 release files

0.8.14

2 release files

0.8.13

2 release files

This release

0.8.12 This release

2 release files

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.22

2 release files

0.4.21

2 release files

0.4.20

2 release files

0.4.19

2 release files

0.4.18

2 release files

0.4.17

2 release files

0.4.15

2 release files

0.4.11

2 release files

0.4.10

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page