Skip to main content

Complete configuration reference

This page is generated from the same closed JSON Schema shipped with the website. It is a searchable view of the structural file contract. Jiandu also performs runtime semantic, filesystem, and UTF-8 byte-limit checks; run jiandu --config /path/to/config.json --check-config for the authoritative deployment result.

Configuration precedence is defaults < JSON file < environment < command line. Unknown file keys and command-line flags stop startup. Every current setting requires a restart.

schema_version

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
schema_version11File onlyRestart required

data_directory

Base for the SQLite database plus blob and owner-token paths. With PostgreSQL, the external URL-file reference is unchanged while blob and owner-token paths still move. A higher-precedence data-directory override moves the applicable local paths unless an equally sourced, more-specific environment path is set.

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
data_directorystring"jiandu-data"Environment: JIANDU_DATA_DIR
CLI: --data-dir
Base for the SQLite database plus blob and owner-token paths. With PostgreSQL, the external URL-file reference is unchanged while blob and owner-token paths still move. A higher-precedence data-directory override moves the applicable local paths unless an equally sourced, more-specific environment path is set. Restart required; JSON-character length: 1–4096

server

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
server.bindstring"127.0.0.1:8077"Environment: JIANDU_BIND
CLI: --bind
Restart required
server.request_timeout_secondsinteger30Environment: JIANDU_REQUEST_TIMEOUT_SECONDSRestart required; Range: 1–300
server.ingressobject variant{"mode":"loopback_http"}Environment: JIANDU_INGRESS_MODE, JIANDU_PUBLIC_ORIGIN, JIANDU_INGRESS_TRUSTED_PROXY_CIDRS
CLI: --ingress-mode, --public-origin, --ingress-trusted-proxy-cidrs
Closed browser/network boundary. loopback_http requires a loopback bind. https_reverse_proxy requires an exact canonical HTTPS public origin, a private backend bind, and kernel-observed direct peers in the bounded CIDR allowlist; all other direct requests are rejected. Restart required
server.ingress.modeloopback_httpRequired for loopback_httpEnvironment: JIANDU_INGRESS_MODE
CLI: --ingress-mode
Applies to: loopback_http; Restart required
server.ingress.modehttps_reverse_proxyRequired for https_reverse_proxyEnvironment: JIANDU_INGRESS_MODE
CLI: --ingress-mode
Applies to: https_reverse_proxy; Restart required
server.ingress.public_originstringRequired for https_reverse_proxyEnvironment: JIANDU_PUBLIC_ORIGIN
CLI: --public-origin
Applies to: https_reverse_proxy; Restart required; Format: uri; Pattern: ^https://[^/]+$; JSON-character length: 0–2048
server.ingress.trusted_proxy_cidrsarray of stringRequired for https_reverse_proxyEnvironment: JIANDU_INGRESS_TRUSTED_PROXY_CIDRS
CLI: --ingress-trusted-proxy-cidrs
Applies to: https_reverse_proxy; Restart required; Items: 1–32; Items must be unique; Item pattern: ^[0-9A-Fa-f:.]+/[0-9]{1,3}$; Item JSON-character length: 0–64
server.public_hostnamestring or nullnullEnvironment: JIANDU_PUBLIC_HOSTNAME
CLI: --public-hostname
Deprecated migration input. Accepted only as part of the complete legacy HTTPS boundary and may not be combined with server.ingress or JIANDU_INGRESS_*. Deprecated; Restart required; JSON-character length: 0–253
server.trust_tls_terminationboolean or nullnullEnvironment: JIANDU_TRUST_TLS_TERMINATION
CLI: --trust-tls-termination
Deprecated migration input. Accepted only when true alongside the complete legacy HTTPS boundary and may not be combined with server.ingress or JIANDU_INGRESS_*. Deprecated; Restart required
server.trusted_proxy_cidrsarray of stringnullEnvironment: JIANDU_TRUSTED_PROXY_CIDRSDeprecated migration input. Accepted only as part of the complete legacy HTTPS boundary and may not be combined with server.ingress or JIANDU_INGRESS_*. Deprecated; Restart required; Items: 0–32; Items must be unique; Item pattern: ^[0-9A-Fa-f:.]+/[0-9]{1,3}$; Item JSON-character length: 0–64

