Skip to content

Repository files navigation

CHESS.jl

Documentation (stable) Documentation (dev) CI License: MIT

CHESS.jl is a data framework for recording, reconstructing, and planning the operations of a laboratory -- automated or otherwise. Rather than storing the state of a lab (what's where, what's in it, how full it is) at each point in time, CHESS records the operations that produced that state -- movements, environmental changes, transfers, and reads -- as a permanent, append-only ledger, and reconstructs any state on demand by simulating that history. The design is directly inspired by how chess games are recorded: not as a sequence of board positions, but as a sequence of moves, replayed by an engine that knows the rules.

This mirrors the shape of the CHESS package family itself:

  • CHESSCore -- the "lab engine": Location/Stock/Attribute/Read types and the pure, in-memory operations that act on them (move_into!, transfer!, set_attribute!, record_read!).
  • CHESSDatabase -- an append-only SQLite-backed history of every operation, plus the reconstruction algorithms that replay it into CHESSCore objects on demand.
  • CHESSLabConstants -- a starter set of registered lab constants (reagents, organisms, location kinds, instruments, standard stock recipes) built on CHESSCore's registration macros -- a template for defining your own lab's constants.
  • CHESS -- the umbrella package: @reexports all three, plus Unitful, so using CHESS alone is enough to get everything.

Installation

CHESS requires Julia 1.12 or later -- the repository ties its packages together as a Julia [workspace], a Pkg feature introduced in 1.12. The workspace members (CHESSCore, CHESSDatabase, CHESSLabConstants, Pourfecto) resolve each other via local paths, not a package registry, so CHESS must be used from a local clone -- Pkg.add(url="...") from another project will not work (Pkg does not carry a workspace's local path resolution to consumers that merely add it as a dependency), and none of these packages are published to a registry.

# git clone https://github.com/jensenlab/CHESS && cd CHESS
using Pkg
Pkg.instantiate()

Quickstart

using CHESS

room = GenericLocation(nothing, "Main Room", Room)
plate = build_location(WP96, "Plate 1")
move_into!(room, plate)

set_attribute!(room, Temperature(25u"°C"))
deposit!(plate["A1"], 100u"µL" * water)

environment(plate["A1"])[:Temperature] # inherited from room -> plate -> well

Documentation

The full manual and API reference are published at http://jensenlab.net/CHESS. The manual works through CHESS's core concepts in the order they build on one another, starting with Locations.

License

CHESS is licensed under the MIT License.

About

A data framework for recording, planning, and executing experiments in autonomous labs

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages