Prototype. BattINFO is in active development, so content and tools are still changing.
BattINFO

battinfo playground

Build one of the core objects on the left. Most are a specification (the reusable design) plus an instance (a physical thing built to it). Watch it turn into the three forms you work with: the Python that authors it, the canonical record, and the published JSON-LD. It updates as you type, and nothing leaves the page.

The Playground is for building and exploring — a quick sketch, not the full model, with identifiers added when you save. Already have a finished record and just want a pass/fail verdict? Use Validate. New to the model? Read the authoring guide.

Scope: the cell level and below — materials, electrodes, electrolytes, cells, tests, datasets. Module and pack modeling is on the roadmap.

Specification

The reusable design of a cell: format, chemistry, electrodes, and rated properties. Many physical cells can share one spec.

Conventional properties (rated / declared)

Instances

One physical cell built to the spec, with its own label, dates, and measured values. On save it links back to the spec.

Measured properties

Serializations

Looks valid against the schemas
authoring code
from battinfo import CellSpec, create_cell_instance

spec = CellSpec(
    name="A123 ANR26650M1-B",
    manufacturer="A123",
    model="ANR26650M1-B",
    format="cylindrical",
    chemistry="Li-ion",
    positive_electrode_basis="LFP",
    negative_electrode_basis="graphite",
    properties={
        "nominal_capacity": {"value": 2.5, "unit": "Ah"},
        "nominal_voltage": {"value": 3.3, "unit": "V"},
    },
)
spec_record = spec.to_record()

# one physical cell built to the spec
instance = create_cell_instance(
    cell_spec_id=spec_record["cell_spec"]["id"],
    name="Cell 001",
    serial_number="SN-0001",
    manufactured_at="2024-06-01",
    expires_at="2034-06-01",
    measured={
        "state_of_health": {"value": 100, "unit": "%"},
    },
)

Checked in the browser against the canonical schemas. The CLI runs the full check on save.