database

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
database.backendsqlite or postgres"sqlite"Environment: JIANDU_DATABASE_BACKEND
CLI: --database-backend
Restart required
database.pathstring"jiandu-data/jiandu.sqlite3"Environment: JIANDU_DATABASE_PATHRestart required; JSON-character length: 1–4096
database.url_filestring or nullnull
Required when not (backend = sqlite)
Environment: JIANDU_DATABASE_URL_FILE
CLI: --database-url-file
Owner-only file containing the complete PostgreSQL connection URL. Inline connection URLs are never accepted. Protected secret-file reference; Restart required; JSON-character length: 1–4096
database.max_connectionsinteger4Environment: JIANDU_DATABASE_MAX_CONNECTIONSMaximum database connections. SQLite permits at most 16; PostgreSQL permits at most 64 and defaults to 4. Restart required; Range: 1–64
database.busy_timeout_millisecondsinteger5000Environment: JIANDU_DATABASE_BUSY_TIMEOUT_MSSQLite writer busy timeout. This setting is rejected for PostgreSQL. Restart required; Range: 1–60000
database.min_connectionsinteger or nullnullEnvironment: JIANDU_DATABASE_MIN_CONNECTIONSPostgreSQL minimum pool size. null selects the backend default of 1. Rejected for SQLite. Restart required; Range: 1–64
database.acquire_timeout_millisecondsinteger or nullnullEnvironment: JIANDU_DATABASE_ACQUIRE_TIMEOUT_MSPostgreSQL pool-acquisition timeout. null selects the backend default of 10000 milliseconds. Rejected for SQLite. Restart required; Range: 1–60000
database.connect_timeout_millisecondsinteger or nullnullEnvironment: JIANDU_DATABASE_CONNECT_TIMEOUT_MSPostgreSQL connection/startup timeout. null selects the backend default of 10000 milliseconds. Rejected for SQLite. Restart required; Range: 1–60000
database.tls_modeverify_full or verify_ca or nullnullEnvironment: JIANDU_DATABASE_TLS_MODEPostgreSQL certificate policy. null selects verify_full. verify_ca omits hostname verification; plaintext and trust-all modes are unsupported. Restart required
database.tls_ca_pathstring or nullnull
Required when backend = postgres and tls_mode = verify_ca
Environment: JIANDU_DATABASE_TLS_CA_PATHOptional protected file containing PostgreSQL trust anchors. verify_full without this file uses the platform trust store; verify_ca requires it. Inline CA material is not accepted. Protected secret-file reference; Restart required; JSON-character length: 1–4096

storage

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
storage.backendlocal or s3 or webdav or owncloud"local"Environment: JIANDU_BLOB_BACKENDBlob storage backend. Optional; omitting it selects the local disk backend, so configuration files written before this key existed are unchanged in meaning. Restart required
storage.blob_rootstring"jiandu-data/blobs"Environment: JIANDU_BLOB_ROOTLocal disk root for the "local" backend. Ignored by a backend that owns no local path. Restart required; JSON-character length: 1–4096
storage.work_rootstring"jiandu-data/storage-work"Environment: JIANDU_BLOB_WORK_ROOTPrivate local staging and sandbox-snapshot root for a remote backend. Published documents are not mirrored here. Restart required; JSON-character length: 1–4096
storage.bucketstring or nullnull
Required when backend = s3
Environment: JIANDU_S3_BUCKETS3 or S3-compatible bucket name. Required by the s3 backend. Restart required; JSON-character length: 1–255
storage.regionstring or nullnullEnvironment: JIANDU_S3_REGIONS3 signing region; defaults to us-east-1. Restart required; JSON-character length: 1–128
storage.endpointstring or nullnull
Required when backend is webdav or owncloud
Environment: JIANDU_S3_ENDPOINT, JIANDU_WEBDAV_ENDPOINTOptional S3-compatible API endpoint, or required WebDAV collection URL. HTTPS is required unless allow_http is explicitly enabled. Restart required; Format: uri; JSON-character length: 0–2048
storage.prefixstring""Environment: JIANDU_BLOB_PREFIXOptional object-key prefix dedicated to one Jiandu installation. Restart required; JSON-character length: 0–1024
storage.allow_httpbooleanfalseEnvironment: JIANDU_BLOB_ALLOW_HTTPExplicitly permit plaintext HTTP for a trusted local S3-compatible or WebDAV endpoint. Never disables certificate validation for HTTPS. Restart required
storage.virtual_hosted_stylebooleanfalseEnvironment: JIANDU_S3_VIRTUAL_HOSTED_STYLEUse virtual-hosted-style S3 requests instead of the compatibility-oriented path style. Restart required
storage.usernamestring or nullnull
Required when backend is webdav or owncloud
Environment: JIANDU_WEBDAV_USERNAMEWebDAV/ownCloud username. Required by the webdav and owncloud backends. Restart required; JSON-character length: 1–512
storage.password_filestring or nullnull
Required when backend is webdav or owncloud
Environment: JIANDU_WEBDAV_PASSWORD_FILEOwner-only file containing the WebDAV app password. Inline passwords are never accepted. Protected secret-file reference; Restart required; JSON-character length: 1–4096

