A single-machine dashboard for LM Studio. It periodically samples host and LM Studio state into SQLite, shells out to the lms CLI where needed, serves a React UI, and can optionally run an in-process HTTP proxy for OpenAI-compatible clients. Completion analytics are derived from lms log ingestion and dashboard chat paths, not from traffic observed only at the proxy.
| Documentation | Configuration | HTTP API + OpenAPI | Manual UI QA |
|---|
- Contributing — dev setup, tests, and pull request expectations
- Code of Conduct — community standards
- Security — responsible disclosure
- Changelog — notable changes between releases
- License: MIT
- CI: GitHub Actions — Lint (pre-commit), Test (Node 20 & 22: typecheck + Vitest), Production build (
npm run build). Runs on pushes and pull requests tomainormaster; use Actions → CI → Run workflow for a manual run.
More views (Chat, Downloads, Logs, Info, Settings) live under docs/images/ and in the UI overview.
- Overview — reachability, sampler status, loaded models, runtime context at a glance
- Models & Chat —
lmsinventory, load/unload, Hugging Face pulls, streamed chat via LM Studio - Activity & Hardware — completion telemetry and host metrics over selectable windows
- Logs & Downloads — LM Studio log streaming and
lms getoutput as SSE - Settings — API key, appearance, telemetry intervals, optional proxy, LAN bind (persisted where applicable)
- LM Studio on this host with the
lmsCLI discoverable (~/.cache/lm-studio/bin/lms,~/.lmstudio/bin/lms, orPATH). Override withLMS_PATHin.env. - Node.js 20+ (Node 22 LTS is a sensible default). If the server exits on startup with a
better_sqlite3/.node/NODE_MODULE_VERSIONerror, see Troubleshooting below.
cp .env.example .env
# Optional: set API_KEY when exposing the service beyond trusted localhost/LAN.
# Align LM_BASE_URL and PORT with your LM Studio and desired listen port.
make up # install, build, start server in background, tail .lm-dash.log
# Ctrl+C stops only the log tail; use make down to stop the server.
make health # curl /api/health (NET_PORT from Makefile / .env)
make downOpen http://127.0.0.1:8787 (or your PORT). If API_KEY is set, paste the same value under Settings in the UI so the browser sends X-API-Key, unless you rely on trusted loopback/LAN injection — see docs/api.md.
make devVite serves the client and proxies /api to the Fastify port (client/vite.config.ts); backend PORT must match .env.
make install
make build-native
npm startRun make help for all targets. Common flows: make up, make up-start, make logs, make down, make restart, make clean, make dev, make health. Background PID and log: .lm-dash.pid, .lm-dash.log (gitignored).
make typecheck
make testServer tests: server/test/. Client tests: client/src/**/*.test.ts(x).
The native addon was usually built for a different Node ABI than the one running npm start (typical right after a Node upgrade).
make rebuild-sqlite
make restartOr manually: npm rebuild better-sqlite3 -w server. If rebuild fails, install Xcode Command Line Tools (xcode-select --install) or switch to Node 20/22 LTS with nvm / fnm, then run make install again.
Environment variables, server-prefs.json, Apple Silicon collectors (macmon, powermetrics), LAN bind, and the optional completion proxy are covered in docs/configuration.md and docs/api.md so this file stays short.



