Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

datalab

datalab is a user-friendly, open-source platform that can capture all the experimental data and metadata produced in a scientific lab, targeted (broadly) at materials chemistry but with customisability and extensability in mind. datalab records data and metadata securely and makes it accessible and reusable by both humans and machines via the web UI and API, respectively. datalab can be self-hosted and managed deployments are also available.

You can try the demo deployment at demo.datalab-org.io and read the online documentation at docs.datalab-org.io with release notes and changelog available on GitHub and online.

Features:

  • Capture and store sample and device metadata
  • Connect and sync raw data directly and from laboratory instruments
  • Built-in support for multiple characterisation techniques (XRD, NMR, echem, TEM, TGA, Mass Spec, Raman and more).
  • Capture scientific context: store the graph of relationships between research objects.
  • Python API for programmatic access to your lab's data enabling custom analysis and automation.
  • Join the datalab federation: you can add your datalab to the federation for additional shared features.
  • Plugin ecosystem allowing for custom data blocks, AI integration and other instance-specific code.
  • Deployment and infrastructure automation via Ansible playbooks.

Getting started

The full documentation lives at docs.datalab-org.io, split by audience:

Note that datalab is self-hosted and plugin-extensible, so no two instances are alike: the item types, data blocks and metadata fields available to you depend on how your instance has been configured and which plugins it has installed.

We can also provide paid managed deployments via datalab industries ltd.: contact us at hello@datalab.industries.

Design philosophy and architecture

The datalab architecture is shown below:

graph TD
classDef actor fill:#0066CC,fill-opacity:0.3,stroke:#333,stroke-width:2px,color:#000;
classDef clientInterface fill:#00AA44,fill-opacity:0.3,stroke:#333,stroke-width:2px,color:#000;
classDef coreComponent fill:#FF6600,fill-opacity:0.3,stroke:#333,stroke-width:2px,color:#000;
classDef umbrellaLabel fill:#666666,fill-opacity:0.3,stroke:#666,stroke-width:1px,color:#000,rx:5,ry:5,text-align:center;
classDef subgraphStyle fill:#f9f9f9,fill-opacity:0.1,stroke:#ccc,stroke-width:1px;

    subgraph ExternalActors [External actors]
        direction TB
        User[User]
        Machine[Machine]
    end
    class User,Machine actor;
    class ExternalActors subgraphStyle;

    UmbrellaDesc["Raw instrument data,<br>annotations, connections"]
    class UmbrellaDesc umbrellaLabel;

    subgraph ClientInterfaces [Client interfaces]
        direction TB
        BrowserApp[_datalab_<br>Browser app]
        PythonAPI[_datalab_<br>Python API]
    end
    class BrowserApp,PythonAPI clientInterface;
    class ClientInterfaces subgraphStyle;

    subgraph Backend
        direction TB
        RESTAPI[_datalab_<br>REST API]
        MongoDB[MongoDB Database]
        DataLake[Data Lake]
    end
    class RESTAPI,MongoDB,DataLake coreComponent;
    class Backend subgraphStyle;

    User      <-- "User data I/O" --> UmbrellaDesc;
    Machine   <-- "Machine data I/O" --> UmbrellaDesc;

    UmbrellaDesc <-- "_via_ GUI" --> BrowserApp;
    UmbrellaDesc <-- "_via_ scripts" --> PythonAPI;

    BrowserApp  <-- "HTTP (Data exchange)" --> RESTAPI;
    PythonAPI   <-- "API calls (Data exchange)" --> RESTAPI;

    RESTAPI <-- "Annotations, connections" --> MongoDB;
    RESTAPI <-- "Raw and structured characterisation data" --> DataLake;

    linkStyle 0 stroke:#666,stroke-width:3px
    linkStyle 1 stroke:#666,stroke-width:3px
    linkStyle 2 stroke:#666,stroke-width:3px
    linkStyle 3 stroke:#666,stroke-width:3px
    linkStyle 4 stroke:#666,stroke-width:3px
    linkStyle 5 stroke:#666,stroke-width:3px
    linkStyle 6 stroke:#666,stroke-width:3px
    linkStyle 7 stroke:#666,stroke-width:3px

    click PythonAPI "https://github.com/datalab-org/datalab-api" "datalab Python API on GitHub" _blank
    click BrowserApp "https://github.com/datalab-org/datalab/tree/main/webapp" "datalab Browser App on GitHub" _blank
    click RESTAPI "https://github.com/datalab-org/datalab/tree/main/pydatalab" "pydatalab REST API on GitHub" _blank