auth

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
auth.owner_token_pathstring"jiandu-data/owner-access-token"Environment: JIANDU_OWNER_TOKEN_PATHProtected secret-file reference; Restart required; JSON-character length: 1–4096
auth.session_ttl_secondsinteger604800Environment: JIANDU_SESSION_TTL_SECONDSRestart required; Range: 60–2592000
auth.rotate_after_secondsinteger86400Environment: JIANDU_SESSION_ROTATE_AFTER_SECONDSRestart required; Range: 1–2592000
auth.revoked_retention_secondsinteger86400Environment: JIANDU_REVOKED_SESSION_RETENTION_SECONDSRestart required; Range: 0–2592000
auth.passkeysobject or nullnullFile onlyExact WebAuthn relying-party boundary. null keeps passkeys disabled. HTTPS origins require trusted TLS termination, a matching public hostname, and at least one trusted proxy CIDR; exact http://localhost is allowed only on the loopback listener. Restart required
auth.passkeys.rp_idstringRequired when auth.passkeys is enabledFile onlyLowercase DNS relying-party ID. It must equal the public-origin host or be its DNS suffix. Restart required; JSON-character length: 1–253
auth.passkeys.rp_namestringRequired when auth.passkeys is enabledFile onlyHuman-readable relying-party name shown by authenticators. Restart required; JSON-character length: 1–80
auth.passkeys.public_originstringRequired when auth.passkeys is enabledFile onlyExact browser origin verified by WebAuthn; paths, query strings, fragments, and credentials are forbidden. Restart required; Format: uri; JSON-character length: 1–2048
auth.providersarray of object variant[]File onlyBounded authentication provider registry. Provider IDs are stable lowercase URL-safe identifiers used in callback routes. Registry entries are file-only and may not be combined with the deprecated singleton auth.oidc or JIANDU_OIDC_* settings. Restart required; Items: 0–16; Items must be unique
auth.providers[].kindoidcRequired for oidcFile onlyApplies to: oidc; Restart required
auth.providers[].idstringRequired for oidcFile onlyStable provider identity used in browser start and callback routes. Applies to: oidc; Restart required; Pattern: ^[a-z](?:[a-z0-9-]{0,62}[a-z0-9])?$; JSON-character length: 0–64
auth.providers[].display_namestringRequired for oidcFile onlyOperator-selected sign-in label shown to household members. Applies to: oidc; Restart required; JSON-character length: 1–80
auth.providers[].issuerstringRequired for oidcFile onlyConfigured HTTPS OpenID Connect issuer identifier. Applies to: oidc; Restart required; Format: uri; JSON-character length: 1–2048
auth.providers[].client_idstringRequired for oidcFile onlyApplies to: oidc; Restart required; JSON-character length: 1–512
auth.providers[].client_secret_pathstringRequired for oidcFile onlyApplies to: oidc; Protected secret-file reference; Restart required; JSON-character length: 1–4096
auth.providers[].public_originstringRequired for oidcFile onlyApplies to: oidc; Restart required; Format: uri; JSON-character length: 1–2048
auth.providers[].admission_policyinvitation_only or required_group or open"invitation_only"File onlyInvitation-only is the default. Required-group admission requires exact claim and group values. Open admission automatically creates a member for every identity authenticated by the configured OIDC issuer; email and domain admission are intentionally unsupported. Applies to: oidc; Restart required
auth.providers[].admission_group_claimstring or nullnullFile onlyApplies to: oidc; Restart required; JSON-character length: 1–256
auth.providers[].admission_groupstring or nullnullFile onlyApplies to: oidc; Restart required; JSON-character length: 1–512
auth.providers[].kindldapRequired for ldapFile onlyApplies to: ldap; Restart required
auth.providers[].idstringRequired for ldapFile onlyStable provider identity used for external credential lookup. Applies to: ldap; Restart required; Pattern: ^[a-z](?:[a-z0-9-]{0,62}[a-z0-9])?$; JSON-character length: 0–64
auth.providers[].display_namestringRequired for ldapFile onlyOperator-selected directory sign-in label. Applies to: ldap; Restart required; JSON-character length: 1–80
auth.providers[].urlstringRequired for ldapFile onlyldaps:// endpoint, or ldap:// endpoint when start_tls is true. Certificate verification is always enabled. Applies to: ldap; Restart required; Format: uri; JSON-character length: 1–2048
auth.providers[].start_tlsbooleanfalseFile onlyApplies to: ldap; Restart required
auth.providers[].bind_dnstring or nullnullFile onlyApplies to: ldap; Restart required; JSON-character length: 1–2048
auth.providers[].bind_password_pathstring or nullnullFile onlyApplies to: ldap; Protected secret-file reference; Restart required; JSON-character length: 1–4096
auth.providers[].user_base_dnstringRequired for ldapFile onlyApplies to: ldap; Restart required; JSON-character length: 1–2048
auth.providers[].username_attributestringRequired for ldapFile onlyApplies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$
auth.providers[].subject_attributestringRequired for ldapFile onlyImmutable directory UUID attribute, commonly entryUUID or objectGUID. Applies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$
auth.providers[].display_name_attributestring or nullnullFile onlyApplies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$
auth.providers[].additional_user_filterstring or nullnullFile onlyOperator-controlled parenthesized LDAP filter combined with the escaped username assertion. Applies to: ldap; Restart required; JSON-character length: 2–2048
auth.providers[].admission_policyinvitation_only or required_group"invitation_only"File onlyApplies to: ldap; Restart required
auth.providers[].group_attributestring or nullnullFile onlyApplies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$
auth.providers[].admission_groupstring or nullnullFile onlyApplies to: ldap; Restart required; JSON-character length: 1–2048
auth.providers[].kindtrusted_proxyRequired for trusted_proxyFile onlyApplies to: trusted_proxy; Restart required
auth.providers[].idstringRequired for trusted_proxyFile onlyApplies to: trusted_proxy; Restart required; Pattern: ^[a-z](?:[a-z0-9-]{0,62}[a-z0-9])?$; JSON-character length: 0–64
auth.providers[].display_namestringRequired for trusted_proxyFile onlyApplies to: trusted_proxy; Restart required; JSON-character length: 1–80
auth.providers[].subject_headerstringRequired for trusted_proxyFile onlyLowercase header carrying the proxy's immutable provider-scoped subject. Applies to: trusted_proxy; Restart required; JSON-character length: 1–64
auth.providers[].display_name_headerstring or nullnullFile onlyApplies to: trusted_proxy; Restart required; JSON-character length: 1–64
auth.providers[].groups_headerstring or nullnullFile onlyApplies to: trusted_proxy; Restart required; JSON-character length: 1–64
auth.providers[].secret_pathstringRequired for trusted_proxyFile onlyOwner-only deployment-secret file injected by the trusted direct proxy. Applies to: trusted_proxy; Protected secret-file reference; Restart required; JSON-character length: 1–4096
auth.providers[].admission_policyinvitation_only or required_group"invitation_only"File onlyApplies to: trusted_proxy; Restart required
auth.providers[].admission_groupstring or nullnullFile onlyApplies to: trusted_proxy; Restart required; JSON-character length: 1–512
auth.oidcobject or nullnullFile onlyDeprecated single-provider OpenID Connect input retained for configuration migration. It normalizes to provider ID oidc and cannot be combined with auth.providers. null disables this compatibility input. Restart required
auth.oidc.issuerstringNo schema defaultEnvironment: JIANDU_OIDC_ISSUERConfigured HTTPS OpenID Connect issuer identifier. Discovery and token validation must remain pinned to this issuer. Restart required; Format: uri; JSON-character length: 1–2048
auth.oidc.client_idstringNo schema defaultEnvironment: JIANDU_OIDC_CLIENT_IDPublic OAuth client identifier for the configured issuer. Restart required; JSON-character length: 1–512
auth.oidc.client_secret_pathstringNo schema defaultEnvironment: JIANDU_OIDC_CLIENT_SECRET_PATHPrivate filesystem reference to the OIDC client secret. The secret value is never accepted inline or through an environment variable. Protected secret-file reference; Restart required; JSON-character length: 1–4096
auth.oidc.public_originstringNo schema defaultEnvironment: JIANDU_OIDC_PUBLIC_ORIGINExact HTTPS browser origin used for OIDC callbacks; it must exactly match server.ingress.public_origin. Restart required; Format: uri; JSON-character length: 1–2048
auth.oidc.admission_policyinvitation_only or required_group or open"invitation_only"Environment: JIANDU_OIDC_ADMISSION_POLICYInvitation-only is the default. Required-group admission requires exact claim and group values. Open admission automatically creates a member for every identity authenticated by the configured OIDC issuer; email and domain admission are intentionally unsupported. Restart required
auth.oidc.admission_group_claimstring or nullnullEnvironment: JIANDU_OIDC_ADMISSION_GROUP_CLAIMExact identity-token claim name used only with required_group admission. Restart required; JSON-character length: 1–256
auth.oidc.admission_groupstring or nullnullEnvironment: JIANDU_OIDC_ADMISSION_GROUPExact group value required only with required_group admission. Restart required; JSON-character length: 1–512

