SPIM Software Stack Monorepo
voxel/
├── python/
│ ├── core/ # python package: voxel-core
│ ├── drivers/ # python package: voxel-drivers
│ ├── web-backend/ # python package: voxel-web-backend
│ └── qt-widgets/ # python package: voxel-qt
├── js/
│ ├── svelte-widgets/ # npm package: voxel-svelte-widgets
│ └── react-widgets/ # npm package: voxel-react-widgets
│
├── microscopes/
│ ├── exaspim/
│ │ ├── backend/
│ │ └── frontend/
│ └── extreme/
│ ├── backend/
│ └── frontend/
│
├── config/ # shared YAML schemas & examples
├── docs/ # deeper architecture and development guides
├── examples/ # runnable demos & templates
├── scripts/ # tooling helpers (bootstrapping, codegen)
├── tests/ # integration tests covering Python & JS
├── CONTRIBUTING.md # How to get started, workspace setup, coding conventions
├── pyproject.toml # uv workspace: `libs/python/*` and `microscopes/*/backend` (python)
├── package.json # pnpm workspace: `libs/js/*` and `microscopes/*/frontend` (javascript)
└── README.md # High-level overview + quickstart
graph LR
subgraph libs [Libraries]
subgraph python-libs [Python Libs]
voxel-core --> voxel-drivers
voxel-core --> voxel-web-backend
voxel-core --> qt-widgets
end
subgraph js-widgets [JS Widgets]
svelte-widgets
react-widgets
end
end
subgraph microscopes [Microscopes]
subgraph exaspim [Microscope: exaspim]
exaspim-backend --> exaspim-frontend
end
subgraph extreme [Microscope: extreme]
extreme-backend --> extreme-frontend
end
end
%% Dependencies: Python libs → backends
voxel-drivers --> exaspim-backend
voxel-drivers --> extreme-backend
voxel-web-backend --> exaspim-backend
voxel-web-backend --> extreme-backend
%% Dependencies: JS Widgets → frontends
js-widgets --> exaspim-frontend
js-widgets --> extreme-frontend
%% Define reusable classes
classDef libCluster fill:#2E3440,stroke:#88C0D0,stroke-width:2px,fill-opacity:0.1;
classDef microscopeCluster fill:#2E3440,stroke:#BF616A,stroke-width:2px,fill-opacity:0.1;
classDef microscopeNode fill:none,stroke:#BF616A,stroke-width:1px;
%% Apply classes
class libs,python-libs,js-widgets libCluster;
class microscopes microscopeCluster;
class exaspim,extreme microscopeNode;
This repository uses the following branching strategy:
main
: Contains production-ready code. Updated only for releases and hotfixes.develop
: Default branch. Contains the latest development changes.feature/*
: Used for developing new features. Branch off from and merge back intodevelop
.hotfix/*
: Used for critical bug fixes. Branch off frommain
, and merge to bothmain
anddevelop
.
Contributors should typically branch off from and create pull requests to
develop
.
Refer to the CONTRIBUTING.md file for more details.