Development setup
Requirements
Node.js 24.15 or newer. Node.js 22.22.2 or newer within the 22.x line also works.
Nothing else is required. Docker is optional and is never a production dependency.
With a local Node.js
npm installnpm run devWith Docker Desktop
A persistent development service with hot reload, at http://127.0.0.1:4173:
npm run docker:upnpm run docker:logsnpm run docker:downThe service restarts with Docker Desktop until you stop it explicitly. Set ALABASTER_PORT before starting Compose to use another host port. Linux dependencies live in a named volume and refresh when package-lock.json changes.
It talks to a real printer
The development service is usually pointed at a real machine. Heaters heat and motors move. Verify with reads and the interface's own state where you can. Be deliberate about any mutating G-code you send.
The documentation site
This site is built with VitePress from website/:
npm run docs:devnpm run docs:buildIt is published to GitHub Pages from main. Pull requests build it without deploying.
Before opening a pull request
npm run checkThat runs formatting, linting, type-checking, every test, and the production build. While iterating, run a single spec instead:
npx vitest run src/stores/__tests__/telemetry.spec.tsThe stack
| Layer | Choice |
|---|---|
| Framework | Vue 3, Composition API, <script setup lang="ts"> |
| Build | Vite |
| State | Pinia, split by domain |
| Routing | Vue Router, hash history |
| i18n | Vue I18n, English as the typed source locale |
| Styling | Tailwind CSS over semantic design tokens |
| Testing | Vitest and Vue Test Utils |
Alabaster keeps transport code free of Vue and Pinia so it can be unit tested without mounting anything.
Where the rules live
Alabaster keeps its own internal architecture decision records and design contracts. They are not published here and are not part of this repository's public checkout. They are binding on every change: code and documents must agree.
See Contributing for which areas they govern and how to ask before designing a change that touches one.