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 startNo 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_REVISIONTest 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 backupsApp actions
Check service health · schedulable
Run the built-in health check using the current environment.
selfhost app --directory ./miniflux action miniflux check-healthA 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 versionVersions 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.3Local 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