connectors

Optional OAuth email-ingest connectors. null keeps the feature unavailable. When any key is present, the effective merged configuration requires secret_key_path, oauth_client_id, oauth_client_secret_path, and an https public_origin. Provider refresh tokens are sealed at rest with the file-backed connector key; provider client secrets are also file-backed, and neither secret is accepted inline. Configure the complete boundary at https://jiandu.org/docs/configuration/capture-and-email.

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
connectorsobject or nullnullFile onlyOptional OAuth email-ingest connectors. null keeps the feature unavailable. When any key is present, the effective merged configuration requires secret_key_path, oauth_client_id, oauth_client_secret_path, and an https public_origin. Provider refresh tokens are sealed at rest with the file-backed connector key; provider client secrets are also file-backed, and neither secret is accepted inline. Configure the complete boundary at https://jiandu.org/docs/configuration/capture-and-email. Restart required
connectors.secret_key_pathstringNo schema defaultEnvironment: JIANDU_CONNECTOR_SECRET_KEY_PATHOwner-only file containing the base64 32-byte key that seals connector refresh tokens at rest. The key value is never accepted inline or through an environment variable. Protected secret-file reference; Restart required; JSON-character length: 1–4096
connectors.oauth_client_idstringNo schema defaultEnvironment: JIANDU_CONNECTOR_OAUTH_CLIENT_IDPublic OAuth client identifier registered with the mailbox provider. Restart required; JSON-character length: 1–512
connectors.oauth_client_secret_pathstringNo schema defaultEnvironment: JIANDU_CONNECTOR_OAUTH_CLIENT_SECRET_PATHOwner-only file containing the provider OAuth client secret. The secret value is never accepted inline or through an environment variable. Protected secret-file reference; Restart required; JSON-character length: 1–4096
connectors.public_originstringNo schema defaultEnvironment: JIANDU_CONNECTOR_PUBLIC_ORIGINExact HTTPS browser origin the provider redirects back to. The registered redirect URI is this origin plus /api/v1/connectors/email/callback. Restart required; Format: uri; JSON-character length: 1–2048

