LightMill is a TypeScript monorepo for building, running, and logging user experiments.
It is organized as small focused packages that can be used independently or as a full stack:
- Design generation and iteration.
- Timeline execution.
- React rendering helpers.
- Logging API contract, client, and server.
| Package | Description | README |
|---|---|---|
@lightmill/convert-touchstone |
Convert TouchStone XML to Lightmill static design format. | packages/convert-touchstone/README.md |
@lightmill/static-design |
Model static experiment designs and start run iterators. | packages/static-design/README.md |
@lightmill/runner |
Execute timeline iterators with lifecycle callbacks. | packages/runner/README.md |
@lightmill/react-experiment |
React Run component and hooks for task execution/logging. |
packages/react-experiment/README.md |
@lightmill/log-api |
Shared API contract and OpenAPI artifacts for logging. | packages/log-api/README.md |
@lightmill/log-client |
Browser/client SDK for sessions, resumable runs, and logs. | packages/log-client/README.md |
@lightmill/log-server |
Express middleware and SQLite datastore for logs. | packages/log-server/README.md |
- Node.js 22.x
- pnpm 10+
pnpm installpnpm -r run buildpnpm -r run testCommon integration flow:
- Convert or define a design with
@lightmill/convert-touchstoneor@lightmill/static-design. - Execute tasks with
@lightmill/runneror@lightmill/react-experiment. - Persist logs through
@lightmill/log-client+@lightmill/log-server. - Use
@lightmill/log-apias source of truth for API schemas and types.
packages/
convert-touchstone/
static-design/
runner/
react-experiment/
log-api/
log-client/
log-server/- Each package has its own
tsconfig, test setup, and changelog. - Public package entrypoints are defined through each package
exportsfield. - API-related packages (
log-api,log-client,log-server) follow JSON:API media type conventions.