Skip to content

Configuration Reference

All Muxit server settings live in workspace/config/server.json. You can edit this file directly or use the Settings panel in the web UI.

File Location

workspace/config/server.json

Changes to this file require a server restart to take effect (except where noted).


Server

WebSocket

json
{
  "websocket": {
    "port": 8765
  }
}
FieldTypeDefaultDescription
websocket.portint8765WebSocket server port. Also serves the web UI

Override at startup: node start.js server --port=9000

Polling Rates

json
{
  "polling": {
    "connectorRate": 200,
    "broadcastRate": 50,
    "clientFlushRate": 100
  }
}
FieldTypeDefaultUnitDescription
polling.connectorRateint200msHow often to poll connector properties
polling.broadcastRateint50msHow often to batch state changes for WebSocket
polling.clientFlushRateint100msHow often clients flush pending state updates

Tuning tip: If you have many polled properties and see high CPU, increase connectorRate to 500 or 1000. The default 200ms (5 polls/second) is a good balance for most setups.

Logging

json
{
  "logging": {
    "level": "info"
  }
}
FieldTypeDefaultDescription
logging.levelstring"info"Minimum log level: debug, info, warn, error

Connectors

json
{
  "connectors": {
    "enabled": ["test-device", "webcam", "mqtt"]
  }
}
FieldTypeDefaultDescription
connectors.enabledstring[](auto)List of enabled connector names. If absent, the first N connectors are auto-selected based on your license tier

Connector names correspond to filenames in workspace/connectors/ (without .js). The TestDevice is always enabled regardless of this list.

Manage this from the Hardware panel — check/uncheck connectors and click Save.


Scripts

json
{
  "scripts": {
    "directory": "./scripts",
    "autoStart": []
  }
}
FieldTypeDefaultDescription
scripts.directorystring"./scripts"Path to the scripts directory (relative to workspace)
scripts.autoStartstring[][]Script names to start automatically on server launch

Auto-start example: "autoStart": ["monitor", "mqtt-connect"] runs these scripts when the server starts.


Drivers

json
{
  "drivers": {
    "directory": "./drivers"
  }
}
FieldTypeDefaultDescription
drivers.directorystring"./drivers"Path to the drivers directory (relative to workspace). Holds installed .muxdriver packages and (optionally) hand-dropped .driver.js files. Each .muxdriver is extracted on load into a hidden .cache/<id>@<version>/ inside this directory

AI

json
{
  "ai": {
    "provider": "muxit",
    "model": "anthropic/claude-haiku-4-5",
    "maxTokens": 4096,
    "instructions": "You are Muxit AI, an assistant for a hardware lab.",
    "providers": {
      "ollama":   { "baseUrl": "http://localhost:11434/v1", "model": "llama3.2" },
      "lmstudio": { "baseUrl": "http://localhost:1234/v1", "model": "auto" }
    }
  }
}
FieldTypeDefaultDescription
ai.providerstring"muxit"LLM backend — "muxit" (cloud proxy), "ollama", "lmstudio", or "openai-compatible"
ai.modelstringprovider defaultActive model id. Cloud uses OpenRouter ids (anthropic/claude-haiku-4-5); local providers use the loaded model name (llama3.2, auto)
ai.maxTokensint4096Max tokens per response
ai.instructionsstring""Custom system prompt prepended to AI conversations
ai.promptProfilestring"standard""standard" ships full device schemas + decision-tree guidance in the system prompt; "minimal" strips both, leaving a one-line entry per device, and tells the model to call get_connector_schema(name) when it needs detail. Use "minimal" for local LLMs with 4–8K context windows.
ai.favoriteModelsstring[][]Model IDs shown in the model picker (e.g., ["anthropic/claude-sonnet-4-5"])
ai.providers.<id>.baseUrlstringper providerEndpoint for local providers — http://localhost:11434/v1 for Ollama, http://localhost:1234/v1 for LM Studio
ai.providers.<id>.apiKeystring""Optional bearer token for openai-compatible endpoints
ai.providers.<id>.modelstringper providerPer-provider default model — used when the active provider is switched

AI tool-call approval prompts are driven by the global safety level (see the Safety Guide), not by a separate ai config key.

The default Muxit AI cloud provider authenticates with your license key — no separate API keys needed. Local providers (Ollama, LM Studio, OpenAI-compatible) require a Pro license; once enabled they bypass the cloud entirely so chat, scripts, agents, and vision all run on your own hardware.

For detailed AI setup, see the AI & Voice Guide.


Voice

json
{
  "voice": {
    "stt": {
      "provider": "browser",
      "providers": {
        "browser": {
          "language": "en-US"
        }
      }
    },
    "tts": {
      "enabled": false,
      "provider": "browser",
      "providers": {
        "browser": {
          "voice": "Google UK English Male",
          "rate": 1.1,
          "pitch": 0.9
        }
      }
    },
    "wakeWord": {
      "enabled": false,
      "word": "muxit",
      "sensitivity": 0.5
    },
    "autoSend": true
  }
}
FieldTypeDefaultDescription
voice.stt.providerstring"browser"Speech-to-text provider (browser Web Speech API)
voice.stt.providers.browser.languagestring"en-US"STT language code
voice.tts.enabledbooleanfalseEnable text-to-speech for AI responses
voice.tts.providers.browser.voicestringvariesTTS voice name (browser-dependent)
voice.tts.providers.browser.ratenumber1.0Speech rate (0.5–2.0)
voice.tts.providers.browser.pitchnumber1.0Speech pitch (0.5–2.0)
voice.wakeWord.enabledbooleanfalseEnable "Muxit" wake word for hands-free activation
voice.wakeWord.wordstring"muxit"Wake word to listen for
voice.wakeWord.sensitivitynumber0.5Wake word detection sensitivity (0–1)
voice.autoSendbooleantrueAuto-send voice transcription when user pauses

For detailed voice setup, see the AI & Voice Guide.


Security

json
{
  "security": {
    "editorMode": true,
    "remoteAccess": false,
    "https": false,
    "bindAddress": "127.0.0.1"
  }
}
FieldTypeDefaultDescription
security.editorModebooleantrueAllow editing files from the web UI. Disable for read-only mode
security.remoteAccessbooleanfalseBind to all interfaces (0.0.0.0) for LAN access
security.httpsbooleanfalseEnable HTTPS with auto-generated self-signed certificate
security.bindAddressstring"127.0.0.1"Override bind address (advanced). Set to 0.0.0.0 for all interfaces

Remote access password is stored separately in workspace/config/security.json (hashed, never plaintext).

For detailed remote access setup, see the Remote Access Guide.


Complete Example

Here's a fully annotated server.json:

json
{
  "websocket": {
    "port": 8765
  },
  "polling": {
    "connectorRate": 200,
    "broadcastRate": 50,
    "clientFlushRate": 100
  },
  "logging": {
    "level": "info"
  },
  "scripts": {
    "directory": "./scripts",
    "autoStart": []
  },
  "drivers": {
    "directory": "./drivers"
  },
  "connectors": {
    "enabled": ["test-device", "webcam"]
  },
  "ai": {
    "provider": "muxit",
    "model": "anthropic/claude-haiku-4-5",
    "maxTokens": 4096,
    "instructions": ""
  },
  "voice": {
    "tts": { "enabled": false },
    "wakeWord": { "enabled": false },
    "autoSend": true
  },
  "security": {
    "editorMode": true,
    "bindAddress": "127.0.0.1"
  }
}

Muxit — Hardware Orchestration Platform