capture

Optional operator-owned trust boundary for watch-folder and eSCL capture. Household users may select only these configured roots and address-pinned endpoints; null keeps both transports unavailable.

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
captureobject or nullnullFile onlyOptional operator-owned trust boundary for watch-folder and eSCL capture. Household users may select only these configured roots and address-pinned endpoints; null keeps both transports unavailable. Restart required
capture.watch_rootsarray of object[]File onlyAbsolute local roots the operator allows Jiandu to inspect. Connector records reference an ID and cannot supply arbitrary paths. Restart required; Items: 0–32
capture.watch_roots[].idstringRequired for every itemFile onlyRestart required; Pattern: ^[a-z0-9][a-z0-9_-]*$; JSON-character length: 1–64
capture.watch_roots[].display_namestringRequired for every itemFile onlyRestart required; JSON-character length: 1–80
capture.watch_roots[].pathstringRequired for every itemFile onlyAbsolute operator-approved filesystem root. Restart required; JSON-character length: 1–4096
capture.watch_roots[].processed_directorystringRequired for every itemFile onlySafe relative directory beneath the root for accepted or duplicate inputs. Restart required; JSON-character length: 1–4096
capture.watch_roots[].quarantine_directorystringRequired for every itemFile onlySafe relative directory beneath the root for terminal failures. Restart required; JSON-character length: 1–4096
capture.watch_roots[].stable_secondsintegerRequired for every itemFile onlyRestart required; Range: 1–300
capture.watch_roots[].polling_onlybooleanRequired for every itemFile onlyUse polling as the correctness path; filesystem events are only an optional latency hint. Restart required
capture.escl_endpointsarray of object[]File onlyFixed eSCL/AirScan endpoints with explicit address pins and approved network ranges. Redirects and ambient proxies cannot widen this allowlist. Restart required; Items: 0–32
capture.escl_endpoints[].idstringRequired for every itemFile onlyRestart required; Pattern: ^[a-z0-9][a-z0-9_-]*$; JSON-character length: 1–64
capture.escl_endpoints[].display_namestringRequired for every itemFile onlyRestart required; JSON-character length: 1–80
capture.escl_endpoints[].endpointstringRequired for every itemFile onlyRestart required; Format: uri; JSON-character length: 1–2048
capture.escl_endpoints[].pinned_addressesarray of stringRequired for every itemFile onlyRestart required; Items: 1–8
capture.escl_endpoints[].approved_networksarray of stringRequired for every itemFile onlyRestart required; Items: 1–32
capture.escl_endpoints[].request_timeout_secondsintegerRequired for every itemFile onlyRestart required; Range: 5–300
capture.reconciliation_interval_secondsinteger5File onlyBounded interval for durable watch and capture-job reconciliation. Restart required; Range: 1–300
capture.capture_job_lease_secondsinteger300File onlyLease duration for direct eSCL workers and outbound Linux/SANE agents. Restart required; Range: 30–900

