Skip to main content
Version: 0.3.36

Configuration Reference

The server reads an optional TOML file (--config <path> or RAISIN_CONFIG). Command-line flags and their environment variables override values from the file. Every section is optional; omitted sections use the defaults shown here.

[server]

[server]
port = 8080
bind_address = "127.0.0.1"
data_dir = "./.data/rocksdb"
initial_admin_password = "ChangeMe123!" # used only when the admin user is first created
anonymous_enabled = false # unauthenticated requests resolve to the "anonymous" role
cors_allowed_origins = ["http://localhost:5173"]
KeyFlag / envDefault
port--port / RAISIN_PORT8080
bind_address--bind-address / RAISIN_BIND_ADDRESS127.0.0.1
data_dir--data-dir / RAISIN_DATA_DIR./.data/rocksdb
initial_admin_password--initial-admin-password / RAISIN_ADMIN_PASSWORDgenerated and printed on first start
anonymous_enablednonefalse
cors_allowed_originsnone[]

[pgwire]

The PostgreSQL wire protocol listener is off by default in the binary; raisindb server start turns it on unless a --config file or RAISIN_PGWIRE_ENABLED decides otherwise.

[pgwire]
enabled = true
bind_address = "127.0.0.1"
port = 5432
max_connections = 100

Flags: --pgwire-enabled true|false, --pgwire-bind-address, --pgwire-port, --pgwire-max-connections (env RAISIN_PGWIRE_*). See PostgreSQL Wire Protocol.

[replication]

Multi-node replication. Off by default.

[replication]
enabled = true
node_id = "node1"
port = 9001
bind_address = "127.0.0.1"

[[replication.peers]]
peer_id = "node2"
address = "127.0.0.1"
port = 9002

Flags: --cluster-node-id, --replication-port, --replication-peers "node2=127.0.0.1:9002,node3=127.0.0.1:9003".

[monitoring]

[monitoring]
enabled = true
interval_secs = 30
port = 9100 # optional; metrics are served on the main HTTP port when omitted

Flags: --monitoring-enabled, --monitoring-interval-secs, --monitoring-port.

[storage]

RocksDB memory bounds. Both are unset by default, which keeps the built-in production tuning.

[storage]
block_cache_size = 536870912 # bytes
db_write_buffer_size = 268435456 # bytes

[secrets]

[secrets]
vaulting_enabled = true

When true (the default), a property declared encrypted: true in a schema is moved into the secret store on write and the node keeps a secret:// reference. Setting it to false stores such properties as plaintext; the server logs a warning at startup and for every affected write.

[locks]

Enables the atomic locks and inventory subsystem. Off by default.

[locks]
enabled = true
backend = "inprocess" # "inprocess" = single server; "redis" = cluster
reaper_interval_secs = 30

[locks.redis] # only used when backend = "redis"
url = "redis://127.0.0.1:6379/0"
namespace = "raisin:locks"
OptionDefaultDescription
enabledfalseMaster switch for locks and inventory.
backend"inprocess""inprocess" (single node) or "redis" (cluster).
reaper_interval_secs30Expired-lock sweep interval (in-process backend).
redis.urlredis://127.0.0.1:6379/0Redis connection URL.
redis.namespaceraisin:locksKey prefix on the Redis instance.

The inprocess backend coordinates within one server only. A multi-node cluster needs backend = "redis" and a server built with the locks-redis feature.

[mcp_client]

Outbound MCP connections (RaisinDB calling other servers' tools). The defaults refuse loopback and private addresses.

[mcp_client]
allowed_hosts = [] # empty = any public host; entries are exact or "*.example.com"
allow_private_addresses = false # local development only
max_response_bytes = 8388608
default_timeout_ms = 30000

[trigger_safety]

Rate limits for trigger functions, on by default. Keys: enabled, rate_limit_per_window, rate_limit_hard_ceiling, node_fire_budget, window_secs.

[platform.hooks.<name>]

Named endpoints that server-side functions may call with raisin.platform.hook('<name>', payload). This is the supported way for a function to reach a service on a loopback or private address, which raisin.http.fetch refuses.

[platform.hooks.studio_update]
url = "http://127.0.0.1:8080/internal/studio/update"
token_env = "STUDIO_INTERNAL_TOKEN" # or token = "..."
token_header = "x-studio-internal-token"
timeout_ms = 120000

[functions.wasm]

Settings for WebAssembly component functions. Keys and defaults: enabled = true, max_artifact_bytes = 33554432, compiled_cache_bytes = 268435456, max_wasm_stack_bytes = 1048576, epoch_tick_ms = 10, allocation = "on-demand" (or "pooling"), max_instances = 15, stdout_capture_bytes = 1048576.

Other keys

  • max_active_jobs_per_tenant (top level): cap on concurrently running jobs per tenant.
  • [system_definitions]: overlay directory for built-in node types and packages.

Environment variables

VariablePurpose
RAISIN_CONFIGPath to the TOML file
RAISIN_PORT, RAISIN_BIND_ADDRESS, RAISIN_DATA_DIRHTTP listener and storage
RAISIN_ADMIN_PASSWORDInitial admin password
RAISIN_PGWIRE_ENABLED, RAISIN_PGWIRE_PORT, RAISIN_PGWIRE_BIND_ADDRESS, RAISIN_PGWIRE_MAX_CONNECTIONSpgwire listener
RAISIN_CLUSTER_NODE_ID, RAISIN_REPLICATION_PORT, RAISIN_REPLICATION_PEERSReplication
RAISIN_DEV_MODEDevelopment mode (insecure default secrets)
JWT_SECRETToken signing secret; required unless in dev mode
RAISINDB_SIGNING_SECRETSigned asset URL secret; required unless in dev mode
RAISIN_MASTER_KEYEncryption key for the secret store
RUST_LOGLog filter, default info (for example warn,raisin_server=info)

A complete, tested example lives in the repository at examples/cluster/node1.toml.