Skip to content

Driver Marketplace

The Driver Marketplace lets you browse, install, and share drivers through a VS Code-style Extensions panel. Community drivers can be distributed as .muxdriver packages — self-contained ZIP files with metadata, documentation, and the driver itself.

Overview

Drivers in Muxit come in several forms:

TypeTierSandboxDistribution
Built-in0N/ACompiled into the server
JavaScript1V8 sandbox.driver.js files
C# Extension3None.dll files

All driver types can be packaged as .muxdriver files for sharing. JavaScript drivers are recommended for community distribution because they run in a secure V8 sandbox with no file system, network, or process access.

Installing Drivers

From the Extensions Panel

  1. Click the Extensions icon (puzzle piece) in the Activity Bar
  2. Switch to the Available tab
  3. Search for a driver by name, description, or tag
  4. Click Install

The driver downloads, extracts, and registers automatically — no server restart needed.

From a .muxdriver File

If you have a .muxdriver package file (received from a colleague, downloaded manually, etc.):

bash
node drivers.js install

Or place the .muxdriver file in workspace/drivers/packages/ and the server will detect it on next startup.

DLL Driver Warnings

When installing a DLL community driver (Tier 3), the system runs a capability audit and shows what system access the driver requests (file system, network, process, etc.). You must explicitly approve before the driver loads. JS drivers skip this step because they run in a sandbox.

Creating Drivers

Use the Driver Manager tool to scaffold new drivers:

bash
node drivers.js

This opens an interactive menu. Select Create new JS driver or Create new C# driver.

Creating a JavaScript Driver

bash
node drivers.js create
# Select: JS driver
# Enter: name, description, group, author

This creates two files in workspace/drivers/:

  • {name}.driver.js — the driver implementation
  • {name}.manifest.json — package metadata

JS driver structure:

javascript
export default {
  meta: {
    name: "MyDriver",
    version: "1.0.0",
    group: "instruments",        // instruments, motion, communication, utilities
    description: "What it does",
    properties: {
      voltage: { type: "number", access: "r", unit: "V", description: "Measured voltage" },
    },
    actions: {
      reset: { description: "Reset the device" },
    },
    streams: [],
  },

  async init(config) { /* setup */ },
  async get(property) { /* read */ },
  async set(property, value) { /* write */ },
  async execute(action, args) { /* run action */ },
  async shutdown() { /* cleanup */ },
};

See JS Driver SDK for the complete API.

Creating a C# Driver

bash
node drivers.js create
# Select: C# driver
# Enter: name (PascalCase), description, group, author

This creates a project in drivers/Muxit.Driver.{Name}/ with:

  • .csproj referencing the SDK
  • {Name}Driver.cs implementing IConnectorDriver
  • manifest.json for packaging

Build with:

bash
dotnet publish drivers/Muxit.Driver.{Name} -c Release

See C# Driver SDK for the complete API.

The .muxdriver Package Format

A .muxdriver file is a ZIP archive with this structure:

manifest.json              ← required
README.md                  ← optional, shown in detail page
CHANGELOG.md               ← optional
icon.png                   ← optional, 128x128
my-driver.driver.js        ← JS driver entry point
  OR
MyDriver.dll               ← DLL driver entry point
MyDriver.dll.sig           ← optional RSA signature
deps/                      ← native dependencies (DLL drivers only)

manifest.json

json
{
  "formatVersion": 1,
  "id": "yourname/driver-name",
  "name": "My Driver",
  "version": "1.0.0",
  "description": "What this driver does",
  "author": {
    "name": "Your Name",
    "github": "yourgithub"
  },
  "group": "instruments",
  "tier": 1,
  "license": "MIT",
  "repository": "https://github.com/you/your-driver",
  "minMuxitVersion": "0.3.0",
  "entryPoint": "my-driver.driver.js",
  "tags": ["serial", "sensor"]
}
FieldRequiredDescription
formatVersionYesAlways 1
idYesUnique identifier: publisher/name format
nameYesHuman-readable display name
versionYesSemantic version (e.g., 1.0.0)
entryPointYesFilename of the driver (.driver.js or .dll)
descriptionNoShort description
authorNo{ name, github }
groupNoinstruments, motion, communication, or utilities
tierNo1 (JS) or 3 (DLL). Default: 1
licenseNoLicense identifier (e.g., MIT)
repositoryNoSource code URL
minMuxitVersionNoMinimum required Muxit version
tagsNoSearch/discovery tags