plugins

Optional reduced-isolation execution for owner-reviewed local plugin packages. null keeps all plugin workers unavailable. Registry or unreviewed packages are not supported by this runtime profile.

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
pluginsobject or nullnullFile onlyOptional reduced-isolation execution for owner-reviewed local plugin packages. null keeps all plugin workers unavailable. Registry or unreviewed packages are not supported by this runtime profile. Restart required
plugins.runtimedeno"deno"File onlyRestart required
plugins.trust_policyowner_reviewed_local_only"owner_reviewed_local_only"File onlyExplicit acknowledgement that the current Deno subprocess boundary is for locally reviewed packages, not hostile code. Restart required
plugins.deno_executable_pathstringRequired when plugins is enabledFile onlyAbsolute path to the Jiandu-packaged Deno executable. Ambient PATH lookup is never used and the runtime version is checked before every invocation. Restart required; JSON-character length: 1–4096
plugins.worker_countinteger1File onlyBounded concurrent plugin invocations. Core document processing remains independently supervised. Restart required; Range: 1–4

limits

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
limits.max_upload_bytesinteger104857600Environment: JIANDU_MAX_UPLOAD_BYTESRestart required; Changes processing identity; Range: 1–268435456
limits.max_pagesinteger2000Environment: JIANDU_MAX_PAGESRestart required; Changes processing identity; Range: 1–10000
limits.max_image_pixelsinteger200000000Environment: JIANDU_MAX_IMAGE_PIXELSRestart required; Changes processing identity; Range: 1–1000000000
limits.worker_countinteger2Environment: JIANDU_WORKER_COUNTRestart required; Range: 1–16

telemetry

