Skip to content

Settings

Jmaple reads its config from environment variables (prefixed JMAPLE_) and an optional .env file via pydantic-settings. Nested groups use __ as the delimiter.

Top-level settings

Variable Default Purpose
JMAPLE_DATABASE_URL sqlite+aiosqlite:///./var/jmaple.db Async SQLAlchemy URL
JMAPLE_BLOB_DIR ./var/blobs Filesystem path for blob storage
JMAPLE_PUBLIC_BASE_URL (derived from request) Public URL used in session resource
JMAPLE_DEBUG false Enables verbose logs and FastAPI debug mode

Note: which capabilities are enabled is not an env-var setting. Registration is programmatic — see Capabilities for the ASGI app / CLI wrapper pattern.

Database

JMAPLE_DATABASE__POOL_SIZE=10
JMAPLE_DATABASE__MAX_OVERFLOW=20
JMAPLE_DATABASE__POOL_PRE_PING=true
JMAPLE_DATABASE__ECHO=false

SQLite ignores pool settings.

Core capability limits (RFC 8620 §2)

The values advertised on the session resource AND enforced by the dispatcher:

JMAPLE_CORE_CAPABILITY__MAX_SIZE_REQUEST=10485760
JMAPLE_CORE_CAPABILITY__MAX_CALLS_IN_REQUEST=16
JMAPLE_CORE_CAPABILITY__MAX_CONCURRENT_REQUESTS=4
JMAPLE_CORE_CAPABILITY__MAX_OBJECTS_IN_GET=256
JMAPLE_CORE_CAPABILITY__MAX_OBJECTS_IN_SET=256
JMAPLE_CORE_CAPABILITY__MAX_CONCURRENT_UPLOAD=4

Auth

JMAPLE_AUTH__PROVIDERS=["bearer","jwt"]
JMAPLE_AUTH__AUTO_PROVISION=true
JMAPLE_AUTH__ADMIN_SUBJECTS=["https://idp.example/|alice"]

JWT:

JMAPLE_AUTH__JWT__ISSUER=https://issuer.example/
JMAPLE_AUTH__JWT__AUDIENCE=jmaple
JMAPLE_AUTH__JWT__ALGORITHM=RS256
JMAPLE_AUTH__JWT__JWKS_URL=https://issuer.example/.well-known/jwks.json
JMAPLE_AUTH__JWT__JWKS_CACHE_TTL=3600
JMAPLE_AUTH__JWT__LEEWAY=30

OIDC:

JMAPLE_AUTH__OIDC__ISSUER=https://issuer.example/
JMAPLE_AUTH__OIDC__CLIENT_ID=jmaple
JMAPLE_AUTH__OIDC__FETCH_USERINFO=false

Push

JMAPLE_PUSH__SSE_PING_INTERVAL=30
JMAPLE_PUSH__SSE_MAX_LIFETIME=3600
JMAPLE_PUSH__WEBHOOK_VERIFICATION_TIMEOUT=10
JMAPLE_PUSH__WEBHOOK_DELIVERY_TIMEOUT=10
JMAPLE_PUSH__WEBHOOK_MAX_ATTEMPTS=3

Per-capability settings

Some capabilities accept admin-tunable runtime settings, stored in the capability_settings table. Read/write via CLI:

jmaple capability settings get urn:example:todos
jmaple capability settings set urn:example:todos --json '{}'

If your capability defines a Pydantic settings_model on its Capability, jmaple validates the JSON against it before writing.