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
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
schema_version | 1 | 1 | File only | Restart 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.
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
data_directory | string | "jiandu-data" | Environment: JIANDU_DATA_DIRCLI: --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
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
server.bind | string | "127.0.0.1:8077" | Environment: JIANDU_BINDCLI: --bind | Restart required |
server.request_timeout_seconds | integer | 30 | Environment: JIANDU_REQUEST_TIMEOUT_SECONDS | Restart required; Range: 1–300 |
server.ingress | object variant | {"mode":"loopback_http"} | Environment: JIANDU_INGRESS_MODE, JIANDU_PUBLIC_ORIGIN, JIANDU_INGRESS_TRUSTED_PROXY_CIDRSCLI: --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.mode | loopback_http | Required for loopback_http | Environment: JIANDU_INGRESS_MODECLI: --ingress-mode | Applies to: loopback_http; Restart required |
server.ingress.mode | https_reverse_proxy | Required for https_reverse_proxy | Environment: JIANDU_INGRESS_MODECLI: --ingress-mode | Applies to: https_reverse_proxy; Restart required |
server.ingress.public_origin | string | Required for https_reverse_proxy | Environment: JIANDU_PUBLIC_ORIGINCLI: --public-origin | Applies to: https_reverse_proxy; Restart required; Format: uri; Pattern: ^https://[^/]+$; JSON-character length: 0–2048 |
server.ingress.trusted_proxy_cidrs | array of string | Required for https_reverse_proxy | Environment: JIANDU_INGRESS_TRUSTED_PROXY_CIDRSCLI: --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_hostname | string or null | null | Environment: JIANDU_PUBLIC_HOSTNAMECLI: --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_termination | boolean or null | null | Environment: JIANDU_TRUST_TLS_TERMINATIONCLI: --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_cidrs | array of string | null | Environment: JIANDU_TRUSTED_PROXY_CIDRS | 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; Items: 0–32; Items must be unique; Item pattern: ^[0-9A-Fa-f:.]+/[0-9]{1,3}$; Item JSON-character length: 0–64 |
database
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
database.backend | sqlite or postgres | "sqlite" | Environment: JIANDU_DATABASE_BACKENDCLI: --database-backend | Restart required |
database.path | string | "jiandu-data/jiandu.sqlite3" | Environment: JIANDU_DATABASE_PATH | Restart required; JSON-character length: 1–4096 |
database.url_file | string or null | nullRequired when not ( backend = sqlite) | Environment: JIANDU_DATABASE_URL_FILECLI: --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_connections | integer | 4 | Environment: JIANDU_DATABASE_MAX_CONNECTIONS | Maximum database connections. SQLite permits at most 16; PostgreSQL permits at most 64 and defaults to 4. Restart required; Range: 1–64 |
database.busy_timeout_milliseconds | integer | 5000 | Environment: JIANDU_DATABASE_BUSY_TIMEOUT_MS | SQLite writer busy timeout. This setting is rejected for PostgreSQL. Restart required; Range: 1–60000 |
database.min_connections | integer or null | null | Environment: JIANDU_DATABASE_MIN_CONNECTIONS | PostgreSQL minimum pool size. null selects the backend default of 1. Rejected for SQLite. Restart required; Range: 1–64 |
database.acquire_timeout_milliseconds | integer or null | null | Environment: JIANDU_DATABASE_ACQUIRE_TIMEOUT_MS | PostgreSQL pool-acquisition timeout. null selects the backend default of 10000 milliseconds. Rejected for SQLite. Restart required; Range: 1–60000 |
database.connect_timeout_milliseconds | integer or null | null | Environment: JIANDU_DATABASE_CONNECT_TIMEOUT_MS | PostgreSQL connection/startup timeout. null selects the backend default of 10000 milliseconds. Rejected for SQLite. Restart required; Range: 1–60000 |
database.tls_mode | verify_full or verify_ca or null | null | Environment: JIANDU_DATABASE_TLS_MODE | PostgreSQL certificate policy. null selects verify_full. verify_ca omits hostname verification; plaintext and trust-all modes are unsupported. Restart required |
database.tls_ca_path | string or null | nullRequired when backend = postgres and tls_mode = verify_ca | Environment: JIANDU_DATABASE_TLS_CA_PATH | Optional 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
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
storage.backend | local or s3 or webdav or owncloud | "local" | Environment: JIANDU_BLOB_BACKEND | Blob 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_root | string | "jiandu-data/blobs" | Environment: JIANDU_BLOB_ROOT | Local disk root for the "local" backend. Ignored by a backend that owns no local path. Restart required; JSON-character length: 1–4096 |
storage.work_root | string | "jiandu-data/storage-work" | Environment: JIANDU_BLOB_WORK_ROOT | Private local staging and sandbox-snapshot root for a remote backend. Published documents are not mirrored here. Restart required; JSON-character length: 1–4096 |
storage.bucket | string or null | nullRequired when backend = s3 | Environment: JIANDU_S3_BUCKET | S3 or S3-compatible bucket name. Required by the s3 backend. Restart required; JSON-character length: 1–255 |
storage.region | string or null | null | Environment: JIANDU_S3_REGION | S3 signing region; defaults to us-east-1. Restart required; JSON-character length: 1–128 |
storage.endpoint | string or null | nullRequired when backend is webdav or owncloud | Environment: JIANDU_S3_ENDPOINT, JIANDU_WEBDAV_ENDPOINT | Optional 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.prefix | string | "" | Environment: JIANDU_BLOB_PREFIX | Optional object-key prefix dedicated to one Jiandu installation. Restart required; JSON-character length: 0–1024 |
storage.allow_http | boolean | false | Environment: JIANDU_BLOB_ALLOW_HTTP | Explicitly permit plaintext HTTP for a trusted local S3-compatible or WebDAV endpoint. Never disables certificate validation for HTTPS. Restart required |
storage.virtual_hosted_style | boolean | false | Environment: JIANDU_S3_VIRTUAL_HOSTED_STYLE | Use virtual-hosted-style S3 requests instead of the compatibility-oriented path style. Restart required |
storage.username | string or null | nullRequired when backend is webdav or owncloud | Environment: JIANDU_WEBDAV_USERNAME | WebDAV/ownCloud username. Required by the webdav and owncloud backends. Restart required; JSON-character length: 1–512 |
storage.password_file | string or null | nullRequired when backend is webdav or owncloud | Environment: JIANDU_WEBDAV_PASSWORD_FILE | Owner-only file containing the WebDAV app password. Inline passwords are never accepted. Protected secret-file reference; Restart required; JSON-character length: 1–4096 |
auth
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
auth.owner_token_path | string | "jiandu-data/owner-access-token" | Environment: JIANDU_OWNER_TOKEN_PATH | Protected secret-file reference; Restart required; JSON-character length: 1–4096 |
auth.session_ttl_seconds | integer | 604800 | Environment: JIANDU_SESSION_TTL_SECONDS | Restart required; Range: 60–2592000 |
auth.rotate_after_seconds | integer | 86400 | Environment: JIANDU_SESSION_ROTATE_AFTER_SECONDS | Restart required; Range: 1–2592000 |
auth.revoked_retention_seconds | integer | 86400 | Environment: JIANDU_REVOKED_SESSION_RETENTION_SECONDS | Restart required; Range: 0–2592000 |
auth.passkeys | object or null | null | File only | Exact 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_id | string | Required when auth.passkeys is enabled | File only | Lowercase 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_name | string | Required when auth.passkeys is enabled | File only | Human-readable relying-party name shown by authenticators. Restart required; JSON-character length: 1–80 |
auth.passkeys.public_origin | string | Required when auth.passkeys is enabled | File only | Exact browser origin verified by WebAuthn; paths, query strings, fragments, and credentials are forbidden. Restart required; Format: uri; JSON-character length: 1–2048 |
auth.providers | array of object variant | [] | File only | Bounded 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[].kind | oidc | Required for oidc | File only | Applies to: oidc; Restart required |
auth.providers[].id | string | Required for oidc | File only | Stable 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_name | string | Required for oidc | File only | Operator-selected sign-in label shown to household members. Applies to: oidc; Restart required; JSON-character length: 1–80 |
auth.providers[].issuer | string | Required for oidc | File only | Configured HTTPS OpenID Connect issuer identifier. Applies to: oidc; Restart required; Format: uri; JSON-character length: 1–2048 |
auth.providers[].client_id | string | Required for oidc | File only | Applies to: oidc; Restart required; JSON-character length: 1–512 |
auth.providers[].client_secret_path | string | Required for oidc | File only | Applies to: oidc; Protected secret-file reference; Restart required; JSON-character length: 1–4096 |
auth.providers[].public_origin | string | Required for oidc | File only | Applies to: oidc; Restart required; Format: uri; JSON-character length: 1–2048 |
auth.providers[].admission_policy | invitation_only or required_group or open | "invitation_only" | File only | Invitation-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_claim | string or null | null | File only | Applies to: oidc; Restart required; JSON-character length: 1–256 |
auth.providers[].admission_group | string or null | null | File only | Applies to: oidc; Restart required; JSON-character length: 1–512 |
auth.providers[].kind | ldap | Required for ldap | File only | Applies to: ldap; Restart required |
auth.providers[].id | string | Required for ldap | File only | Stable 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_name | string | Required for ldap | File only | Operator-selected directory sign-in label. Applies to: ldap; Restart required; JSON-character length: 1–80 |
auth.providers[].url | string | Required for ldap | File only | ldaps:// 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_tls | boolean | false | File only | Applies to: ldap; Restart required |
auth.providers[].bind_dn | string or null | null | File only | Applies to: ldap; Restart required; JSON-character length: 1–2048 |
auth.providers[].bind_password_path | string or null | null | File only | Applies to: ldap; Protected secret-file reference; Restart required; JSON-character length: 1–4096 |
auth.providers[].user_base_dn | string | Required for ldap | File only | Applies to: ldap; Restart required; JSON-character length: 1–2048 |
auth.providers[].username_attribute | string | Required for ldap | File only | Applies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$ |
auth.providers[].subject_attribute | string | Required for ldap | File only | Immutable 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_attribute | string or null | null | File only | Applies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$ |
auth.providers[].additional_user_filter | string or null | null | File only | Operator-controlled parenthesized LDAP filter combined with the escaped username assertion. Applies to: ldap; Restart required; JSON-character length: 2–2048 |
auth.providers[].admission_policy | invitation_only or required_group | "invitation_only" | File only | Applies to: ldap; Restart required |
auth.providers[].group_attribute | string or null | null | File only | Applies to: ldap; Restart required; Pattern: ^[A-Za-z][A-Za-z0-9-]{0,63}$ |
auth.providers[].admission_group | string or null | null | File only | Applies to: ldap; Restart required; JSON-character length: 1–2048 |
auth.providers[].kind | trusted_proxy | Required for trusted_proxy | File only | Applies to: trusted_proxy; Restart required |
auth.providers[].id | string | Required for trusted_proxy | File only | Applies to: trusted_proxy; Restart required; Pattern: ^[a-z](?:[a-z0-9-]{0,62}[a-z0-9])?$; JSON-character length: 0–64 |
auth.providers[].display_name | string | Required for trusted_proxy | File only | Applies to: trusted_proxy; Restart required; JSON-character length: 1–80 |
auth.providers[].subject_header | string | Required for trusted_proxy | File only | Lowercase header carrying the proxy's immutable provider-scoped subject. Applies to: trusted_proxy; Restart required; JSON-character length: 1–64 |
auth.providers[].display_name_header | string or null | null | File only | Applies to: trusted_proxy; Restart required; JSON-character length: 1–64 |
auth.providers[].groups_header | string or null | null | File only | Applies to: trusted_proxy; Restart required; JSON-character length: 1–64 |
auth.providers[].secret_path | string | Required for trusted_proxy | File only | Owner-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_policy | invitation_only or required_group | "invitation_only" | File only | Applies to: trusted_proxy; Restart required |
auth.providers[].admission_group | string or null | null | File only | Applies to: trusted_proxy; Restart required; JSON-character length: 1–512 |
auth.oidc | object or null | null | File only | Deprecated 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.issuer | string | No schema default | Environment: JIANDU_OIDC_ISSUER | Configured 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_id | string | No schema default | Environment: JIANDU_OIDC_CLIENT_ID | Public OAuth client identifier for the configured issuer. Restart required; JSON-character length: 1–512 |
auth.oidc.client_secret_path | string | No schema default | Environment: JIANDU_OIDC_CLIENT_SECRET_PATH | Private 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_origin | string | No schema default | Environment: JIANDU_OIDC_PUBLIC_ORIGIN | Exact 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_policy | invitation_only or required_group or open | "invitation_only" | Environment: JIANDU_OIDC_ADMISSION_POLICY | Invitation-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_claim | string or null | null | Environment: JIANDU_OIDC_ADMISSION_GROUP_CLAIM | Exact identity-token claim name used only with required_group admission. Restart required; JSON-character length: 1–256 |
auth.oidc.admission_group | string or null | null | Environment: JIANDU_OIDC_ADMISSION_GROUP | Exact 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.
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
connectors | object or null | null | File only | 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. Restart required |
connectors.secret_key_path | string | No schema default | Environment: JIANDU_CONNECTOR_SECRET_KEY_PATH | Owner-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_id | string | No schema default | Environment: JIANDU_CONNECTOR_OAUTH_CLIENT_ID | Public OAuth client identifier registered with the mailbox provider. Restart required; JSON-character length: 1–512 |
connectors.oauth_client_secret_path | string | No schema default | Environment: JIANDU_CONNECTOR_OAUTH_CLIENT_SECRET_PATH | Owner-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_origin | string | No schema default | Environment: JIANDU_CONNECTOR_PUBLIC_ORIGIN | Exact 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.
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
capture | object or null | null | File only | 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. Restart required |
capture.watch_roots | array of object | [] | File only | Absolute 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[].id | string | Required for every item | File only | Restart required; Pattern: ^[a-z0-9][a-z0-9_-]*$; JSON-character length: 1–64 |
capture.watch_roots[].display_name | string | Required for every item | File only | Restart required; JSON-character length: 1–80 |
capture.watch_roots[].path | string | Required for every item | File only | Absolute operator-approved filesystem root. Restart required; JSON-character length: 1–4096 |
capture.watch_roots[].processed_directory | string | Required for every item | File only | Safe relative directory beneath the root for accepted or duplicate inputs. Restart required; JSON-character length: 1–4096 |
capture.watch_roots[].quarantine_directory | string | Required for every item | File only | Safe relative directory beneath the root for terminal failures. Restart required; JSON-character length: 1–4096 |
capture.watch_roots[].stable_seconds | integer | Required for every item | File only | Restart required; Range: 1–300 |
capture.watch_roots[].polling_only | boolean | Required for every item | File only | Use polling as the correctness path; filesystem events are only an optional latency hint. Restart required |
capture.escl_endpoints | array of object | [] | File only | Fixed 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[].id | string | Required for every item | File only | Restart required; Pattern: ^[a-z0-9][a-z0-9_-]*$; JSON-character length: 1–64 |
capture.escl_endpoints[].display_name | string | Required for every item | File only | Restart required; JSON-character length: 1–80 |
capture.escl_endpoints[].endpoint | string | Required for every item | File only | Restart required; Format: uri; JSON-character length: 1–2048 |
capture.escl_endpoints[].pinned_addresses | array of string | Required for every item | File only | Restart required; Items: 1–8 |
capture.escl_endpoints[].approved_networks | array of string | Required for every item | File only | Restart required; Items: 1–32 |
capture.escl_endpoints[].request_timeout_seconds | integer | Required for every item | File only | Restart required; Range: 5–300 |
capture.reconciliation_interval_seconds | integer | 5 | File only | Bounded interval for durable watch and capture-job reconciliation. Restart required; Range: 1–300 |
capture.capture_job_lease_seconds | integer | 300 | File only | Lease 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.
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
plugins | object or null | null | File only | 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. Restart required |
plugins.runtime | deno | "deno" | File only | Restart required |
plugins.trust_policy | owner_reviewed_local_only | "owner_reviewed_local_only" | File only | Explicit acknowledgement that the current Deno subprocess boundary is for locally reviewed packages, not hostile code. Restart required |
plugins.deno_executable_path | string | Required when plugins is enabled | File only | Absolute 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_count | integer | 1 | File only | Bounded concurrent plugin invocations. Core document processing remains independently supervised. Restart required; Range: 1–4 |
limits
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
limits.max_upload_bytes | integer | 104857600 | Environment: JIANDU_MAX_UPLOAD_BYTES | Restart required; Changes processing identity; Range: 1–268435456 |
limits.max_pages | integer | 2000 | Environment: JIANDU_MAX_PAGES | Restart required; Changes processing identity; Range: 1–10000 |
limits.max_image_pixels | integer | 200000000 | Environment: JIANDU_MAX_IMAGE_PIXELS | Restart required; Changes processing identity; Range: 1–1000000000 |
limits.worker_count | integer | 2 | Environment: JIANDU_WORKER_COUNT | Restart required; Range: 1–16 |
telemetry
| Setting | Accepted value | Default or requirement | Overrides | Meaning and constraints |
|---|---|---|---|---|
telemetry.log_filter | string | "jiandu=info" | Environment: RUST_LOG | Restart required; JSON-character length: 1–4096 |
telemetry.json_logs | boolean | true | Environment: JIANDU_JSON_LOGS | Restart required |
telemetry.remote_export | boolean | false | Environment: JIANDU_REMOTE_TELEMETRY | Master operator consent for network telemetry export. Signal-specific OTEL exporters remain independently disableable. Restart required |
telemetry.product_metrics_export | boolean | false | Environment: JIANDU_PRODUCT_METRICS_TELEMETRY | Separate consent for remotely exporting the product-use metric privacy class. Requires remote_export. Restart required |
telemetry.export_queue_items | integer | 1024 | Environment: OTEL_BSP_MAX_QUEUE_SIZE, OTEL_BLRP_MAX_QUEUE_SIZE | Default 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_bytes | integer | 8388608 | Environment: JIANDU_OTEL_QUEUE_BYTES | Shared 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_items | integer | 128 | Environment: OTEL_BSP_MAX_EXPORT_BATCH_SIZE, OTEL_BLRP_MAX_EXPORT_BATCH_SIZE | Default 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_milliseconds | integer | 1000 | Environment: OTEL_BSP_SCHEDULE_DELAY, OTEL_BLRP_SCHEDULE_DELAY | Default maximum delay before a trace or log batch is offered to its exporter. Restart required; Range: 1–10000 |
telemetry.export_timeout_milliseconds | integer | 2000 | Environment: 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_TIMEOUT | Default per-attempt OTLP export deadline. General and per-signal standard OTel environment variables may lower it. Restart required; Range: 1–5000 |
telemetry.shutdown_timeout_milliseconds | integer | 3000 | Environment: JIANDU_OTEL_SHUTDOWN_TIMEOUT_MS | Hard process deadline for flushing and stopping telemetry workers during graceful shutdown. Restart required; Range: 1–10000 |
telemetry.metric_export_interval_milliseconds | integer | 30000 | Environment: OTEL_METRIC_EXPORT_INTERVAL | Periodic metric-reader interval when OTLP metric export is enabled. Restart required; Range: 1–300000 |
telemetry.max_attribute_count | integer | 32 | Environment: OTEL_ATTRIBUTE_COUNT_LIMIT | Maximum reviewed attributes retained on a telemetry record or span. Restart required; Range: 1–64 |
telemetry.max_attribute_value_bytes | integer | 256 | Environment: OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT | Maximum UTF-8 byte length retained for any telemetry attribute value. Restart required; Range: 1–1024 |
telemetry.max_span_events | integer | 16 | Environment: OTEL_SPAN_EVENT_COUNT_LIMIT | Maximum event count retained on one span. Restart required; Range: 0–32 |
telemetry.max_span_links | integer | 8 | Environment: OTEL_SPAN_LINK_COUNT_LIMIT | Maximum link count retained on one span. Restart required; Range: 0–16 |
telemetry.metric_cardinality_limit | integer | 128 | Environment: JIANDU_OTEL_METRIC_CARDINALITY_LIMIT | Maximum 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.