Config schema
The agent's configuration (A13). The cloud merges system defaults < organization < group (and its
parents) < device, and sends the result with a hash; the agent reloads it without restarting.
A config.json next to the agent can hold the same settings for offline setup
(jodaprint-agent config import|export). Every field is optional in a profile.
| Key | Type | Default | Description |
|---|---|---|---|
configVersion | 1 | 1 | |
cloud | object | ||
cloud.url | string | "https://api.jodaprint.dev" | Cloud base URL. pattern ^https?:// |
cloud.heartbeatSeconds | integer | 30 | Heartbeat interval. min 5, max 600 |
local | object | ||
local.enabled | boolean | true | Run the local WebSocket server. |
local.ports | integer[] | [8182,8283,8384,8485] | at most 10 items |
local.standalone | boolean | Serve signed local requests without cloud activation (self-hosted/offline). Requires local.orgId and security.signingPublicKeys. | |
local.orgId | string | Organization ID in standalone mode. pattern ^org_[A-Za-z0-9]{1,64}$ | |
local.rateLimitPerSecond | integer | Requests per second allowed from one origin. Defaults to 50. min 1, max 1000 | |
security | object | ||
security.allowedOrigins | string[] | [] | |
security.signingPublicKeys | object[] | [] | |
security.requireSignature | boolean | true | Reject unsigned requests. |
security.unsignedMode | boolean | false | Allow unsigned requests after the user approves the site (A10.3). |
security.devMode | boolean | false | Also allow http://localhost:* origins. |
printers | object | ||
printers.aliases | map of string | {} | |
printers.defaults | map of job-options | {} | |
printers.discovery | object | ||
printers.discovery.network | object | ||
printers.discovery.network.enabled | boolean | false | Scan subnets for port 9100 printers and browse mDNS (_pdl-datastream._tcp). |
printers.discovery.network.subnets | string[] | [] | |
printers.default | string | Printer used when a job names no printer. Overrides the OS default printer. pattern ^prn_[A-Za-z0-9]{1,64}$ | |
printers.manual | ManualPrinter[] | [] | Printers the agent cannot discover: network (host:port), serial and Bluetooth SPP (serial port name). at most 100 items |
printers.virtual | object | ||
printers.virtual.enabled | boolean | true | Show the JodaPrint Virtual printer, which saves jobs to files. |
printers.drawerPins | map of 2 | 5 | Cash drawer kick pin per printer ID (2 or 5). Defaults to 2. | |
printers.statusIntervalSeconds | integer | How often idle printers are checked. Defaults to 15. min 5, max 300 | |
queue | object | ||
queue.maxAttempts | integer | 5 | Maximum print attempts per job. min 1, max 20 |
queue.jobTtlHours | integer | 24 | Queued jobs older than this fail with TIMEOUT. min 1, max 720 |
queue.keepContentHours | integer | 24 | Keep printed job content for reprints. min 0, max 720 |
update | object | ||
update.channel | "stable" | "beta" | "stable" | |
update.autoUpdate | boolean | true | Install updates automatically. |
update.window | string | "02:00-05:00" | Local time window for updates, HH:MM-HH:MM. pattern ^([01][0-9]|2[0-3]):[0-5][0-9]-([01][0-9]|2[0-3]):[0-5][0-9]$ |
logs | object | ||
logs.level | "debug" | "info" | "warn" | "error" | "info" | |
logs.maxSizeMb | integer | 20 | Size of one log file. min 1, max 500 |
logs.maxFiles | integer | 5 | Rotated files to keep. min 1, max 50 |
ui | object | ||
ui.locale | "en" | "fr" | "ht" | "en" | |
ui.showTray | boolean | true | Show the tray icon. |
android | object | Android agent settings (Prompt 7.2). Other agents ignore them. | |
android.shell | object | WebView shell: opens a web app full screen and gives it window.JodaPrintBridge. | |
android.shell.url | string | Page the shell opens (https only). Managed configuration can set it too. pattern ^https:// | |
android.shell.fullScreen | boolean | Hide the status and navigation bars. | |
android.shell.disableBack | boolean | The back button does not leave the web app (kiosk). | |
android.shell.autoStart | boolean | Open the shell when the device starts. | |
templates | template[] | The organization's templates (Prompt 8.1). The cloud sets them from its template table; profiles cannot. at most 500 items |
Types
ManualPrinter
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Display name. |
connection | "network" | "serial" | "bluetooth" | yes | |
address | string | yes | host:port (port defaults to 9100) for network; serial port such as COM3 or /dev/ttyUSB0 for serial and bluetooth. |
kind | "thermal" | "label" | "document" | Defaults to thermal. | |
paper | paper | ||
serial | SerialSettings |
SerialSettings
| Field | Type | Required | Description |
|---|---|---|---|
baudRate | 1200 | 2400 | 4800 | 9600 | 19200 | 38400 | 57600 | 115200 | 230400 | Defaults to 9600. | |
dataBits | 7 | 8 | ||
parity | "none" | "odd" | "even" | ||
stopBits | 1 | 2 |
Defaults
{
"configVersion": 1,
"cloud": {
"url": "https://api.jodaprint.dev",
"heartbeatSeconds": 30
},
"local": {
"enabled": true,
"ports": [8182, 8283, 8384, 8485]
},
"security": {
"allowedOrigins": [],
"signingPublicKeys": [],
"requireSignature": true,
"unsignedMode": false,
"devMode": false
},
"printers": {
"aliases": {},
"defaults": {},
"discovery": {
"network": {
"enabled": false,
"subnets": []
}
},
"manual": [],
"virtual": {
"enabled": true
}
},
"queue": {
"maxAttempts": 5,
"jobTtlHours": 24,
"keepContentHours": 24
},
"update": {
"channel": "stable",
"autoUpdate": true,
"window": "02:00-05:00"
},
"logs": {
"level": "info",
"maxSizeMb": 20,
"maxFiles": 5
},
"ui": {
"locale": "en",
"showTray": true
}
}
This page is generated from protocol/schemas/config.json and
agent/internal/config/defaults.json.