Skip to main content
Version: 3.5.x

Settings Reference

This document lists all settings returned by the /settings/ endpoint with their key, type (from type_hint), and constraints (from metadata.constraint.range + locked where applicable).

A locked setting is read-only at runtime. It can be changed via the config file or through the Haply Hub settings page, but a full service restart is required for changes to take effect. These are marked boot in the tables below.

Configuration

The configuration file to override the settings during service startup is located here:

PlatformLocation
WindowsC:\ProgramData\Haply\Inverse\haply-inverse-service-config.json
MacOS/Library/Application Support/Haply/Inverse/haply-inverse-service-config.json
Linux/etc/haply-inverse-service/haply-inverse-service-config.json

The config file is a flat JSON object mapping setting keys to override values. Keys must be valid settings keys returned by the /settings/ HTTP route (see API Reference). Any key not specified uses the service default.

For example, a networking configuration override:

{
"communication/http/port": 8400,
"communication/websocket/port": 8500,
"communication/events/port": 9000,
"communication/bind_all_interfaces": true
}

Visibility and filtering

The /settings listing endpoints (GET /settings, GET /settings/) return only basic settings by default. Pass ?advanced=true to include settings flagged advanced, ?deprecated=true to include deprecated aliases. Hidden settings are reserved for internal use; they appear only when misc/hidden_settings is set via POST /settings/misc/hidden_settings (no query-param equivalent). Filter flags AND together — a key flagged both advanced and hidden needs both gates open. POST and DELETE on a known key are ungated.

Single-key reads (GET /settings/<key>) bypass the advanced/deprecated gate when you use the exact canonical key — useful for clients with prior knowledge. Hidden keys remain gated.

Three runtime toggles seed the gates; their values persist for the rest of the service lifetime:

KeyTypeConstraintsDescription
misc/advanced_settingsboolInclude advanced-flagged settings in GET /settings listings (default false). Equivalent to passing ?advanced=true on every request.
misc/deprecated_settingsboolInclude deprecated-flagged settings in GET /settings listings (default false). Equivalent to passing ?deprecated=true on every request.

Type mapping

Type hints returned by the API map to these JSON shapes:

  • STRINGstring
  • BOOLbool
  • INTint
  • FLOATfloat
  • ARR_STRINGstring[]
  • VEC3vec3 (object with {x, y, z})
  • GENERICjson (arbitrary structured value)

communication/…

Network ports and bind addresses for the HTTP, WebSocket, and event-stream servers. Most entries are boot-only.

KeyTypeConstraintsDescription
communication/serial/enabledboolEnable or disable serial device communication.
communication/bind_addressstringbootIP address the HTTP and WebSocket servers bind to.
communication/bind_all_interfacesboolbootBind servers to 0.0.0.0 instead of localhost.
communication/http/portintbootHTTP REST API port (default 10000).
communication/websocket/portintbootMain v3.1 WebSocket port (default 10001).
communication/websocket/legacy_portintbootLegacy v3.0 WebSocket port (default 10000).
communication/events/portintbootEvent-stream WebSocket port (default 10020).

devices/…

devices/detection/…

Serial-port scanning policy. All entries are advanced.

KeyTypeConstraintsDescription
devices/detection/scan_period_msintrange 100–10000; bootInterval between serial port scans (ms).
devices/detection/handshake_timeout_sintrange 1–15Handshake timeout per port (s).
devices/detection/max_retriesintrange 1–10Maximum handshake retry attempts per port.
devices/detection/failure_log_delay_sintrange 1–60Delay before re-logging a detection failure (s).
devices/detection/block_looping_portsboolBlock device readiness when a looping port is detected.
devices/detection/excluded_portsjsonSerial port paths to skip during detection.
devices/detection/additional_portsstring[]Extra serial port paths to scan unconditionally.
devices/detection/allowed_vendor_id_filterstring[]USB vendor IDs allowed during port enumeration.
devices/detection/port_name_substring_filterstring[]Platform-specific port name substrings to match.
devices/detection/wireless_verse_grip_description_filterstring[]Port description substrings for wireless VerseGrip detection.
devices/detection/inverse3x_description_filterstring[]Port description substrings for Inverse3x detection.
devices/detection/extra_ports (deprecated)string[]Use devices/detection/additional_ports instead. Reads and writes are transparently forwarded to the canonical key.

devices/*inverse/…

Global defaults applied to every Inverse3-family device. Per-session overrides take precedence.

Renamed in 3.5.1

The glob was devices/inverse*/… in 3.5.0; the leading * now sits before inverse. Config files using the old literal will fail to bind on 3.5.1 — update them. The keys themselves are otherwise unchanged.

