Skip to content
← All apps

Miniflux

Read and organize feeds with a private PostgreSQL database.

Choose your deployment and the way you want to use Selfhost. The instructions below follow that choice.

Set up Miniflux

Complete local deployment with persistent dependencies

  • Choose the PostgreSQL stack. Review the administrator username and local HTTP port, then start the stack. Miniflux migrates its database and creates the first administrator using the generated ADMIN_PASSWORD in the private environment file.
  • Sign in with the chosen administrator. Creating a fresh stack never resets accounts in an existing database.
Customize deployment inputs (3)
Local HTTP port port
portDefault: 8086
Initial hostname (change public URL later in app settings) hostname
hostnameDefault: "localhost"
Administrator username admin-user
identifierDefault: "admin"

Save this as inputs.json and adjust the values before initialization.

{
  "port": 8086,
  "hostname": "localhost",
  "admin-user": "admin"
}
selfhost app --directory ./miniflux init miniflux --method stack --inputs inputs.json

Initialization writes portable files and does not start the app. Review compose.yaml, the private .env and any files in files/, then start it:

selfhost app --directory ./miniflux start

No Selfhost dashboard or background service is needed. You can also start these files directly:

cd miniflux
docker compose -f compose.yaml up -d
  • Review the generated Compose and environment before starting. Only the app HTTP port is published, on loopback.
  • Keep credentials, database and data volumes together in an independent backup. Exported Compose files do not include volume data.
  • Sign in using the selected username and ADMIN_PASSWORD. Bootstrap variables create an initial administrator and do not reset an existing account.

Before configuring integrations

  • Native settings cover polling, workers, HTTP timeouts, metrics, public URL and database connection. Review a plan, apply it, then recreate the container to load changed environment values.
  • Connect an existing OIDC client from Identity. The callback is the public URL followed by /oauth2/oidc/callback. Local login remains enabled; a new OIDC user is not automatically an administrator.
  • Use Check service health for a repeatable health action. Keep PostgreSQL data and credentials together in backups.
  • The generated stack uses a private PostgreSQL service. Changing database settings does not transfer existing feed data.
  • Feed subscriptions, API token creation and administrator promotion remain available in Miniflux itself.

Miniflux integrations

Compose service: miniflux. These operations use the profile saved when this deployment is created.

Native settings

Changes use the app’s Compose environment. Unrelated settings are preserved.

Supported fields (22)
Public URL public-url
string
PostgreSQL URL database-url
secret · advanced
Run migrations on startup migrations
stringChoices: 1, 0
HTTPS cookies and HSTS https
stringChoices: 1, 0
Feed polling interval (minutes) polling-frequency
string
Concurrent requests per host polling-limit
string
Feed worker count workers
string
Feed request timeout (seconds) fetch-timeout
string
Allow private feed destinations private-feeds
string · advancedChoices: 1, 0
Allow private integration destinations private-integrations
string · advancedChoices: 1, 0
Prometheus metrics metrics
stringChoices: 1, 0
Allowed metrics networks metrics-networks
string · advanced
Metrics username metrics-user
string · advanced
Metrics password metrics-password
secret · advanced
Trusted reverse proxy networks proxy-networks
string · advanced
Authentication provider oidc-provider
stringChoices: , oidc, google
OIDC issuer oidc-issuer
string
OIDC client ID oidc-client
string
OIDC client secret oidc-secret
secret
Create users at first OIDC login oidc-create-users
stringChoices: 1, 0
Log level log-level
stringChoices: debug, info, warning, error
Maintenance mode maintenance
string · advancedChoices: 1, 0

Save a JSON map of the field IDs you want to change as changes.json. Replace FIELD_ID with an ID from the supported fields above, and use its declared value type. Review the plan and replace REVIEWED_REVISION with the revision it returns.

{
  "FIELD_ID": "YOUR_VALUE"
}
selfhost app --directory ./miniflux config miniflux
selfhost app --directory ./miniflux plan miniflux changes.json
selfhost app --directory ./miniflux apply miniflux changes.json --revision REVIEWED_REVISION

Saved changes need service recreation to become active. Existing interpolated environment values stay under your control in .env or Compose.

Identity provider login

Selfhost can register a client with a supported provider and configure this app. Callback path: /oauth2/oidc/callback.

No administrator role is assigned by Selfhost. Check the app’s first-login policy and retain a local recovery account.

Save connection.json and replace the URLs. Supply SELFHOST_IDP_TOKEN privately in your shell.

{
  "provider": "zitadel",
  "issuer": "https://identity.example.com",
  "app_url": "https://app.example.com",
  "name": "Miniflux"
}
selfhost app --directory ./miniflux connect-account miniflux connection.json
selfhost app --directory ./miniflux connect-plan miniflux connection.json
selfhost app --directory ./miniflux connect miniflux connection.json --revision REVIEWED_REVISION

Test sign-in in a separate browser session. HTTPS domains and HTTP loopback development origins are supported by Selfhost; the chosen app and provider must also accept the resulting callback. Provider permissions, localhost and recovery.

Database placement

This recipe supports postgres. Workspace projects can choose a dedicated database, a shared source with a separate database and account, or an existing external database before their first start.

Standalone directories use the generated Compose and environment files directly. Configure the database there before first start. Selfhost’s source provisioning commands belong to workspace projects and are optional.

Database setup, CLI commands and backups

App actions

Check service health · schedulable

Run the built-in health check using the current environment.

selfhost app --directory ./miniflux action miniflux check-health

A workspace can schedule this workflow while Selfhost runs. A standalone user can invoke it through an external scheduler. Scheduling guide.

Show version

Show the running Miniflux build version.

selfhost app --directory ./miniflux action miniflux version

App configuration reference

Versions and updates

This deployment uses the following images. Existing projects retain their saved recipe and images. A new catalogue version does not silently update them.

  • database: postgres:17-alpine
  • miniflux: miniflux/miniflux:2.3.3
  • 2.3.3 miniflux/miniflux:2.3.3

    Local PostgreSQL stack initialization, selected administrator authentication, native health action, environment changes and persistent recreation passed. OIDC settings are source-audited; no provider browser round trip was performed.

Review compatibility and back up app data before an update. Choose an image version and review the change.

Keep control of your setup

Selfhost remains optional. Your app runs using ordinary Compose files, its own settings and persistent data. Keep the Compose project name and volumes to preserve storage. Configuration exports and setting backups do not include application data.

Standalone CLI guide · Backups and removal · Miniflux documentation

Built by Obiente. Your services, your configuration.