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:
| Type | Tier | Sandbox | Distribution |
|---|---|---|---|
| Built-in | 0 | N/A | Compiled into the server |
| JavaScript | 1 | V8 sandbox | .driver.js files |
| C# Extension | 3 | None | .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
- Click the Extensions icon (puzzle piece) in the Activity Bar
- Switch to the Available tab
- Search for a driver by name, description, or tag
- 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.):
node drivers.js installOr 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:
node drivers.jsThis opens an interactive menu. Select Create new JS driver or Create new C# driver.
Creating a JavaScript Driver
node drivers.js create
# Select: JS driver
# Enter: name, description, group, authorThis creates two files in workspace/drivers/:
{name}.driver.js— the driver implementation{name}.manifest.json— package metadata
JS driver structure:
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
node drivers.js create
# Select: C# driver
# Enter: name (PascalCase), description, group, authorThis creates a project in drivers/Muxit.Driver.{Name}/ with:
.csprojreferencing the SDK{Name}Driver.csimplementingIConnectorDrivermanifest.jsonfor packaging
Build with:
dotnet publish drivers/Muxit.Driver.{Name} -c ReleaseSee 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
{
"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"]
}| Field | Required | Description |
|---|---|---|
formatVersion | Yes | Always 1 |
id | Yes | Unique identifier: publisher/name format |
name | Yes | Human-readable display name |
version | Yes | Semantic version (e.g., 1.0.0) |
entryPoint | Yes | Filename of the driver (.driver.js or .dll) |
description | No | Short description |
author | No | { name, github } |
group | No | instruments, motion, communication, or utilities |
tier | No | 1 (JS) or 3 (DLL). Default: 1 |
license | No | License identifier (e.g., MIT) |
repository | No | Source code URL |
minMuxitVersion | No | Minimum required Muxit version |
tags | No | Search/discovery tags |
Packaging with drivers.js
node drivers.js packageThe tool will:
- List all available drivers (JS and C# projects)
- Let you select one to package
- For C# drivers: build with
dotnet publish, collect DLLs and native dependencies - Read or create
manifest.json(prompts for missing fields) - Include
README.mdandCHANGELOG.mdif present - Create a
.muxdriverZIP file inpublish/drivers/ - 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:
## 1.2.0
## [1.2.0]
## v1.2.0
## 1.2.0 - 2026-04-18
## 1.2.0 — 2026-04-18The 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
node drivers.js validateChecks 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
metasection (JS drivers)
Inspecting a Package
node drivers.js inspectOpens 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
- Push your driver source code to a GitHub repository
- Create a release and upload the
.muxdriverfile as a release asset - Copy the download URL of the
.muxdriverasset
Step 2: Generate Registry Entry
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
- Fork the driver-registry repository
- Add your registry entry JSON to the
drivers/directory - Submit a pull request
- Once merged, your driver appears in the Available tab of the Extensions panel
Security Model
JavaScript Drivers (Recommended for Community)
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()orimport()
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
.muxdriverfiles inworkspace/drivers/packages/or usenode drivers.js installto install from a local file. - No phone-home: Installed drivers work without any network connection.
Driver Manager Reference
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 driversAlso available from the command center: node muxit.js 20