Packaging with drivers.js

bash
node drivers.js package

The tool will:

  1. List all available drivers (JS and C# projects)
  2. Let you select one to package
  3. For C# drivers: build with dotnet publish, collect DLLs and native dependencies
  4. Read or create manifest.json (prompts for missing fields)
  5. Include README.md and CHANGELOG.md if present
  6. Create a .muxdriver ZIP file in publish/drivers/
  7. Print the SHA256 hash (needed for the registry)

CHANGELOG.md

Drivers may ship a top-level CHANGELOG.md alongside manifest.json. It is optional, but recommended: the publish flow (both node drivers.js registry and the Dev Console publish wizard) reads it, scopes it to the version being published, and writes it into the changelog field of the generated registry entry. The driver-registry site renders that field as the Changelog section on the driver's detail page.

The publisher recognises the common Keep a Changelog heading styles for version scoping:

markdown
## 1.2.0
## [1.2.0]
## v1.2.0
## 1.2.0 - 2026-04-18
## 1.2.0 — 2026-04-18

The section is read from the first matching ## heading up to the next ## heading. If no heading matches the manifest version the whole file is used as a conservative fallback. The Dev Console's publish wizard shows the scoped text in an editable textarea before the driver-registry PR is opened, so you can always tweak the published notes without re-packaging.

Validating Before Packaging

bash
node drivers.js validate

Checks your driver project for common issues:

  • Missing or invalid manifest.json
  • Missing entry point file
  • Path traversal in file names
  • Missing SDK reference (C# drivers)
  • Missing meta section (JS drivers)

Inspecting a Package

bash
node drivers.js inspect

Opens a .muxdriver file and shows:

  • Manifest contents (name, version, author, etc.)
  • File listing with sizes
  • SHA256 hash of the package

Publishing

Step 1: Create a GitHub Release

  1. Push your driver source code to a GitHub repository
  2. Create a release and upload the .muxdriver file as a release asset
  3. Copy the download URL of the .muxdriver asset

Step 2: Generate Registry Entry

bash
node drivers.js          # select "Prepare registry entry"

This generates a JSON file with all the metadata needed for the registry, including the download URL and SHA256 hash.

Step 3: Submit to Registry

  1. Fork the driver-registry repository
  2. Add your registry entry JSON to the drivers/ directory
  3. Submit a pull request
  4. Once merged, your driver appears in the Available tab of the Extensions panel

Security Model

JS drivers run in a V8 sandbox with strict isolation:

  • No file system access
  • No network access (except via transport APIs)
  • No process spawning
  • No require() or import()

This makes JS drivers safe to install from unknown authors.

DLL Drivers

C# DLL drivers run with full .NET runtime access. Before installation, the system audits the DLL for capabilities:

  • File System — can read/write files
  • Network — can make network connections
  • Process — can spawn processes
  • Reflection — can inspect/modify code at runtime
  • Registry — can access the Windows registry

A warning dialog shows these capabilities and requires explicit approval.

Offline Use

The marketplace works in offline environments:

  • Registry cache: The driver index is cached locally for 24 hours. If the network is unavailable, stale cache is used.
  • Manual install: Place .muxdriver files in workspace/drivers/packages/ or use node drivers.js install to install from a local file.
  • No phone-home: Installed drivers work without any network connection.

Driver Manager Reference

bash
node drivers.js              # Interactive menu
node drivers.js create       # Create new driver
node drivers.js package      # Package driver into .muxdriver
node drivers.js validate     # Validate driver project
node drivers.js inspect      # Inspect .muxdriver package
node drivers.js install      # Install .muxdriver locally
node drivers.js list         # List all drivers

Also available from the command center: node muxit.js 20

Muxit — Hardware Orchestration Platform