This file is a fast orientation guide for the active codebase. It is not a full design spec. Use it to find the right subsystem before making changes.
Pychron is a Qt desktop application built on Enthought Envisage and TraitsUI. The codebase combines:
- application bootstrap and plugin composition
- experiment execution and automation
- DVC-backed persistence and repository workflows
- hardware/instrument control
- processing, plotting, and review tooling
The active runtime package is pychron/. Legacy and experimental paths exist;
prefer the path that is currently wired into launchers, tasks, and plugins.
The main startup path is:
- launcher script in
launchers/ - launcher helper entry point
- environment/path/bootstrap setup
pychron.envisage.pychron_run- application object and plugin assembly
- Envisage task application run loop
The runtime tree under ~/Pychron is now bootstrap-managed. The supported
operator and developer setup flow uses:
pychron-bootstrappychron-doctorpython -m pychron doctor
See docs/dev_guide/running_pychron.rst and docs/dev_guide/installation.rst
for the current startup and install flow.
pychron/envisagepychron/applicationslaunchers/
Owns application startup, plugin registration, task panes, browser/task shell, preferences dialogs, and shared UI wiring.
See pychron/envisage/architecture.md.
pychron/experimentpychron/pyscripts
Owns experiment queues, execution state, automated runs, scripts, queue editors, and run lifecycle coordination.
See pychron/experiment/architecture.md.
pychron/dvc- parts of
pychron/entry,pychron/loading,pychron/data_mapper
Owns repository-backed persistence, metadata lookup, analysis save/pull/push behavior, and DVC-facing import/export helpers.
See pychron/dvc/architecture.md.
pychron/hardwarepychron/extraction_linepychron/laserspychron/spectrometerpychron/furnace
Owns device managers, controllers, remote hardware integration, and task-level instrument UIs.
See pychron/hardware/architecture.md.
pychron/pipelinepychron/processingpychron/envisage/browser
Owns data reduction, browser tables, plotting, review tools, and many operator analysis workflows.
Common cross-cutting infrastructure lives in:
pychron/corepychron/databasepychron/paths.pypychron/globals.py
Treat these as shared dependencies. Changes here have a larger blast radius than changes inside a task-specific package.
- Trace from the user-visible screen or command first, then narrow to the active plugin, task, manager, or editor.
- Check for local
architecture.mdandAGENTS.mdfiles before changing a deep subsystem. - Add instrumentation early when debugging cross-subsystem behavior, especially at plugin boundaries, queue execution boundaries, hardware I/O, and DVC save or load points.
- Prefer small fixes in the active path over broad cleanup across parallel legacy implementations.