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.89"
node = "22"
rust-analyzer = "latest"
"cargo:cargo-watch" = "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"
ANTHROPIC_API_KEY = { required = true }
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 devRun full stack locally (backend + frontend with hot-reload)
mise run dev:backendRun backend only with cargo-watch
mise run dev:frontendRun Next.js frontend dev server only
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 docker:devRun full dev stack in Docker with hot-reload
mise run docker:dev:downStop dev Docker stack
mise run docker:prodRun production stack in Docker
mise run docker:prod:downStop production Docker stack
mise run dockerBuild production Docker image
mise run docker:publishBuild production image and push to GHCR
mise run docker:update-versionsPull latest dependencies and update version locks
mise run releaseRelease: bump version, git tag, build and push Docker image
mise run cleanRemove build artifacts and generated files

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]
# Required
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 = "..."

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"