Channels
Channels
channels.graphql
Section titled “channels.graphql”GraphQL API channel configuration
The GraphQL channel exposes directory operations via GraphQL with:
- Collection queries: users(filter: …) { nodes { … } }
- Single lookup: user(id: ”…”) { … }
- Schema introspection: GET /graphql.sdl, GET /graphql.json
- GraphiQL UI: GET /graphql (Accept: text/html)
The base path is fixed at /graphql.
channels.graphql.apq
Section titled “channels.graphql.apq”Automatic Persisted Queries (APQ)
APQ reduces bandwidth by allowing clients to send SHA256 hashes instead of full query strings after initial registration. Flow:
- Client sends POST with query + hash (registers query in cache)
- Subsequent requests send only the hash (GET or POST)
- On cache miss, client retries with full query
channels.graphql.apq.enabled
Section titled “channels.graphql.apq.enabled”Enable APQ support
auto = enabled when GraphQL channel is enabledtrue = always enabled, false = always disabledPriority: SCRIBE_GRAPHQL_APQ_ENABLED > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_GRAPHQL_APQ_ENABLED (optional) |
channels.graphql.apq.enabled = "auto"channels.graphql.apq.enabled = ${?SCRIBE_GRAPHQL_APQ_ENABLED}channels.graphql.apq.max-size
Section titled “channels.graphql.apq.max-size”Maximum number of cached queries (LRU eviction when exceeded)
Priority: SCRIBE_GRAPHQL_APQ_MAX_SIZE > config
| Property | Value |
|---|---|
| Default | 1000 |
| Override | SCRIBE_GRAPHQL_APQ_MAX_SIZE (optional) |
channels.graphql.apq.max-size = 1000channels.graphql.apq.max-size = ${?SCRIBE_GRAPHQL_APQ_MAX_SIZE}channels.graphql.apq.ttl
Section titled “channels.graphql.apq.ttl”Cache entry TTL (expireAfterAccess, keeps hot queries longer)
Priority: SCRIBE_GRAPHQL_APQ_TTL > config
| Property | Value |
|---|---|
| Default | 10h |
| Override | SCRIBE_GRAPHQL_APQ_TTL (optional) |
channels.graphql.apq.ttl = 10hchannels.graphql.apq.ttl = ${?SCRIBE_GRAPHQL_APQ_TTL}channels.graphql.default-limit
Section titled “channels.graphql.default-limit”Query Parameter Defaults
Applied when the client omits the parameter. Client-provided values override these defaults except for max-limit which always caps. Default page size when no limit/first/last specified (configurable, default: 25)
Priority: SCRIBE_GRAPHQL_DEFAULT_LIMIT > config
| Property | Value |
|---|---|
| Default | 25 |
| Override | SCRIBE_GRAPHQL_DEFAULT_LIMIT (optional) |
channels.graphql.default-limit = 25channels.graphql.default-limit = ${?SCRIBE_GRAPHQL_DEFAULT_LIMIT}channels.graphql.enabled
Section titled “channels.graphql.enabled”Enable the GraphQL channel
Priority: SCRIBE_GRAPHQL_ENABLED > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_GRAPHQL_ENABLED (optional) |
channels.graphql.enabled = falsechannels.graphql.enabled = ${?SCRIBE_GRAPHQL_ENABLED}channels.graphql.limits
Section titled “channels.graphql.limits”Query analysis limits (applied after parsing, before execution). These prevent queries that would consume excessive resources.
channels.graphql.limits.max-complexity
Section titled “channels.graphql.limits.max-complexity”Maximum query complexity (prevents wide queries with many fields). Complexity is calculated as sum of fields selected. Set to 0 to disable. Tune based on staging logs (start with p95 + headroom).
Priority: SCRIBE_GRAPHQL_LIMITS_MAX_COMPLEXITY > config
| Property | Value |
|---|---|
| Default | 500 |
| Override | SCRIBE_GRAPHQL_LIMITS_MAX_COMPLEXITY (optional) |
channels.graphql.limits.max-complexity = 500channels.graphql.limits.max-complexity = ${?SCRIBE_GRAPHQL_LIMITS_MAX_COMPLEXITY}channels.graphql.limits.max-depth
Section titled “channels.graphql.limits.max-depth”Maximum query depth (prevents deeply nested queries). Default 15 allows introspection queries (required by GraphiQL). Set to 0 to disable depth checking.
Priority: SCRIBE_GRAPHQL_LIMITS_MAX_DEPTH > config
| Property | Value |
|---|---|
| Default | 15 |
| Override | SCRIBE_GRAPHQL_LIMITS_MAX_DEPTH (optional) |
channels.graphql.limits.max-depth = 15channels.graphql.limits.max-depth = ${?SCRIBE_GRAPHQL_LIMITS_MAX_DEPTH}channels.graphql.max-limit
Section titled “channels.graphql.max-limit”Maximum entries per request (caps client-provided limit, configurable, default: 1000)
Priority: SCRIBE_GRAPHQL_MAX_LIMIT > config
| Property | Value |
|---|---|
| Default | 1000 |
| Override | SCRIBE_GRAPHQL_MAX_LIMIT (optional) |
channels.graphql.max-limit = 1000channels.graphql.max-limit = ${?SCRIBE_GRAPHQL_MAX_LIMIT}channels.graphql.parser
Section titled “channels.graphql.parser”Query Security Limits
Protection against denial-of-service through excessive query complexity. These limits apply at different stages of query processing. Parser-level DoS limits (applied before query analysis). These are the first line of defense against malicious payloads.
channels.graphql.parser.max-characters
Section titled “channels.graphql.parser.max-characters”Maximum query characters (prevents excessive parsing time/memory).
Priority: SCRIBE_GRAPHQL_PARSER_MAX_CHARACTERS > config
| Property | Value |
|---|---|
| Default | 1048576 |
| Override | SCRIBE_GRAPHQL_PARSER_MAX_CHARACTERS (optional) |
channels.graphql.parser.max-characters = 1048576channels.graphql.parser.max-characters = ${?SCRIBE_GRAPHQL_PARSER_MAX_CHARACTERS}channels.graphql.parser.max-tokens
Section titled “channels.graphql.parser.max-tokens”Maximum query tokens (prevents parser CPU exhaustion).
Priority: SCRIBE_GRAPHQL_PARSER_MAX_TOKENS > config
| Property | Value |
|---|---|
| Default | 15000 |
| Override | SCRIBE_GRAPHQL_PARSER_MAX_TOKENS (optional) |
channels.graphql.parser.max-tokens = 15000channels.graphql.parser.max-tokens = ${?SCRIBE_GRAPHQL_PARSER_MAX_TOKENS}channels.graphql.socket
Section titled “channels.graphql.socket”Socket reference for GraphQL API.
Use a named socket from http.sockets.* or omit for @default.
Priority: SCRIBE_GRAPHQL_SOCKET > config
| Property | Value |
|---|---|
| Override | SCRIBE_GRAPHQL_SOCKET (optional) |
channels.graphql.socket = ${?SCRIBE_GRAPHQL_SOCKET}channels.graphql.ui
Section titled “channels.graphql.ui”GraphiQL UI configuration
GraphiQL v5 provides an interactive GraphQL query builder with Monaco Editor and optional plugins (Explorer, History). Assets are bundled with the app by default (offline-safe, no external network). Use asset {} block to override with CDN URLs.
channels.graphql.ui.asset
Section titled “channels.graphql.ui.asset”External asset configuration (CDN override). By default, GraphiQL assets are bundled with the app. If configured, all fields are required. SRI (Subresource Integrity) hash prevents supply-chain attacks.
channels.graphql.ui.asset.css-sri
Section titled “channels.graphql.ui.asset.css-sri”Subresource Integrity hash for the CSS stylesheet.
Example: "sha512-..."
| Property | Value |
|---|---|
| Default | null |
channels.graphql.ui.asset.css-sri = nullchannels.graphql.ui.asset.css-url
Section titled “channels.graphql.ui.asset.css-url”CDN URL for GraphiQL CSS stylesheet.
Example: "https://cdn.example.com/graphiql/5.2.0/graphiql.css"
| Property | Value |
|---|---|
| Default | null |
channels.graphql.ui.asset.css-url = nullchannels.graphql.ui.asset.js-sri
Section titled “channels.graphql.ui.asset.js-sri”Subresource Integrity hash for the JavaScript bundle.
Example: "sha512-..."
| Property | Value |
|---|---|
| Default | null |
channels.graphql.ui.asset.js-sri = nullchannels.graphql.ui.asset.js-url
Section titled “channels.graphql.ui.asset.js-url”CDN URL for GraphiQL JavaScript bundle.
Example: "https://cdn.example.com/graphiql/5.2.0/graphiql.bundle.js"
| Property | Value |
|---|---|
| Default | null |
channels.graphql.ui.asset.js-url = nullchannels.graphql.ui.dark-mode
Section titled “channels.graphql.ui.dark-mode”Dark mode (Monaco editor theme)
Priority: SCRIBE_GRAPHQL_UI_DARK_MODE > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_GRAPHQL_UI_DARK_MODE (optional) |
channels.graphql.ui.dark-mode = falsechannels.graphql.ui.dark-mode = ${?SCRIBE_GRAPHQL_UI_DARK_MODE}channels.graphql.ui.default-editor-tools-visibility
Section titled “channels.graphql.ui.default-editor-tools-visibility”Show variables/headers panel by default
auto = show in dev, hide in prodtrue = always show, false = always hidePriority: SCRIBE_GRAPHQL_UI_EDITOR_TOOLS > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_GRAPHQL_UI_EDITOR_TOOLS (optional) |
channels.graphql.ui.default-editor-tools-visibility = "auto"channels.graphql.ui.default-editor-tools-visibility = ${?SCRIBE_GRAPHQL_UI_EDITOR_TOOLS}channels.graphql.ui.enabled
Section titled “channels.graphql.ui.enabled”Enable GraphiQL UI
auto = enabled in dev/test, disabled in prod (prod-safe default)Priority: SCRIBE_GRAPHQL_UI_ENABLED > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_GRAPHQL_UI_ENABLED (optional) |
channels.graphql.ui.enabled = "auto"channels.graphql.ui.enabled = ${?SCRIBE_GRAPHQL_UI_ENABLED}channels.graphql.ui.plugins
Section titled “channels.graphql.ui.plugins”Plugins configuration
channels.graphql.ui.plugins.explorer
Section titled “channels.graphql.ui.plugins.explorer”Enable Explorer plugin (visual query builder) Great for non-developers to explore schema visually
Priority: SCRIBE_GRAPHQL_UI_EXPLORER > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_GRAPHQL_UI_EXPLORER (optional) |
channels.graphql.ui.plugins.explorer = truechannels.graphql.ui.plugins.explorer = ${?SCRIBE_GRAPHQL_UI_EXPLORER}channels.graphql.ui.plugins.history
Section titled “channels.graphql.ui.plugins.history”Enable History plugin (query history sidebar)
Priority: SCRIBE_GRAPHQL_UI_HISTORY > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_GRAPHQL_UI_HISTORY (optional) |
channels.graphql.ui.plugins.history = truechannels.graphql.ui.plugins.history = ${?SCRIBE_GRAPHQL_UI_HISTORY}channels.ldap
Section titled “channels.ldap”LDAP channel configuration
The LDAP channel exposes directory operations via LDAP v3 protocol with:
- Standard LDAP search, compare, and bind operations
- Simple Paged Results and VLV controls for pagination
- Server-Side Sorting (SSS) control
- LDAPS (TLS) for secure connections
- Client certificate authentication
Settings inherit from the shared ldap configuration block.
channels.ldap.connection-hints
Section titled “channels.ldap.connection-hints”Connection Hints (channel-specific overrides)
Override database.connection-hints defaults for LDAP queries only. Values here are merged with database defaults (channel values win).
channels.ldap.connection-hints.lock-timeout
Section titled “channels.ldap.connection-hints.lock-timeout”Lock acquisition timeout
Priority: SCRIBE_LDAP_LOCK_TIMEOUT > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_LDAP_LOCK_TIMEOUT (optional) |
channels.ldap.connection-hints.lock-timeout = ${?SCRIBE_LDAP_LOCK_TIMEOUT}channels.ldap.connection-hints.session-flags
Section titled “channels.ldap.connection-hints.session-flags”Session flags (comma-separated): force-custom-plan, jit-off
Priority: SCRIBE_LDAP_SESSION_FLAGS > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_LDAP_SESSION_FLAGS (optional) |
channels.ldap.connection-hints.session-flags = ${?SCRIBE_LDAP_SESSION_FLAGS}channels.ldap.connection-hints.statement-timeout
Section titled “channels.ldap.connection-hints.statement-timeout”Statement execution timeout (prevents runaway queries)
Priority: SCRIBE_LDAP_STATEMENT_TIMEOUT > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_LDAP_STATEMENT_TIMEOUT (optional) |
channels.ldap.connection-hints.statement-timeout = ${?SCRIBE_LDAP_STATEMENT_TIMEOUT}channels.ldap.connection-hints.work-mem
Section titled “channels.ldap.connection-hints.work-mem”PostgreSQL work_mem per-query memory
Priority: SCRIBE_LDAP_WORK_MEM > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_LDAP_WORK_MEM (optional) |
channels.ldap.connection-hints.work-mem = ${?SCRIBE_LDAP_WORK_MEM}channels.ldap.linger-timeout-seconds
Section titled “channels.ldap.linger-timeout-seconds”Specifies the timeout in seconds that should be used if the SO_LINGER socket option is enabled. The value must be between 0 and 65535, inclusive.
Priority: SCRIBE_LDAP_LINGER_TIMEOUT_SECONDS > config
| Property | Value |
|---|---|
| Default | 5 |
| Override | SCRIBE_LDAP_LINGER_TIMEOUT_SECONDS (optional) |
channels.ldap.linger-timeout-seconds = ${?SCRIBE_LDAP_LINGER_TIMEOUT_SECONDS}channels.ldap.listen.item.host
Section titled “channels.ldap.listen.item.host”Specifies the address on which to listen for client connections. The provided value must be a valid IP address or hostname. It may be null to indicate that it should listen on all available addresses on all interfaces.
| Property | Value |
|---|---|
| Default | null |
channels.ldap.listen.item.host = nullchannels.ldap.listen.item.port
Section titled “channels.ldap.listen.item.port”Specifies the port number on which to listen for client connections. The provided value must be between 1 and 65535, or it may be 0 to indicate that the JVM should select a free port on the system.
| Property | Value |
|---|---|
| Default | 10389 |
channels.ldap.listen.item.port = 10389channels.ldap.listen.item.ssl
Section titled “channels.ldap.listen.item.ssl”Enable SSL/TLS for the listener. Presence of this block enables LDAPS. Inherits from the shared ssl configuration (ssl.ca, ssl.cert, ssl.key, ssl.password).
channels.ldap.listen.item.ssl.request-client-certificate
Section titled “channels.ldap.listen.item.ssl.request-client-certificate”Specifies whether the server should request that the client present its own certificate chain during TLS negotiation. This will be ignored for non-TLS-based connections.
| Property | Value |
|---|---|
| Default | false |
channels.ldap.listen.item.ssl.request-client-certificate = falsechannels.ldap.listen.item.ssl.require-client-certificate
Section titled “channels.ldap.listen.item.ssl.require-client-certificate”Indicates whether the server should require that the client present its own certificate chain during TLS negotiation and should fail negotiation if no certificate chain was provided. This will be ignored for non-TLS-based connections, and it will also be ignored if request-client-certificate is false.
| Property | Value |
|---|---|
| Default | false |
channels.ldap.listen.item.ssl.require-client-certificate = falsechannels.ldap.max-connections
Section titled “channels.ldap.max-connections”Connection Limits
Configure limits on connections and message sizes. Specifies the maximum number of concurrent connections that the server will allow. If a client tries to establish a new connection while the server already has the maximum number of concurrent connections, then the new connection will be rejected. A value that is less than or equal to zero indicates no limit.
Priority: SCRIBE_LDAP_MAX_CONNECTIONS > config
| Property | Value |
|---|---|
| Default | 0 |
| Override | SCRIBE_LDAP_MAX_CONNECTIONS (optional) |
channels.ldap.max-connections = ${?SCRIBE_LDAP_MAX_CONNECTIONS}channels.ldap.max-message-size-bytes
Section titled “channels.ldap.max-message-size-bytes”Specifies the maximum size in bytes for LDAP messages that will be accepted by this server. A value that is less than or equal to zero will use the maximum allowed message size.
Priority: SCRIBE_LDAP_MAX_MESSAGE_SIZE_BYTES > config
| Property | Value |
|---|---|
| Default | 0 |
| Override | SCRIBE_LDAP_MAX_MESSAGE_SIZE_BYTES (optional) |
channels.ldap.max-message-size-bytes = ${?SCRIBE_LDAP_MAX_MESSAGE_SIZE_BYTES}channels.ldap.receive-buffer-size
Section titled “channels.ldap.receive-buffer-size”Buffer Sizes
Configure socket buffer sizes for performance tuning. Specifies the receive buffer size that should be used for sockets accepted by the server. A value less than or equal to zero indicates that the default receive buffer size should be used.
Priority: SCRIBE_LDAP_RECEIVE_BUFFER_SIZE > config
| Property | Value |
|---|---|
| Default | 0 |
| Override | SCRIBE_LDAP_RECEIVE_BUFFER_SIZE (optional) |
channels.ldap.receive-buffer-size = ${?SCRIBE_LDAP_RECEIVE_BUFFER_SIZE}channels.ldap.send-buffer-size
Section titled “channels.ldap.send-buffer-size”Specifies the send buffer size that should be used for sockets accepted by the listener. A value less than or equal to zero indicates that the default send buffer size should be used.
Priority: SCRIBE_LDAP_SEND_BUFFER_SIZE > config
| Property | Value |
|---|---|
| Default | 0 |
| Override | SCRIBE_LDAP_SEND_BUFFER_SIZE (optional) |
channels.ldap.send-buffer-size = ${?SCRIBE_LDAP_SEND_BUFFER_SIZE}channels.ldap.tcp-no-delay
Section titled “channels.ldap.tcp-no-delay”Indicates whether to use the TCP_NODELAY socket option for sockets accepted by the server. When enabled, disables Nagle’s algorithm for lower latency at the cost of more packets.
Priority: SCRIBE_LDAP_TCP_NO_DELAY > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_LDAP_TCP_NO_DELAY (optional) |
channels.ldap.tcp-no-delay = ${?SCRIBE_LDAP_TCP_NO_DELAY}channels.ldap.use-keep-alive
Section titled “channels.ldap.use-keep-alive”Socket Options
Fine-tune TCP connection behavior for LDAP connections. Specifies whether to use the SO_KEEPALIVE socket option for sockets accepted by the server. When enabled, the system will periodically probe idle connections to detect broken connections.
Priority: SCRIBE_LDAP_USE_KEEP_ALIVE > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_LDAP_USE_KEEP_ALIVE (optional) |
channels.ldap.use-keep-alive = ${?SCRIBE_LDAP_USE_KEEP_ALIVE}channels.ldap.use-linger
Section titled “channels.ldap.use-linger”Specifies whether to use the SO_LINGER socket option for sockets accepted by the server. When enabled, the socket will wait for pending data to be sent before closing.
Priority: SCRIBE_LDAP_USE_LINGER > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_LDAP_USE_LINGER (optional) |
channels.ldap.use-linger = ${?SCRIBE_LDAP_USE_LINGER}channels.ldap.use-reuse-address
Section titled “channels.ldap.use-reuse-address”Specifies whether to use the SO_REUSEADDR socket option for sockets accepted by the server. When enabled, allows the socket to bind to an address that is already in use.
Priority: SCRIBE_LDAP_USE_REUSE_ADDRESS > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_LDAP_USE_REUSE_ADDRESS (optional) |
channels.ldap.use-reuse-address = ${?SCRIBE_LDAP_USE_REUSE_ADDRESS}channels.mcp
Section titled “channels.mcp”MCP (Model Context Protocol) channel configuration
The MCP channel exposes directory operations to AI coding assistants via:
- Tools: describe, search, help, ref
- Prompts: usage guide, filter syntax, troubleshooting
- Resources: OpenAPI spec, GraphQL schema, reference index
Works with Cursor, Claude Desktop, VS Code, Windsurf, and other MCP clients. The endpoint is fixed at /mcp.
channels.mcp.default-limit
Section titled “channels.mcp.default-limit”Query Parameter Defaults
Applied when the client omits the parameter. Default page size for search results (configurable, default: 25)
Priority: SCRIBE_MCP_DEFAULT_LIMIT > config
| Property | Value |
|---|---|
| Default | 25 |
| Override | SCRIBE_MCP_DEFAULT_LIMIT (optional) |
channels.mcp.default-limit = 25channels.mcp.default-limit = ${?SCRIBE_MCP_DEFAULT_LIMIT}channels.mcp.enabled
Section titled “channels.mcp.enabled”Enable the MCP channel
Priority: SCRIBE_MCP_ENABLED > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_MCP_ENABLED (optional) |
channels.mcp.enabled = falsechannels.mcp.enabled = ${?SCRIBE_MCP_ENABLED}channels.mcp.max-limit
Section titled “channels.mcp.max-limit”Maximum entries per search request (caps client-provided limit, default: 100)
Priority: SCRIBE_MCP_MAX_LIMIT > config
| Property | Value |
|---|---|
| Default | 100 |
| Override | SCRIBE_MCP_MAX_LIMIT (optional) |
channels.mcp.max-limit = 100channels.mcp.max-limit = ${?SCRIBE_MCP_MAX_LIMIT}channels.mcp.socket
Section titled “channels.mcp.socket”Socket reference(s) for MCP channel.
Can be a single name, comma-separated list, or HOCON list. Use named sockets from http.sockets.* or omit for @default.
Priority: SCRIBE_MCP_SOCKET > config
Examples:
socket = "admin" # Single socketsocket = "admin, public" # Comma-separatedsocket = ["admin", "public"] # HOCON list| Property | Value |
|---|---|
| Override | SCRIBE_MCP_SOCKET (optional) |
channels.mcp.socket = ${?SCRIBE_MCP_SOCKET}channels.rest
Section titled “channels.rest”REST API channel configuration
The REST channel exposes directory operations via HTTP/JSON with:
- Collection search: GET /api/entries/{entry_type}
- Single lookup: GET /api/entries/{entry_type}/{id}
- OpenAPI UI/spec: GET /api
The base path is fixed at /api. Customers needing a different external path can use a reverse proxy for path rewriting.
channels.rest.connection-hints
Section titled “channels.rest.connection-hints”Connection Hints (channel-specific overrides)
Override database.connection-hints defaults for REST queries only. Values here are merged with database defaults (channel values win).
channels.rest.connection-hints.lock-timeout
Section titled “channels.rest.connection-hints.lock-timeout”Lock acquisition timeout
Priority: SCRIBE_REST_LOCK_TIMEOUT > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_LOCK_TIMEOUT (optional) |
channels.rest.connection-hints.lock-timeout = ${?SCRIBE_REST_LOCK_TIMEOUT}channels.rest.connection-hints.session-flags
Section titled “channels.rest.connection-hints.session-flags”Session flags (comma-separated): force-custom-plan, jit-off
Priority: SCRIBE_REST_SESSION_FLAGS > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_SESSION_FLAGS (optional) |
channels.rest.connection-hints.session-flags = ${?SCRIBE_REST_SESSION_FLAGS}channels.rest.connection-hints.statement-timeout
Section titled “channels.rest.connection-hints.statement-timeout”Statement execution timeout (prevents runaway queries)
Priority: SCRIBE_REST_STATEMENT_TIMEOUT > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_STATEMENT_TIMEOUT (optional) |
channels.rest.connection-hints.statement-timeout = ${?SCRIBE_REST_STATEMENT_TIMEOUT}channels.rest.connection-hints.work-mem
Section titled “channels.rest.connection-hints.work-mem”PostgreSQL work_mem per-query memory
Priority: SCRIBE_REST_WORK_MEM > config > database.connection-hints
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_WORK_MEM (optional) |
channels.rest.connection-hints.work-mem = ${?SCRIBE_REST_WORK_MEM}channels.rest.default-count
Section titled “channels.rest.default-count”Default count mode: exact, estimated, none (configurable, default: “estimated”)
Priority: SCRIBE_REST_DEFAULT_COUNT > config
| Property | Value |
|---|---|
| Default | "estimated" |
| Override | SCRIBE_REST_DEFAULT_COUNT (optional) |
channels.rest.default-count = "estimated"channels.rest.default-count = ${?SCRIBE_REST_DEFAULT_COUNT}channels.rest.default-fields
Section titled “channels.rest.default-fields”Default attribute selection (configurable)
- null (default): return all user attributes (equivalent to LDAP ”*”)
- “cn,mail,sn”: return only specified attributes
- ”*,+”: return all user and operational attributes
Priority: SCRIBE_REST_DEFAULT_FIELDS > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_DEFAULT_FIELDS (optional) |
channels.rest.default-fields = ${?SCRIBE_REST_DEFAULT_FIELDS}channels.rest.default-include
Section titled “channels.rest.default-include”Default response shape: nodes, edges, pageInfo, count (comma-separated)
Configurable, default: “nodes,pageInfo,count”
Priority: SCRIBE_REST_DEFAULT_INCLUDE > config
| Property | Value |
|---|---|
| Default | "nodes,pageInfo,count" |
| Override | SCRIBE_REST_DEFAULT_INCLUDE (optional) |
channels.rest.default-include = "nodes,pageInfo,count"channels.rest.default-include = ${?SCRIBE_REST_DEFAULT_INCLUDE}channels.rest.default-limit
Section titled “channels.rest.default-limit”Query Parameter Defaults
Applied when the client omits the parameter. Client-provided values override these defaults except for max-limit which always caps. Default page size when no limit/first/last specified (configurable, default: 25)
Priority: SCRIBE_REST_DEFAULT_LIMIT > config
| Property | Value |
|---|---|
| Default | 25 |
| Override | SCRIBE_REST_DEFAULT_LIMIT (optional) |
channels.rest.default-limit = 25channels.rest.default-limit = ${?SCRIBE_REST_DEFAULT_LIMIT}channels.rest.default-sort
Section titled “channels.rest.default-sort”Default sort order (configurable)
- null (default): database-native order (typically insertion order, not guaranteed stable)
- “cn”: sort by cn ascending
- “-modifyTimestamp,cn”: sort by modifyTimestamp descending, then cn ascending
Priority: SCRIBE_REST_DEFAULT_SORT > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_DEFAULT_SORT (optional) |
channels.rest.default-sort = ${?SCRIBE_REST_DEFAULT_SORT}channels.rest.enabled
Section titled “channels.rest.enabled”Enable the REST channel
Priority: SCRIBE_REST_ENABLED > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_REST_ENABLED (optional) |
channels.rest.enabled = falsechannels.rest.enabled = ${?SCRIBE_REST_ENABLED}channels.rest.http
Section titled “channels.rest.http”HTTP server settings for REST API.
This section inherits all settings from http. Override individual settings as needed.
channels.rest.max-limit
Section titled “channels.rest.max-limit”Maximum entries per request (caps client-provided limit, configurable, default: 1000)
Priority: SCRIBE_REST_MAX_LIMIT > config
| Property | Value |
|---|---|
| Default | 1000 |
| Override | SCRIBE_REST_MAX_LIMIT (optional) |
channels.rest.max-limit = 1000channels.rest.max-limit = ${?SCRIBE_REST_MAX_LIMIT}channels.rest.socket
Section titled “channels.rest.socket”Socket reference for REST API (Phase 3 wiring). Use a named socket from http.sockets.* or omit for @default. If unset (no env var, key omitted, or value is null), defaults to @default.
Priority: SCRIBE_REST_SOCKET > config
| Property | Value |
|---|---|
| Override | SCRIBE_REST_SOCKET (optional) |
channels.rest.socket = ${?SCRIBE_REST_SOCKET}channels.rest.ui
Section titled “channels.rest.ui”OpenAPI UI (Scalar API Reference) configuration
Scalar provides a modern, interactive API documentation UI. By default, assets are bundled with the app (offline-safe, no external network). Settings marked AUTO resolve based on app.mode:
- Dev/test/local: developer-friendly (show tools, enable requests)
- Production/staging: production-safe (hide tools, disable requests)
channels.rest.ui.asset
Section titled “channels.rest.ui.asset”External asset configuration (CDN override). By default, Scalar assets are bundled with the app (offline-safe). If configured, both url and sri are required. SRI (Subresource Integrity) hash prevents supply-chain attacks.
CDN providers:
- jsDelivr: https://www.jsdelivr.com/package/npm/@scalar/api-reference
- unpkg: https://unpkg.com/browse/@scalar/api-reference/
- cdnjs: https://cdnjs.com/libraries/scalar-api-reference
Bundle path: /dist/browser/standalone.min.js
channels.rest.ui.asset.sri
Section titled “channels.rest.ui.asset.sri”Subresource Integrity hash for the asset URL.
Example: "sha384-HjTUYHbvChA/watX+X7iQtuhwMhsCYU600qyfXPYC90fYr/2Y/Mg7ybHlvkp+eUW"
Priority: SCRIBE_REST_UI_ASSET_SRI > config
| Property | Value |
|---|---|
| Override | SCRIBE_REST_UI_ASSET_SRI (optional) |
channels.rest.ui.asset.sri = ${?SCRIBE_REST_UI_ASSET_SRI}channels.rest.ui.asset.url
Section titled “channels.rest.ui.asset.url”CDN URL for Scalar standalone JavaScript bundle.
Example: "https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.43.1/dist/browser/standalone.min.js"
Priority: SCRIBE_REST_UI_ASSET_URL > config
| Property | Value |
|---|---|
| Override | SCRIBE_REST_UI_ASSET_URL (optional) |
channels.rest.ui.asset.url = ${?SCRIBE_REST_UI_ASSET_URL}channels.rest.ui.dark-mode
Section titled “channels.rest.ui.dark-mode”Dark mode: Initial color mode when loading the UI
true = start in dark mode, false = start in light modeUsers can toggle unless hide-dark-mode-toggle is set
Priority: SCRIBE_REST_UI_DARK_MODE > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_REST_UI_DARK_MODE (optional) |
channels.rest.ui.dark-mode = falsechannels.rest.ui.dark-mode = ${?SCRIBE_REST_UI_DARK_MODE}channels.rest.ui.enabled
Section titled “channels.rest.ui.enabled”Enable OpenAPI UI (Scalar API Reference)
auto = enabled in dev/test, disabled in prod (prod-safe default)true = always enabled, false = always disabledPriority: SCRIBE_REST_UI_ENABLED > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_REST_UI_ENABLED (optional) |
channels.rest.ui.enabled = "auto"channels.rest.ui.enabled = ${?SCRIBE_REST_UI_ENABLED}channels.rest.ui.force-dark-mode-state
Section titled “channels.rest.ui.force-dark-mode-state”Force dark mode state: Lock the UI to ‘dark’ or ‘light’ mode When set, overrides dark-mode and prevents user toggling Values: ‘dark’, ‘light’, or null (user can toggle)
Priority: SCRIBE_REST_UI_FORCE_DARK_MODE_STATE > config
| Property | Value |
|---|---|
| Default | null |
| Override | SCRIBE_REST_UI_FORCE_DARK_MODE_STATE (optional) |
channels.rest.ui.force-dark-mode-state = ${?SCRIBE_REST_UI_FORCE_DARK_MODE_STATE}channels.rest.ui.hide-dark-mode-toggle
Section titled “channels.rest.ui.hide-dark-mode-toggle”Hide dark mode toggle: Remove the light/dark mode toggle button Useful with force-dark-mode-state to enforce a specific mode
Priority: SCRIBE_REST_UI_HIDE_DARK_MODE_TOGGLE > config
| Property | Value |
|---|---|
| Default | false |
| Override | SCRIBE_REST_UI_HIDE_DARK_MODE_TOGGLE (optional) |
channels.rest.ui.hide-dark-mode-toggle = falsechannels.rest.ui.hide-dark-mode-toggle = ${?SCRIBE_REST_UI_HIDE_DARK_MODE_TOGGLE}channels.rest.ui.hide-test-request-button
Section titled “channels.rest.ui.hide-test-request-button”Hide test request button: Remove the “Send Request” button Prevents users from making live API calls through the UI
auto = show in dev/test (for testing), hide in prod (security)Priority: SCRIBE_REST_UI_HIDE_TEST_REQUEST_BUTTON > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_REST_UI_HIDE_TEST_REQUEST_BUTTON (optional) |
channels.rest.ui.hide-test-request-button = "auto"channels.rest.ui.hide-test-request-button = ${?SCRIBE_REST_UI_HIDE_TEST_REQUEST_BUTTON}channels.rest.ui.layout
Section titled “channels.rest.ui.layout”Layout: Overall layout style of the API reference ‘modern’ = split view with sidebar, ‘classic’ = single column
Priority: SCRIBE_REST_UI_LAYOUT > config
| Property | Value |
|---|---|
| Default | "modern" |
| Override | SCRIBE_REST_UI_LAYOUT (optional) |
channels.rest.ui.layout = "modern"channels.rest.ui.layout = ${?SCRIBE_REST_UI_LAYOUT}channels.rest.ui.search-hot-key
Section titled “channels.rest.ui.search-hot-key”Search hotkey: Keyboard shortcut to open search (with Cmd/Ctrl) Common values: ‘k’ (GitHub-style), ’/’ (Vim-style)
Priority: SCRIBE_REST_UI_SEARCH_HOT_KEY > config
| Property | Value |
|---|---|
| Default | "k" |
| Override | SCRIBE_REST_UI_SEARCH_HOT_KEY (optional) |
channels.rest.ui.search-hot-key = "k"channels.rest.ui.search-hot-key = ${?SCRIBE_REST_UI_SEARCH_HOT_KEY}channels.rest.ui.show-developer-tools
Section titled “channels.rest.ui.show-developer-tools”Policy Options (with AUTO mode)
These settings control security-sensitive features and support AUTO mode: true/on/yes - Always enabled (override environment default) false/off/no - Always disabled (override environment default) auto - Environment-aware: enabled in dev/test, disabled in prod Developer tools: Show Scalar’s developer tools panel Exposes request/response details, headers, and debugging info
auto = show in dev/test (for debugging), hide in prod (security)Priority: SCRIBE_REST_UI_SHOW_DEVELOPER_TOOLS > config
| Property | Value |
|---|---|
| Default | "auto" |
| Override | SCRIBE_REST_UI_SHOW_DEVELOPER_TOOLS (optional) |
channels.rest.ui.show-developer-tools = "auto"channels.rest.ui.show-developer-tools = ${?SCRIBE_REST_UI_SHOW_DEVELOPER_TOOLS}channels.rest.ui.show-sidebar
Section titled “channels.rest.ui.show-sidebar”Show sidebar: Display the navigation sidebar with endpoints
true = show sidebar, false = hide for cleaner embedded viewPriority: SCRIBE_REST_UI_SHOW_SIDEBAR > config
| Property | Value |
|---|---|
| Default | true |
| Override | SCRIBE_REST_UI_SHOW_SIDEBAR (optional) |
channels.rest.ui.show-sidebar = truechannels.rest.ui.show-sidebar = ${?SCRIBE_REST_UI_SHOW_SIDEBAR}channels.rest.ui.theme
Section titled “channels.rest.ui.theme”Appearance Options
These settings control the visual appearance of the Scalar UI. Theme: Visual color scheme for the API reference UI Available: alternate, default, moon, purple, solarized, bluePlanet, saturn, kepler, mars, deepSpace, laserwave, none
Priority: SCRIBE_REST_UI_THEME > config
| Property | Value |
|---|---|
| Default | "default" |
| Override | SCRIBE_REST_UI_THEME (optional) |
channels.rest.ui.theme = "default"channels.rest.ui.theme = ${?SCRIBE_REST_UI_THEME}