KeyTypeConstraintsDescription
devices/*inverse/filters/force_scale/gainfloatrange 0.0–2.0Global force output multiplier applied to all devices.
devices/*inverse/filters/force_gate/gainfloatrange 0.0–1.0Default force-gate gain for new sessions.
devices/*inverse/control_timeout_msintrange 50–10000Timeout before releasing the device control lock (ms).
devices/*inverse/query_orientation_on_idleboolQuery body orientation from firmware when the device is idle.
devices/*inverse/safeties/expose_in_snapshotboolInclude per-device safety flags in GET /devices/{id} snapshots.

devices/presets

KeyTypeConstraintsDescription
devices/presetsjsonDefault device-configuration presets per device type (mount transform, basis, etc. for inverse_arm_front_*, inverse_led_front_*, minverse_*, verse_grip_default, wireless_verse_grip_default, custom_verse_grip_default).

devices/wireless_verse_grip/…

KeyTypeConstraintsDescription
devices/wireless_verse_grip/battery/low_thresholdintBattery percentage below which a low-battery warning fires.
devices/wireless_verse_grip/battery/critical_thresholdintBattery percentage below which a critical-battery alert fires.
devices/wireless_verse_grip/battery/reset_marginintHysteresis margin before clearing a battery warning.
devices/wireless_verse_grip/filters/orientation_filterjsonbootOne Euro Filter config for wireless VerseGrip orientation.

features/…

features/calibration/…

KeyTypeConstraintsDescription
features/calibration/hall_thresholdintrange 1–32Hall sensor level at which the pen is considered attached during calibration.

features/grip_hook/…

Automatic grip-hook behaviour — locks the cursor while the grip is held upright.

KeyTypeConstraintsDescription
features/grip_hook/enabledboolEnable grip-hook auto-lock when the grip is held upright.
features/grip_hook/use_hallboolUse the hall-sensor threshold instead of orientation for grip detection.
features/grip_hook/hallintrange 1–32Hall-sensor value threshold to trigger the grip lock.
features/grip_hook/hold_durationintrange 10–1000Duration to hold the lock after trigger (ms).

features/navigation/bubble/…

Bubble navigation module defaults — passed into the session when a bubble behaviour is first activated. See the Navigation module page for runtime semantics of each field.

KeyTypeConstraintsDescription
features/navigation/bubble/centervec3Default bubble centre position.
features/navigation/bubble/center_enabledboolApply the configured center when a bubble behaviour is first activated.
features/navigation/bubble/rotation_enabledboolApply the workspace rotation to the navigation direction.
features/navigation/bubble/scale_enabledboolApply the workspace scale to the navigation velocity.
features/navigation/bubble/center_drift_speedfloat≥ 0Drift speed (m/s) in auto_follow centre mode.
features/navigation/bubble/max_velocityfloatMaximum navigation velocity in the velocity zone (m/s).
features/navigation/bubble/velocity_zone_widthfloatWidth of the velocity zone outside the bubble surface (m).
features/navigation/bubble/reset_velocity_on_entryboolReset velocity to zero when the cursor enters the bubble.
features/navigation/bubble/spring_innerfloatSpring coefficient at the bubble centre (N/m).
features/navigation/bubble/spring_surfacefloatSpring coefficient at the bubble surface (N/m).
features/navigation/bubble/spring_outerfloatSpring coefficient at the outer boundary (N/m).
features/navigation/bubble/damping_innerfloatDamping coefficient at the bubble centre (Ns/m).
features/navigation/bubble/damping_surfacefloatDamping coefficient at the bubble surface (Ns/m).
features/navigation/bubble/damping_outerfloatDamping coefficient at the outer boundary (Ns/m).
features/navigation/bubble/wall_stiffnessfloatStiffness of the hard wall at the outer boundary (N/m).
features/navigation/bubble/bump_widthfloatWidth of the tactile bump at the bubble surface (m).
features/navigation/bubble/bump_stiffnessfloatStiffness of the tactile bump at the bubble surface (N/m).
features/navigation/bubble/stop_at_collisionboolBlock the bubble centre from drifting into the collision direction when a collision is active.
features/navigation/bubble/collision_thresholdfloat> 0External-force magnitude (N) at which a collision is detected.
features/navigation/bubble/collision_inflate_scalefloat≥ 1Multiplier applied to velocity_zone_width while a collision is active.
features/navigation/bubble/collision_exit_ratiofloatrange (0,1]Hysteresis ratio — exit collision when |ext_force| drops below collision_threshold × this. 1.0 disables hysteresis.
features/navigation/bubble/avatar_boundary_enabledboolClamp the avatar world position to the configured avatar_boundary SDF shape.

features/safe_trajectory/…

Velocity limiter for end-effector motion.

KeyTypeConstraintsDescription
features/safe_trajectory/enabledboolEnable the safe-trajectory speed limiter.
features/safe_trajectory/max_velfloatrange 0.01–2.0Maximum allowed end-effector velocity (m/s).

features/screensaver/…

Idle animation played on Inverse3 devices when no session is driving them.

KeyTypeConstraintsDescription
features/screensaver/enabledboolEnable the idle screensaver animation on Inverse3 devices.
features/screensaver/speedfloatrange 0.001–0.2Screensaver animation speed.
features/screensaver/distracted_speedfloatrange 0.001–0.2Animation speed when the user is near but not engaging.

features/sdf/…

Signed-distance-field haptic effects module (SDF HFX).

KeyTypeConstraintsDescription
features/sdf/enabledboolEnable or disable the SDF haptic-effects module.
features/sdf/state_outputboolInclude SDF state in the device output payloads by default.
features/sdf/max_countintrange 0–128Maximum number of active SDF effects (0 = unlimited).
features/sdf/events/createdboolEmit an event when a new SDF effect is created.
features/sdf/events/deletedboolEmit an event when an SDF effect is deleted.
features/sdf/events/updatedboolEmit an event when an SDF effect is updated.
features/sdf/probe_on_zero_force/enabledboolAuto-probe SDF fields when applied force is near zero.
features/sdf/probe_on_zero_force/delayfloatrange 0.001–60.0Delay before auto-probing after force drops to zero (s).

features/verse_grip_pairing/…

Attach/detach tracking between an Inverse3 and a (wired or wireless) Verse Grip. Powers the Haply Hub pairing UI.

KeyTypeConstraintsDescription
features/verse_grip_pairing/enabledboolEnable pairing / attach-detach tracking.
features/verse_grip_pairing/hall_threshold_vgintrange 1–32Hall level at which a wired VerseGrip is considered attached.
features/verse_grip_pairing/hall_threshold_wvgintrange 1–32Hall level at which a Wireless VerseGrip is considered attached.
features/verse_grip_pairing/detach_debounce_msintrange 0–1000Debounce window before committing a detach (ms).
features/verse_grip_pairing/heartbeat_msintrange 100–10000Interval between forced re-notifications (ms).
features/verse_grip_pairing/force_attachedboolPermanently force the attached state to true, bypassing the hall sensor (hardware-failure workaround).

session/serialization/…

Transform-output formatting — affects WebSocket and HTTP JSON payloads. These keys moved from serialization/* to session/serialization/* in 3.5.1 to reflect their per-session scope. The old paths still resolve via deprecated aliases.

KeyTypeConstraintsDescription
session/serialization/explicit_fieldsboolInclude transform fields that equal their identity default in serialized output (e.g. position: {0,0,0}, rotation: {w:1,…}). Useful when your client requires every field to be explicitly present. Default: false.
session/serialization/force_complete_transformsboolAlways emit position, rotation, and scale in every transform output, including orientation-only devices (Verse Grip, Wireless Verse Grip) which otherwise emit only rotation. Subsumes session/serialization/explicit_fields. Default: false.
serialization/explicit_fields (deprecated)boolUse session/serialization/explicit_fields instead. Reads and writes are transparently forwarded to the canonical key.
serialization/force_complete_transforms (deprecated)boolUse session/serialization/force_complete_transforms instead. Reads and writes are transparently forwarded to the canonical key.

session/…

Session scheduler.

KeyTypeConstraintsDescription
session/min_simulation_rate_hzintrange 20–500Minimum acceptable device simulation rate (Hz) before a warning fires.

rate/…

Service pacing. Introduced in 3.5.1 — the four rate/websocket/* keys below were previously under session/commands/*; the old paths still resolve via deprecated aliases.

KeyTypeConstraintsDescription
rate/websocket/zoh_window_msintZero-order-hold window — suppress probes received within this window (ms).
rate/websocket/drop_warning_thresholdintNumber of dropped commands within the window before warning.
rate/websocket/drop_warning_window_msintSliding window size for counting dropped commands (ms).
rate/websocket/tick_on_empty_batchbooladvancedSchedule a main_loop tick even when an entire WebSocket batch was dropped.
session/commands/zoh_window_ms (deprecated)intUse rate/websocket/zoh_window_ms instead. Reads and writes are transparently forwarded.
session/commands/drop_warning_threshold (deprecated)intUse rate/websocket/drop_warning_threshold instead. Reads and writes are transparently forwarded.
session/commands/drop_warning_window_ms (deprecated)intUse rate/websocket/drop_warning_window_ms instead. Reads and writes are transparently forwarded.
session/commands/tick_on_empty_batch (deprecated)boolUse rate/websocket/tick_on_empty_batch instead. Reads and writes are transparently forwarded.

Internal-only settings

Several settings families ship hidden in 3.5.1 and are reserved for internal use — rate/dispatch/* (AIMD dispatch-rate cap and back-pressure thresholds), session/freeform/* (behavioural fingerprinting), and session/serialization/preview/* (pre-release serialization experiments such as Euler quaternion output and Wireless VerseGrip routing). They are reachable through misc/hidden_settings for debugging, but expect them to be promoted, renamed, or removed in a later minor — do not pin client behaviour to them.