Skip to main content

Server Configuration

Minimal is configured through a single config.yml file on the server. This page explains every section and field.


Service

Controls the core runtime behaviour of the Minimal server.

service:
name: minimal
port: "3045"
version: "0.0.1"
environment: "development"
server_key: "minimal_oJdz7w8M************************4ue12E7R"
log_level: "debug"
debug_mode: true
cors_enabled: false
middleware_enabled: false
trace_to_stdout: false
shutdown_timeout: 30
otel_endpoint: "localhost:4317"
timeout:
enable: true
timeout: 10
initial_interval: 1
max_interval: 30
max_elapsed_time: 120
FieldTypeDescription
namestringInternal service name — used in logs and traces
portstringPort the Minimal server listens on
versionstringService version — informational only
environmentstringdevelopment or production — affects log verbosity
server_keystringServer-to-server auth key — used only for System APIs (org/project creation). Never expose this to clients.
log_levelstringLogging verbosity — debug, info, warn, error
debug_modebooleanEnables detailed request/response logging — disable in production
cors_enabledbooleanEnable built-in CORS headers. Set to false if your gateway or nginx handles CORS
middleware_enabledbooleanEnable built-in middleware chain — set to false if handled upstream
trace_to_stdoutbooleanPrint OpenTelemetry traces to stdout — useful for local debugging
shutdown_timeoutintegerSeconds to wait for in-flight requests to complete on graceful shutdown
otel_endpointstringOpenTelemetry collector endpoint for distributed tracing

Timeout

Controls retry and timeout behaviour for outbound operations:

FieldTypeDescription
enablebooleanEnable timeout enforcement
timeoutintegerRequest timeout in seconds
initial_intervalintegerInitial retry interval in seconds
max_intervalintegerMaximum retry backoff interval in seconds
max_elapsed_timeintegerTotal time in seconds before retries are abandoned
Production Checklist
  • Set environment: production
  • Set debug_mode: false
  • Set log_level: info or warn
  • Ensure server_key is loaded from a secrets manager, not hardcoded

Definition Store

The internal database where Minimal stores its own configuration — org records, project records, space metadata, and table definitions. This is not your application database.

definition_store:
type: mysql
port: 3306
username: minimalist
password_source: file
password: 'you****'
host: localhost
schema: minimal
connect_timeout_secs: 30
idle_timeout_secs: 600
max_open_connections: 60
max_idle_connections: 25
default_query_timeout_secs: 10
mode: single
encrypt_database: true
encryption_key_source: file
encryption_key: 'password'
FieldTypeDescription
typestringDatabase engine — mysql, postgres, mariadb, clickhouse
portintegerDatabase port — 3306 for MySQL/MariaDB, 5432 for Postgres, 9000 for ClickHouse
usernamestringDatabase username
password_sourcestringWhere to read the password from — file or env
passwordstringPassword value (when password_source: file)
hoststringDatabase host
schemastringDatabase/schema name Minimal uses for its own tables
connect_timeout_secsintegerTimeout in seconds to establish a new connection
idle_timeout_secsintegerHow long an idle connection is kept alive in the pool
max_open_connectionsintegerMaximum concurrent open connections
max_idle_connectionsintegerMaximum idle connections held in the pool
default_query_timeout_secsintegerMaximum time a single query can run before being cancelled
modestringsingle for one node — cluster for multi-node setups
encrypt_databasebooleanEnable encryption at rest for definition data
encryption_key_sourcestringWhere to read the encryption key — file or env
encryption_keystringEncryption key value (when encryption_key_source: file)
Supported Database Types
ValueEngineDefault Port
mysqlMySQL3306
mariadbMariaDB3306
postgresPostgreSQL5432
clickhouseClickHouse9000
danger

The definition store is Minimal's own internal database — do not point it at your application database. Use a dedicated schema (e.g. minimal) on a separate user with limited privileges.


Cache Settings

Controls how long Minimal caches table definitions and schema metadata in memory.

cache_settings:
ttl_seconds: 1800
FieldTypeDescription
ttl_secondsintegerTime in seconds before cached definitions expire and are re-read from the definition store. Default is 1800 (30 minutes)
tip

If you frequently update table definitions or add new projects during development, lower this to 60 so changes are picked up faster. In production, 1800 or higher reduces load on the definition store.


Auto API

Controls the behaviour of the automatically generated REST endpoints.

auto_api:
roles: [admin, power, wheel]
avg_columns_per_table: 20
indexing_page_size: 100
max_rows_per_page: 100
FieldTypeDescription
roleslist of stringsRoles permitted to access Auto API endpoints. Values must match what your gateway sends in X-User-Roles
avg_columns_per_tableintegerUsed to pre-allocate memory for query building — set to the average number of columns across your tables
indexing_page_sizeintegerNumber of rows fetched per page when Minimal indexes table metadata
max_rows_per_pageintegerHard limit on rows returned per request — the ps param cannot exceed this value
caution

max_rows_per_page is a server-side hard cap. If a client sends ps=500 and this is set to 100, the API returns at most 100 rows — no error is raised, the value is silently capped.