The main aim of datalab is to provide a platform for capturing the significant amounts of long-tail experimental data and metadata produced in a typical lab, and enable storage, filtering and future data re-use by humans and machines. datalab is targeted (broadly) at materials chemistry labs but with customisability and extensability in mind.

The platform provides researchers with a way to record sample- and cell-specific metadata, attach and sync raw data from instruments, and perform analysis and visualisation of many characterisation techniques in the browser (XRD, NMR, electrochemical cycling, TEM, TGA, Mass Spec, Raman).

Importantly, datalab stores a network of interconnected research objects in the lab, such that individual pieces of data are stored with the context needed to make them scientifically useful.

License

This software is released under the conditions of the MIT license. Please see LICENSE for the full text of the license.

Citation

Should you use datalab in your research, please consider citing the following preprint:

Matthew L. Evans, Joshua D. Bocarsly, Benjamin Charmes, Ben E. Smith, Gian-Marco Rignanese, David Waroquiers, Clare P. Grey, datalab: Federated data management infrastructure for materials chemistry and beyond, ChemRxiv (2026). DOI: 10.26434/chemrxiv.15001945/v1

Contact

We are available for consultations on setting up and managing datalab deployments, as well as collaborating on or sponsoring additions of new features and techniques. Please contact Josh or Matthew on their academic emails, or join the public datalab Slack workspace.

Contributions

Bug reports, feature requests and pull requests are all welcome. Please see CONTRIBUTING.md for how to get started, what we expect from a contribution, and our policy on AI-assisted changes.

This software was conceived and developed by:

with support from the group of Professor Clare Grey (University of Cambridge), and major contributions from:

plus many contributions, feedback and testing performed by other members of the community, in particular, the groups of Prof Matt Cliffe (University of Cambridge) and Dr Peter Kraus (TUBerlin) and the company Matgenix SRL.

A full list of code contributions can be found on GitHub.

Funding

Contributions to datalab have been supported by a mixture of academic funding and consultancy work through datalab industries ltd.

In particular, the developers thank:

Release files for datalab-server 0.8.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for datalab-server 0.8.0a1
File Size Uploaded
datalab_server-0.8.0a1.tar.gz 6.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for datalab-server 0.8.0a1
File Interpreter ABI Platform
datalab_server-0.8.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 6.3 MB

Release files / datalab_server-0.8.0a1.tar.gz

Download URL datalab_server-0.8.0a1.tar.gz
Size 6.1 MB
Tags Source
SHA-256 checksum
How to use checksums
e92409d265be0627577dae9bca136a3fc57cc2b4547ccf452c6aa46f99b24995
BLAKE2b-256 checksum
How to use checksums
1e9a241ce8a0d7a26c4178d99625ca4c1cd1d1365b5f4381721a6d4e7af740cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / datalab_server-0.8.0a1-py3-none-any.whl

Download URL datalab_server-0.8.0a1-py3-none-any.whl
Size 239.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
82bdb40d4bcff7d0d16403aefeab7af5a6b875b0e0a2de700f1c587e2fca6cad
BLAKE2b-256 checksum
How to use checksums
68716de991055a25fa3b8113f09fd269aedd831c4ba10a3c15957426440196ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page