Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Installation

Midden is distributed as a Rust binary and a Docker image build target in this repository.

Build The Binary

cargo build --release --locked --bin midden

The binary will be available at:

target/release/midden

Configure

Create a starting configuration:

midden config print-defaults > midden.toml

Edit at least:

[server]
bind = "0.0.0.0:8080"
public_base_url = "https://files.example.test"

[security]
secure_cookies = true

For local-only development, the defaults are enough.

Run The Container Directly

The image defaults to listening on 0.0.0.0:8080. Its default SQLite database and local blob paths are under the /var/lib/midden working directory, so mount that directory for persistence:

docker build -t midden:local .
docker run --rm -p 8080:8080 \
  -v midden-data:/var/lib/midden \
  -e MIDDEN__SERVER__PUBLIC_BASE_URL=http://localhost:8080 \
  midden:local

The image health check requests /healthz. Use the Compose models for the PostgreSQL and S3-compatible layout.

Migrate

Run migrations before serving, or let midden serve apply them at startup:

midden --config midden.toml migrate

Serve

midden --config midden.toml serve

Useful Commands

midden --config midden.toml config check
midden --config midden.toml owner create --email owner@example.test --username owner
midden --config midden.toml owner reset-password --email owner@example.test --password new-password
midden --config midden.toml user set-role --email user@example.test --role moderator
midden --config midden.toml storage verify
midden --config midden.toml jobs run-once

config check constructs the application state and validates that database, storage, templates, SMTP configuration, and other startup surfaces can be initialized.