Configuration

July 18, 2026 ยท View on GitHub

Overview

xyOps is configured primarily by a single JSON file located here: /opt/xyops/conf/config.json (the location may vary for custom installs).

However, if the configuration is modified using the UI, overrides are saved in a separate file: /opt/xyops/conf/overrides.json

This document describes all the editable properties in the config.json file.

base_app_url

This string is the base URL of your xyOps instance (default: http://localhost:5522), and is used to build fully-qualified links in emails, alerts, tickets, and web hooks (e.g., job/ticket URLs and the logo URL in emails).

secret_key

This string is a shared secret used to sign tokens (e.g., download links), authenticate multi-conductor messages, and encrypt/decrypt stored secrets -- set this to a long random value in production.

temp_dir

This string is the scratch directory for temporary files such as plugin bundles and staging uploads (default: temp).

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

pid_file

This string sets the path to the main process PID file for start/stop tooling (default: logs/xyops.pid).

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

debug_level

This number sets the verbosity level for the logger (default: 5; 1 = quiet, 10 = very verbose).

tick_precision_ms

This number sets the internal timer precision in milliseconds used by the server framework for scheduling ticks (default: 50).

This controls how precise xyOps is when executing actions targeted on a specific second. Lower values mean xyOps is more precise, but will result in heavier idle CPU usage.

maintenance

This string (in HH:MM format, server local time) schedules daily maintenance tasks such as DB trimming and log archival (default: 04:00).

ttl

This number (seconds) is the default HTTP cache TTL applied to selected API responses and static resources where applicable (default: 300).

file_expiration

This duration string sets the default expiration for uploaded files (e.g., ticket attachments), used to compute per-file expiration timestamps (default: 5 years).

timeline_expiration

This duration string sets the retention for monitor timelines; older points are pruned during maintenance (default: 10 years).

ping_freq_sec

This number (seconds) controls the interval for sending WebSocket pings to clients/workers (default: 5).

ping_timeout_sec

This number (seconds) is the max allowed time without a pong before a socket is considered timed out (default: 30).

max_jobs_per_min

This number sets a global rate limit on job starts per minute (default: 100); additional jobs are prevented from launching.

This is designed as a runaway e-brake mechanism, to prevent an erroneous workflow configuration from bringing down the entire system.

max_jobs_per_workflow

This number sets a global limit on the number of sub-jobs allowed per workflow run (default: 1000). Additional jobs are prevented from launching, and the workflow is aborted.

scheduler_stagger_ms

This number sets the delay between parallel scheduled job launches, in milliseconds (default: 50). It insures a large amount of job launches at the same instant won't stall the system.

dead_job_timeout

This number (in seconds) determines when a running job with no updates is considered dead and aborted (default: 120).

stale_alert_timeout

This number (in seconds) determines when stale alerts are cleared. Stale alerts occur when a server disconnects with active alerts attached.

default_plugin_credentials

This object allows you to set default UID and/or GID values for each type of Plugin. The UID/GID may be either numerical IDs or username strings (root, admin, etc.). Linux/macOS only.

job_env

This object contains environment variables merged into every job process.

Values can be overridden per job.

job_universal_limits

This object defines global limit rules automatically applied to all jobs/workflows, such as concurrency, queue, or retry caps.

job_universal_actions

This object defines global actions executed when conditions are met (default includes a system snapshot on error). Actions can be assigned by job type (workflow or event).

Example:

"job_universal_actions": {
	"default": [
		{
			"enabled": true,
			"hidden": false,
			"condition": "error",
			"type": "snapshot"
		}
	],
	"workflow": []
}

alert_universal_actions

This array lists actions automatically applied to all alerts for standardized behavior (default includes a hidden snapshot on new alert).

Example:

"alert_universal_actions": [
	{
		"enabled": true,
		"hidden": true,
		"condition": "alert_new",
		"type": "snapshot"
	}
]

hostname_display_strip

This regex string is removed from the end of hostnames for display and notifications (default: \\.[\\w\\-]+\\.\\w+$), e.g., to strip the domain suffix.

ip_display_strip

This regex string is removed from IP addresses for display (default: ^::ffff:), e.g., to strip the IPv6 IPv4-mapped prefix.

search_file_threads

This number sets how many worker threads are used when searching files on disk (default: 1).

search_file_regex

This regex string limits which filenames are scanned by the file search APIs (default: \\.(txt|log|csv|tsv|xml|json)(\\.gz)?$).

quick_monitors

This array defines built-in metrics to collect (defaults include CPU, memory, disk, and network presets). These are displayed on server detail pages for real-time monitoring.

email_from

This string is the sender email address for all outbound messages (default: admin@localhost); many SMTP servers require this to be a valid address.

mail_settings

This object configures the email transport and is passed verbatim to Nodemailer.

The default configuration is:

{
	"host": "localhost",
	"port": 25,
	"auth": { "user": "", "pass": "" }
}

See Nodemailer - SMTP and Nodemailer - Sendmail for full options.

Example (basic SMTP on localhost):

"mail_settings": {
	"host": "localhost",
	"port": 25
}

Example (local sendmail):

"mail_settings": {
	"sendmail": true,
	"newline": "unix",
	"path": "/usr/sbin/sendmail"
}

Example (Fastmail):

"mail_settings": {
	"host": "smtp.fastmail.com",
	"port": 465,
	"auth": { "user": "youremail@fastmail.com", "pass": "YOUR_PASSWORD" },
	"secure": true
}

email_format

This string controls the email body format (default: html). Use html for styled emails or text for plain text.

This controls the email logo image (default: inline). Use inline to include the logo as an inline attachment, link to link to the logo image URL directly, or none to hide the logo image entirely.

When this is set to inline, client.logo_url must be a local web root path under the xyOps htdocs directory, because xyOps loads the image from disk before attaching it to outgoing emails. When this is set to link, client.logo_url may be a normal linked image URL instead.

max_emails_per_day

This number caps total emails sent per day across the app (default: 0, meaning no limit); excess sends are rejected with an error.

log_dir

This string sets the base directory for server logs and job logs (default: logs), e.g., logs/Error.log and logs/jobs/ID.log.

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

log_filename

This string is the filename pattern used by the core logger (default: [component].log); supports log column placeholders like [component].

log_columns

This array of strings controls which log columns are written and their order.

Default:

["hires_epoch", "date", "hostname", "pid", "component", "category", "code", "msg", "data"]

See pixl-logger for more details.

log_archive_path

This string sets the nightly log archive path pattern (default: logs/archives/[yyyy]/[mm]/[dd]/[filename]-[yyyy]-[mm]-[dd].log.gz); maintenance gzips and writes logs here.

Accepts date/time placeholders to dynamically generate the log archive filenames.

log_archive_keep

This string specifies how long to keep log archives for, e.g. 30 days.

Older log archives found in log_archive_path are automatically deleted after the nightly logs are rotated.

Set this to an empty string to disable the feature and keep log archives indefinitely.

log_archive_storage

Optionally archive logs to storage instead of local disk. This is primarily designed for 3rd party storage engines like S3. To use this feature, first disable log_archive_path (set to empty string), and then set this property accordingly.

Example:

"log_archive_storage": {
	"enabled": true,
	"key_template": "logs/archives/[yyyy]/[mm]/[dd]/[filename]-[yyyy]-[mm]-[dd].log.gz",
	"expiration": "1 year"
}

log_crashes

This boolean enables capturing uncaught exceptions and crashes in the logger subsystem (default: true).

The crash log location will be: /opt/xyops/logs/crash.log

tickets

This section configures the ticketing subsystem.

tickets.email_enabled

This boolean enables ticket-related outgoing emails such as new/overdue notifications (default: true).

tickets.email_debounce_sec

This number (seconds) sets the minimum spacing between repeated ticket update emails to reduce noise (default: 30).

For example, if a user makes a series of sequential changes to a ticket, only one email will be sent in a 30-second window, containing a summary of all the accumulated changes.

tickets.overdue_schedule

This string (HH:MM) sets the daily time when the system scans for overdue tickets and sends notices (default: 04:30).

tickets.overdue_query

This string is the Unbase-style search query used to select overdue tickets during the scheduled scan (default: status:open due:<today).

tickets.due_date_format

This date format string controls how ticket due dates are displayed (default: [dddd], [mmmm] [mday], [yyyy]).

tickets.date_time_format

This date/time format string controls how ticket timestamps are displayed (default: [dddd], [mmmm] [mday], [yyyy] [hour12]:[mi] [ampm]).

hooks

This object defines system-wide hook triggers that can fire on any logged activity.

Example:

{ "job_complete": { "web_hook": "wmhv3s16ymk" } }

See System Hooks for more details.

hook_text_templates

This object provides message templates for jobs and alerts; Mustache-style placeholders populate human-readable text for emails and web hooks (default includes templates like {{links.job_details}}).

Example set:

{
  "job_start": "Job started on {{nice_server}}: {{event.title}}: {{links.job_details}}",
  "job_success": "Job completed successfully on {{nice_server}}: {{event.title}}: {{links.job_details}}",
  "job_error": "Job failed on {{nice_server}}: {{event.title}}: Error ({{job.code}}): {{job.description}}: {{links.job_details}}",
  "job_progress": "Job is in progress on {{nice_server}} ({{event.title}}): {{links.job_details}}",
  "job_suspended": "Job is suspended and requires human intervention: {{event.title}}: {{links.job_details}}&resume=1",
  "job_limited": "{{action.msg}}: {{links.job_details}}",
  "alert_new": "Alert: {{nice_server}}: {{def.title}}: {{alert.message}}: {{links.alert_url}}",
  "alert_cleared": "Alert Cleared: {{nice_server}}: {{def.title}}"
}

See JobHookData and AlertHookData for a list of the placeholder macros you can use here.

multi

This section configures the multi-server subsystem.

multi.enable_version_checks

When set to true, xyOps will check for version updates of the core app, which will make external web requests to the Release Metadata URL.

multi.list_url

This URL string points to the release metadata used by multi-conductor upgrade flows (default: https://api.github.com/repos/pixlcore/xyops/releases).

multi.protocol

This string selects the WebSocket protocol for peer communications (default: ws:); set to wss: to require TLS.

multi.connect_timeout_sec

This number (seconds) sets the connection timeout for initial peer socket connections (default: 3).

multi.master_timeout_sec

This number (seconds) is used for the election timer and general control timeouts for conductor operations (default: 10).

multi.socket_opts

This object holds options merged into the WebSocket client, e.g., TLS options for self-signed certs.

Default:

{ "rejectUnauthorized": false }

multi.preferred_conductors

This optional array lists your preferred conductor servers (by their exact hostnames), in order from highest to lowest priority. If a preferred conductor is online and outranks the current primary (or the current primary is not preferred), and it satisfies the minimum age requirement, the current primary will relinquish command.

multi.relinquish_min_age

The minimum "age" of a peer conductor (time since last connect in seconds) that must be met before the current primary conductor will consider relinquishing command to it. This field is only applicable if you specify a list of preferred conductors.

multi.relinquish_wait_jobs

When checked, the peer relinquish operation will wait for all active jobs to complete, before the current primary conductor relinquishes command to a higher-ranked preferred one. This field is only applicable if you specify a list of preferred conductors.

satellite

This section configures xySat, our remote satellite agent.

satellite.enable_version_checks

When set to true, xyOps will check for version updates of the xySat app, which will make external web requests to the Release Metadata URL.

satellite.list_url

This URL string points to the release metadata for the satellite agent (default: https://api.github.com/repos/pixlcore/xysat/releases).

satellite.base_url

This URL string is the base for satellite downloads/upgrades (default: https://github.com/pixlcore/xysat/releases).

satellite.image

This is the Docker image to use when adding Docker-based satellite servers via the UI (default: ghcr.io/pixlcore/xysat).

satellite.version

This string sets the desired satellite version to fetch; may be a semver or tag (default: latest).

satellite.cache_ttl

This number (seconds) sets the cache TTL for satellite release metadata and tarballs to reduce network calls (default: 3600).

satellite.config

This object contains web server and runtime settings for xySat; these options are passed along when managing or provisioning satellite nodes (defaults provided in the sample config).

marketplace

This section configures the xyOps Marketplace.

marketplace.enabled

This boolean enables or disables the marketplace. If disabled, users cannot search for or install plugins. The default is true (enabled).

marketplace.metadata_url

This string points to the central marketplace metadata location, which contains the full product catalog.

Example:

https://raw.githubusercontent.com/pixlcore/xyops-marketplace/refs/heads/main/marketplace.json

marketplace.repo_url_template

This string is a template used to generate plugin repository URLs to specific files. It has placeholder macros for id (org and repo), version (git tag), and filename.

Example:

https://raw.githubusercontent.com/[id]/refs/tags/[version]/[filename]

marketplace.ttl

This is the number of seconds to cache the marketplace metadata locally before re-fetching from origin. The default is 3600 (one hour).

default_user_privileges

This object sets default privileges for new users (defaults include create/edit events, run/tag/comment jobs, and ticket permissions) unless overridden by roles or SSO.

See Privileges for more details on privileges.

default_user_prefs

This object sets default UI preferences for new users (locale, theme, motion/contrast, volume, saved searches, etc.), merged into profiles at creation/login.

See User for details on what properties can be specified here.

db_maint

These settings are used during nightly database maintenance.

db_maint.jobs.max_rows

This number sets the maximum rows retained for the jobs database table (default: 1000000); oldest are pruned during maintenance.

db_maint.alerts.max_rows

This number sets the maximum rows retained for the alerts database table (default: 100000); oldest are pruned during maintenance.

db_maint.snapshots.max_rows

This number sets the maximum rows retained for the snapshots database table (default: 100000); oldest are pruned during maintenance.

db_maint.activity.max_rows

This number sets the maximum rows retained for the activity database table (default: 100000); oldest are pruned during maintenance.

db_maint.servers.max_rows

This number sets the maximum rows retained for the servers database table (default: 10000); oldest are pruned during maintenance.

airgap

This section is for airgap mode, which can prevent xyOps from making unauthorized outbound connections beyond a specified IP range.

See Air-Gapped Mode for more details.

airgap.enabled

This boolean enables outbound network egress controls for server-initiated HTTP(S) requests (default: false).

airgap.whitelist

This array of CIDRs/hosts defines destinations explicitly allowed for outbound requests (default includes local/private networks); when enabled, only these are permitted.

airgap.blacklist

This array of CIDRs/hosts defines destinations that are always blocked for outbound requests.

client

This section is for the client-side configuration, used in the xyOps web application.

client.name

This string is the product name displayed in the UI and included in email/version text (default: xyOps).

client.company

This string is displayed as part of the copyright message at the bottom-left corner of the UI (default: PixlCore LLC).

client.logo_url

This points to the logo used in the UI header/sidebar and in emails (default: /images/logotype.png).

For the default email_logo mode of inline, this must be a local web root path under the xyOps htdocs directory, because xyOps loads the image from disk before attaching it to outgoing emails. If email_logo is set to link, this may be a normal image URL instead.

client.hide_sidebar_sections

This array allows you to globally hide specific sidebar sections for all users, regardless of their preferences.

client.tables

This object allows you to set default sort preferences for all the sortable tables in the UI.

client.items_per_page

This number sets the default page size for list views and searches (default: 50).

client.alt_items_per_page

This number sets the secondary page size for inline widgets and dropdown lists (default: 25).

client.max_table_rows

This number caps the number of rendered table rows client-side to keep the UI responsive (default: 500).

client.max_menu_items

Upper bound for items shown in menus and dropdowns (default: 1000).

client.api_timeout_ms

This number sets the API timeout for client requests in milliseconds (default: 10000).

client.max_job_output

Maximum size of job output to display inline on the details page (default: 5 MB).

client.alt_to_toggle

Requires the user to hold the Opt/Alt key to toggle the enabled property of certain entities in the UI (prevents accidental clicks).

client.outdated_badges

When set to true, will show a colored badge on sidebar sections for outdated software versions on the Conductors, Servers and Marketplace tabs. Admin only.

client.new_event_template

Provides sensible defaults for new events (triggers, limits, actions). Used to prefill the New Event form.

client.new_ticket_template

Provides defaults for creating new tickets. Used to prefill the New Ticket form.

client.chart_defaults

Default chart rendering options (line width, smoothing, ticks). Applied to pixl-chart monitor charts in the UI.

The defaults are:

"chart_defaults": {
	"lineWidth": 2,
	"lineJoin": "round",
	"lineCap": "butt",
	"stroke": true,
	"fill": 0.5,
	"horizTicks": 6,
	"vertTicks": 6,
	"smoothingMaxSamples": 100,
	"smoothingMaxTotalSamples": 1000,
	"hoverSort": -1
}

See pixl-chart for more details.

client.editor_defaults

Default code editor preferences (tabs, indent, line wrapping) for CodeMirror fields in the UI.

The defaults are:

"editor_defaults": {
	"lineNumbers": false,
	"matchBrackets": false,
	"indentWithTabs": true,
	"tabSize": 4,
	"indentUnit": 4,
	"lineWrapping": true,
	"dragDrop": false
}

See CodeMirror for more details.

client.bucket_upload_settings

Client-side limits for bucket uploads (max files/size/types). Enforced in the UI before upload, and enforced server-side.

The defaults are:

"bucket_upload_settings": {
	"max_files_per_bucket": 100,
	"max_file_size": 1073741824,
	"accepted_file_types": ""
}

client.ticket_upload_settings

Client-side limits for ticket attachments (max files/size/types). Enforced in the UI before upload, and enforced server-side.

The defaults are:

"ticket_upload_settings": {
	"max_files_per_ticket": 100,
	"max_file_size": 1073741824,
	"accepted_file_types": ""
}

client.job_upload_settings

Client-side limits for job file uploads (max files/size/types) and default expiration for user/plugin files.

The defaults are:

"job_upload_settings": {
	"max_files_per_job": 100,
	"max_file_size": 1073741824,
	"accepted_file_types": "",
	"user_file_expiration": "30 days",
	"plugin_file_expiration": "30 days"
}

client.run_event_dialog

Client-side configuration for the "Run Event" dialog, offering the ability to globally hide specific sections.

The defaults are:

"run_event_dialog": {
	"hide_files": false,
	"hide_tags": false,
	"hide_priority": false,
	"hide_params": false
}

Storage

This section configures the backend storage subsystem used by xyOps.

For full storage system documentation, see pixl-server-storage.

Storage.engine

Selects the storage engine (e.g., Hybrid, Filesystem, SQLite, S3). The default is Hybrid, which uses a combination of SQLite for JSON data records and the filesystem for binary file storage.

See Engines for more details.

Storage.list_page_size

Default page size for storage lists (default: 100).

Storage.hash_page_size

Default page size for storage hashes (default: 100).

Storage.concurrency

Maximum concurrent I/O operations (default: 32).

Storage.transactions

Enables transactional writes (default: true). Please leave this enabled!

Storage.trans_auto_recover

Automatically recover incomplete transactions on startup (default: true).

Storage.trans_dir

Local directory for transaction rollback logs and recovery bookkeeping (default: data/_transactions). Engines with native transaction support, such as SQLite, Postgres, and Redis, do not write rollback logs for successful commits, but the directory is still used for transaction housekeeping.

Storage.log_event_types

Default enables logging for get/put/delete and other operations. Controls which storage events are logged.

Storage.Hybrid

Configuration for the Hybrid storage backend.

Storage.Filesystem

Filesystem backend options (base directory, namespacing, raw paths, fsync, in-memory cache). See Filesystem for details.

Storage.SQLite

SQLite backend options (base directory, filename, pragmas, cache, backups). See SQLite for details.

Storage.AWS

AWS SDK options (region/credentials) used by S3 when applicable. See Amazon S3 for details.

Storage.S3

S3 backend options (timeouts, retries, bucket params, caching). See Amazon S3 for details.

WebServer

This section configures the web server used by xyOps.

For full web server configuration, see pixl-server-web.

WebServer.port

HTTP port for the built-in web server (default: 5522).

WebServer.htdocs_dir

Base directory for static assets and the web UI (default: htdocs).

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

WebServer.max_upload_size

Maximum accepted upload size in bytes (default: 1073741824).

WebServer.static_ttl

Cache TTL for serving static assets (default: 31536000).

WebServer.static_index

Default index file for directory roots (default: index.html).

WebServer.server_signature

Server signature string included in headers (default: xyOps).

WebServer.compress_text

Enables automatic gzip/deflate compression for text responses (default: true).

WebServer.enable_brotli

Enables Brotli compression when supported (default: true).

WebServer.timeout

Per-request idle timeout for incoming connections in seconds (default: 30);

WebServer.regex_json

Content-type regex pattern treated as JSON for response handling (default: (text|javascript|js|json)).

WebServer.clean_headers

Strips unsafe HTTP header characters from responses (default: true).

WebServer.log_socket_errors

Controls logging of low-level socket errors (default: false).

Note: This is rather noisy, and logs a lot of benign errors.

WebServer.response_headers

Extra headers added to all responses. The default is to add none.

WebServer.keep_alives

Controls HTTP keep-alive behavior (see keep_alives for details).

WebServer.keep_alive_timeout

Idle timeout for keep-alive connections in seconds (default: 30).

WebServer.max_connections

Maximum concurrent socket connections allowed (default: 2048).

WebServer.max_concurrent_requests

Maximum number of concurrent requests allowed (default: 256).

WebServer.log_requests

Enables per-request transaction logging (default: false).

Note: This is quite noisy.

WebServer.legacy_callback_support

Enables legacy JSONP/callback patterns for older clients (default: false). Do not enable this on production.

WebServer.startup_message

Emits a startup message with server URL to the console (default: false). Please leave this disabled, as xyOps emits its own startup message.

WebServer.debug_ttl

Sets the default cache TTL to 0 when running in debug mode (default: true).

WebServer.debug_bind_local

Binds to localhost only when running in debug mode (default: true).

WebServer.whitelist

List of client IPs/CIDRs explicitly allowed to access the webserver (default: all).

WebServer.blacklist

List of client IPs/CIDRs explicitly denied at the webserver level (default: none).

WebServer.uri_response_headers

Allows mapping URI regex to custom response headers. xyOps uses this to set CSP and security headers for HTML paths.

WebServer.https

Enables HTTPS support (default: true).

WebServer.https_port

HTTPS listener port (default: 5523).

WebServer.https_cert_file

TLS certificate file path (default: conf/tls.crt).

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

WebServer.https_key_file

TLS private key file path (default: conf/tls.key).

If this is a relative path, it is computed from the xyOps base directory, which is typically /opt/xyops.

WebServer.https_force

Forces HTTP to redirect to HTTPS (default: false).

WebServer.https_timeout

Per-request idle timeout for HTTPS in seconds (default: 30).

WebServer.https_header_detect

Includes common headers to detect HTTPS when behind a reverse proxy.

User

This section configures the user management system used by xyOps.

For full user configuration, see pixl-server-user.

User.session_expire_days

Session lifetime in days before requiring login again (default: 365).

User.max_failed_logins_per_hour

Rate limit for failed logins per user per hour (default: 5).

User.max_forgot_passwords_per_hour

Rate limit for password reset requests per user per hour (default: 3).

User.free_accounts

Allow users to self-register without admin invitation (default: false).

User.sort_global_users

Sort global user lists (affects admin UI ordering, default: false). Experimental.

User.use_bcrypt

Use bcrypt for password hashing (default: true). Please leave this enabled.

User.use_csrf

Use CSRF Tokens for extra security (default: true). Please leave this enabled.

User.mail_logger

Attach logger output to sent mail logs for diagnostics (default: true).

User.valid_username_match

Allowed characters for usernames (default: ^[\\w\\-\\.]+$).

User.block_username_match

A regex for reserved/blocked usernames (for security and namespace protection).

User.cookie_settings

Sets cookie path, secure policy, httpOnly, and sameSite. Controls session cookie attributes.

SSO

This section configures Single Sign-On using trusted headers. See the SSO guide for setup details and examples.

SSO.enabled

This boolean enables SSO and disables local username/password login (default: false).

SSO.whitelist

This array of IPs/CIDRs limits which client addresses may send trusted headers (default allows localhost, private and link-local ranges).

SSO.header_map

This object maps incoming trusted headers to xyOps user fields (username, full_name, email, groups).

SSO.cleanup_username

This boolean cleans up the username when derived from an email (strip illegal chars, lowercase, use local-part) (default: true).

SSO.cleanup_full_name

This boolean derives a display name from an email (use local-part, replace dots with spaces, title-case) (default: true).

SSO.group_role_map

This object maps IdP group names to xyOps role IDs to auto-assign roles on login (default: {}).

SSO.group_role_separator

Optional character for splitting the external group list (default: ,).

SSO.group_privilege_map

This object maps IdP group names to privilege keys to auto-assign privileges on login (default: {}).

SSO.replace_roles

This boolean replaces all existing user roles with those from group_role_map on each login (default: false).

SSO.replace_privileges

This boolean replaces all existing user privileges with those from group_privilege_map on each login (default: false).

SSO.admin_bootstrap

This string temporarily grants full admin to the exact matching username to bootstrap initial setup; remove after configuring groups (default: empty).

SSO.logout_url

This string is the URL to redirect to after xyOps clears its session, so your auth proxy/IdP can complete logout (e.g., /oauth2/sign_out?rd=...).

Debug

Debug.enabled

Enables remote server debugging via Chrome Dev Tools (default: false).

config_overrides_file

When settings are changed via the UI, overrides are saved here and applied on top of config.json.