Skip to content

Configuration

MINT reads configuration from four sources, in increasing order of precedence:

  1. Built-in defaults — used when no other source overrides them.
  2. config.json — normally ./config.json; if MINT_SERVER__DATA_PATH is set, MINT uses <dataPath>/config.json when that file exists or when ./config.json is absent.
  3. .envdotenv-style key/value pairs in the working directory.
  4. Environment variables — keys prefixed MINT_, with nested fields joined by __ (e.g., MINT_DATABASE__MODE=postgresql).

For most installations, editing config.json is the only configuration step. There is no separate MINT_CONFIG_PATH setting in the current platform; choose the config location by running from the directory that contains config.json, or by setting MINT_SERVER__DATA_PATH and placing the file at <dataPath>/config.json. Environment variables are useful for containerized deployments where a config file is awkward.

Top-level schema

json
{
  "platformName": "MINT",
  "devMode": false,
  "setupCompleted": false,
  "server": { "...": "..." },
  "database": { "...": "..." },
  "auth": { "...": "..." },
  "plugins": { "...": "..." },
  "marketplace": { "...": "..." },
  "updates": { "...": "..." },
  "logging": { "...": "..." },
  "errorReporting": { "...": "..." },
  "observability": { "...": "..." },
  "access": { "...": "..." },
  "corsOrigins": []
}

The full schema is defined in api/config/models.py using Pydantic — that file is the authoritative reference. The summary below covers the keys most installations touch.

devMode

json
{ "devMode": false }

When true:

  • Authentication is bypassed on every route; anyone hitting the URL is treated as admin
  • Database mode is forced to local SQLite, regardless of the configured database section

Never expose dev mode

Dev mode is for local development and evaluation only. Never enable it on a host reachable from the network.

server

KeyDefaultDescription
apiMountPath/apiAPI mount path
dataPath./dataRuntime state directory
rpId""WebAuthn relying-party ID
rpNameMINTWebAuthn relying-party display name
externalUrl""Public platform URL, used for frontend/plugin context

database

KeyDefaultDescription
modenoneOne of none (auth/passkeys only; experiments/projects disabled), sqlite, postgresql
hostlocalhostPostgreSQL host
port5432PostgreSQL port
databaseNamemint_dbPostgreSQL database name
json
{
  "database": {
    "mode": "postgresql",
    "host": "localhost",
    "port": 5432,
    "databaseName": "mint_db"
  },
  "DB_USERNAME": "mint",
  "DB_PASSWORD": "secret"
}

PostgreSQL credentials are top-level settings named DB_USERNAME and DB_PASSWORD in config.json (or MINT_DB_USERNAME / MINT_DB_PASSWORD in the environment), not nested under database.

auth

KeyDefaultDescription
enableAuthtrueRequire authentication
enablePasskeytrueEnable WebAuthn registration and login
jwtSecretKeyauto-generated if emptySecret used to sign JWTs
tokenExpireMinutes1440Token lifetime

plugins

KeyDefaultDescription
loadFromEntryPointstrueDiscover plugins via the mint.plugins entry-point group
plugins[]Explicit plugin module/class entries from config
extraIndexUrls[]Additional Python package indexes for plugin installs
settings{}Centralized per-plugin settings passed to apply_settings()

marketplace

KeyDefaultDescription
registryUrlhttps://raw.githubusercontent.com/MorscherLab/mint-registry/main/registry.jsonWhere to fetch the plugin catalog
cacheTtlMinutes60Registry cache lifetime
autoUpdatePlugins{}Per-plugin marketplace auto-update toggles

updates

KeyDefaultDescription
autoCheckEnabledfalseEnable background update checks
checkIntervalHours24Polling interval
platformRepoMorscherLab/MINTSource of platform releases
githubToken""Optional GitHub API token; also read from MINT_GITHUB_TOKEN or GITHUB_TOKEN
includePrereleasesfalseInclude prereleases when checking GitHub releases
pluginSources{}Per-plugin GitHub release sources

See Updates for the wider picture.

observability

KeyDefaultDescription
enabledfalseEnable OpenTelemetry tracing
serviceNamemint-platformService name used in traces
otlpEndpointhttp://localhost:4317OTLP endpoint URL
otlpProtocolgrpcOTLP protocol
traceSampleRate1.0Trace sampling rate

When observability.enabled is false, instrumentation is a no-op.

access

KeyDefaultDescription
experimentVisibilityModeopenopen keeps normal project-level experiment visibility; restricted limits experiment lists to creators, collaborators, and experiments in projects the user can access

corsOrigins

json
{ "corsOrigins": ["https://mint.example.org"] }

When empty, production CORS allows no cross-origin browser calls. In dev mode, MINT automatically allows the local frontend/backend origins used by the dev server.

logging and errorReporting

SectionKeys
logginglevel, fileEnabled, filePath, maxBytes, backupCount
errorReportingenabled, githubRepo, githubToken, minLevel, cooldownSeconds, labels

Environment variable mapping

Nested keys use __ (double underscore) as the separator, and MINT_ as the prefix. Examples:

Config keyEnv var
devModeMINT_DEV_MODE
server.dataPathMINT_SERVER__DATA_PATH
database.modeMINT_DATABASE__MODE
database.databaseNameMINT_DATABASE__DATABASE_NAME
auth.jwtSecretKeyMINT_AUTH__JWT_SECRET_KEY
marketplace.registryUrlMINT_MARKETPLACE__REGISTRY_URL
updates.platformRepoMINT_UPDATES__PLATFORM_REPO

Booleans accept true/false/1/0. JSON values can be embedded literally.

Storage path layout

The configured server.dataPath (default ./data) holds platform runtime state:

SubdirectoryContents
mint.dbSQLite database when database.mode is sqlite
passkeys.jsonPasskey storage in local/file-backed mode
plugin_registry.jsonPersistent plugin registry metadata
marketplace/Marketplace registry cache
plugins/uploads/Uploaded .mint bundles and extracted install payloads
plugins/manifest.jsonRestore manifest for dynamically installed plugin bundles
plugins/snapshots/Pre-install / pre-upgrade Python environment snapshots
plugins/<plugin>/venv/Isolated plugin virtual environments when subprocess isolation is used
plugins/<plugin>/config.jsonLegacy per-plugin settings fallback

Removing marketplace/ is safe; it regenerates on demand. Removing plugins/snapshots/ discards rollback history.

Next

Install on Linux (direct) — start the platform with a given config → Platform commandsmint experiment, mint project, …

MINT is open source. Made by the Morscher Lab.