Skip to content

mise is a polyglot tool and task runner that manages Rust, Node, environment variables, and dev tasks from a single config file. Frona uses it as the single entry point for all development workflows.

mise.toml overview ​

The committed mise.toml in the project root defines three things:

Tools ​

toml
[tools]
rust = "1.98.1"
node = "24.21.0"
rust-analyzer = "latest"

Running mise install installs all of these automatically. No need to manage Rust or Node versions manually.

Environment variables ​

toml
[env]
FRONA_DATABASE_PATH = "data/db"
FRONA_LOG_LEVEL = "debug"
FRONA_SERVER_BACKEND_URL = "http://localhost:3001"
FRONA_SERVER_FRONTEND_URL = "http://localhost:3000"
FRONA_SERVER_PORT = "3001"
FRONA_SERVER_CORS_ORIGINS = "http://localhost:3000"
FRONA_BROWSER_WS_URL = "ws://localhost:3333"
FRONA_BROWSER_PROFILES_PATH = "/profiles"

These defaults work out of the box for local development. Override any of them in mise.local.toml.

Tasks ​

All dev workflows are defined as mise tasks. Run any task with mise run <task>.

Key commands ​

CommandDescription
mise run buildProduction build (frontend + backend)
mise run checkCargo check all crates
mise run lintRun clippy + frontend lint
mise run testRun all tests
mise run fmtFormat the Rust workspace
mise run fmt:checkVerify workspace-wide Rust formatting
mise run container:devRun the full development stack with hot-reload
mise run container:dev:buildRebuild the development image and run the stack
mise run container:dev:downStop the development stack and remove its named volumes
mise run container:prodBuild and run the production stack
mise run container:prod:downStop the production stack
mise run containerBuild the production container image
mise run container:publishBuild the production image and push it to GHCR
mise run container:update-versionsPull dependencies and update pinned versions
mise run releaseRelease: bump version, git tag, build and push Docker image
mise run release:prepareTest and prepare an unpushed release bundle
mise run release:buildBuild one native architecture from a prepared release
mise run release:pushVerify and publish images, then push the release commit and tag
mise run test:releaseCheck release scripts with isolated repositories and fake build tools
mise run cleanEmpty build artifact directories while preserving mount roots and retained data

Use container:dev for development; the old host dev, dev:backend, and dev:frontend tasks have been removed. Bacon runs the Rust watcher inside the container, with Kache for compiler caching. Rebuild older images with container:dev:build.

The container tasks use Podman when it is installed, otherwise Docker. Set CONTAINER_RUNTIME=docker or CONTAINER_RUNTIME=podman to override detection. CONTAINER_BUILD_JOBS controls parallel Podman image-build jobs; the development wrapper derives CONTAINER_UID and CONTAINER_GID from the current user unless you override them.

Configuring mise.local.toml ​

mise.local.toml is gitignored and used for personal API keys and local overrides. Create it in the project root:

toml
[env]
# Optional: auto-discover an Anthropic connection
ANTHROPIC_API_KEY = "sk-ant-..."

# Optional: additional LLM providers
# OPENROUTER_API_KEY = "sk-or-..."
# OLLAMA_API_BASE_URL = "http://localhost:11434"

# Optional: SearXNG override (if running outside Docker)
# FRONA_SEARXNG_URL = "http://localhost:8888"

# Optional: Twilio voice integration
# FRONA_VOICE_TWILIO_ACCOUNT_SID = "AC..."
# FRONA_VOICE_TWILIO_AUTH_TOKEN = "..."
# FRONA_VOICE_TWILIO_FROM_NUMBER = "+1..."

# Optional: ngrok for exposing local instance
# NGROK_AUTHTOKEN = "..."

Provider keys can also be configured in the setup wizard or provider settings. Forward any environment variables you use into the container.

Common overrides ​

Custom CORS origins ​

If you're accessing Frona from a different device on your network (e.g., testing on a phone):

toml
[env]
FRONA_SERVER_CORS_ORIGINS = "http://localhost:3000,http://192.168.1.100:3000"
FRONA_SERVER_BACKEND_URL = "http://192.168.1.100:3001"

Alternate backend URL ​

When testing the frontend against a remote or staging backend:

toml
[env]
FRONA_SERVER_BACKEND_URL = "https://frona.example.com"