SettingAccepted valueDefault or requirementOverridesMeaning and constraints
telemetry.log_filterstring"jiandu=info"Environment: RUST_LOGRestart required; JSON-character length: 1–4096
telemetry.json_logsbooleantrueEnvironment: JIANDU_JSON_LOGSRestart required
telemetry.remote_exportbooleanfalseEnvironment: JIANDU_REMOTE_TELEMETRYMaster operator consent for network telemetry export. Signal-specific OTEL exporters remain independently disableable. Restart required
telemetry.product_metrics_exportbooleanfalseEnvironment: JIANDU_PRODUCT_METRICS_TELEMETRYSeparate consent for remotely exporting the product-use metric privacy class. Requires remote_export. Restart required
telemetry.export_queue_itemsinteger1024Environment: OTEL_BSP_MAX_QUEUE_SIZE, OTEL_BLRP_MAX_QUEUE_SIZEDefault item bound applied to each asynchronous trace and log export queue. Signal-specific standard OTel environment variables may lower it. Restart required; Range: 1–4096
telemetry.export_queue_bytesinteger8388608Environment: JIANDU_OTEL_QUEUE_BYTESShared hard in-memory payload-accounting bound for asynchronous trace and log export. It must be at least 4096 bytes multiplied by the sum of the effective trace and log queue item bounds. Restart required; Range: 8192–33554432
telemetry.export_batch_itemsinteger128Environment: OTEL_BSP_MAX_EXPORT_BATCH_SIZE, OTEL_BLRP_MAX_EXPORT_BATCH_SIZEDefault item bound applied to trace and log export batches. It cannot exceed the corresponding queue bound. Restart required; Range: 1–512
telemetry.export_schedule_delay_millisecondsinteger1000Environment: OTEL_BSP_SCHEDULE_DELAY, OTEL_BLRP_SCHEDULE_DELAYDefault maximum delay before a trace or log batch is offered to its exporter. Restart required; Range: 1–10000
telemetry.export_timeout_millisecondsinteger2000Environment: OTEL_EXPORTER_OTLP_TIMEOUT, OTEL_EXPORTER_OTLP_TRACES_TIMEOUT, OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, OTEL_EXPORTER_OTLP_LOGS_TIMEOUT, OTEL_BSP_EXPORT_TIMEOUT, OTEL_BLRP_EXPORT_TIMEOUTDefault per-attempt OTLP export deadline. General and per-signal standard OTel environment variables may lower it. Restart required; Range: 1–5000
telemetry.shutdown_timeout_millisecondsinteger3000Environment: JIANDU_OTEL_SHUTDOWN_TIMEOUT_MSHard process deadline for flushing and stopping telemetry workers during graceful shutdown. Restart required; Range: 1–10000
telemetry.metric_export_interval_millisecondsinteger30000Environment: OTEL_METRIC_EXPORT_INTERVALPeriodic metric-reader interval when OTLP metric export is enabled. Restart required; Range: 1–300000
telemetry.max_attribute_countinteger32Environment: OTEL_ATTRIBUTE_COUNT_LIMITMaximum reviewed attributes retained on a telemetry record or span. Restart required; Range: 1–64
telemetry.max_attribute_value_bytesinteger256Environment: OTEL_ATTRIBUTE_VALUE_LENGTH_LIMITMaximum UTF-8 byte length retained for any telemetry attribute value. Restart required; Range: 1–1024
telemetry.max_span_eventsinteger16Environment: OTEL_SPAN_EVENT_COUNT_LIMITMaximum event count retained on one span. Restart required; Range: 0–32
telemetry.max_span_linksinteger8Environment: OTEL_SPAN_LINK_COUNT_LIMITMaximum link count retained on one span. Restart required; Range: 0–16
telemetry.metric_cardinality_limitinteger128Environment: JIANDU_OTEL_METRIC_CARDINALITY_LIMITMaximum active attribute sets retained per metric stream. Restart required; Range: 1–256

Validate before restart

Run validation as the same operating-system account, with the same filesystem and secret mounts, that will run Jiandu:

jiandu --config /etc/jiandu/jiandu.json --check-config

For a concern-oriented explanation, start with Configuration. For environment-only OpenTelemetry inputs, use Environment variables.