The lab inventory system
your lab actually fits into
Track samples, reagents and freezer boxes without paying per seat, waiting on a vendor, or bending your science to fit someone else's database.
No signup โ sign in with demo@biolims.dev / biolims-demo
Most labs are stuck between two bad options
๐ The spreadsheet everyone fears
It works right up until someone asks "where is that sample now?" or "which aliquots came from patient 014?" โ and nobody can answer without walking to a freezer and phoning a colleague.
๐ข The platform that took a quarter
It answers those questions, but it charges per seat, keeps your data on someone else's terms, and models your science the way its vendor imagined it. Adding a field can mean a support ticket.
BioLIMS is the third option โ real sample tracking, and you own all of it.
Built around how labs actually work
Three things that make this different from everything else you'll evaluate.
You define what you track
Cell lines with passage numbers. Mouse colonies with cage IDs. Plasmids with backbone and resistance marker. Build the record type in your browser, pick your fields, done โ no schema migration, no developer, no ticket.
Your data, your server
MIT licensed. Run it on a spare machine in the lab or a cloud account you control. Add your whole team without watching a licence counter. Export everything whenever you want โ it's your data, in your Postgres database.
Running the same afternoon
There is no implementation project and no sales call. Sign up, name your lab, and starter record types and a freezer tree are already there. Most labs register real samples on day one.
Everything you need to stop losing samples
๐ Find any sample, down to the well
Model your real storage โ site, room, freezer, shelf, rack, box. Place samples in specific positions and open a box to see exactly what's in it and what's free.
No more opening three freezers to find one tube.
- Unlimited nesting depth
- Visual grid for any box size
- Full storage path on every record

๐งช Design your own record types
Add fields of any type โ text, number, date, dropdown, multi-select, checkbox โ set units, mark them required, and reorder them. Each type gets its own ID series so a sample reads SMP-000142 and a reagent RGT-000007.
- No code and no migration
- Validated on every write, including imports
- Starter types included, change them freely

๐ Answer "who changed this?" instantly
Every create, edit, move and delete is written to an append-only log with the person, the timestamp and exactly what changed โ viewable per record or across the whole lab.
- Immutable history, never overwritten
- Before-and-after values on every edit
- Per-record timeline on the detail page

Sample lineage
Aliquots and extractions stay linked to what they came from. Open a gDNA prep and see the blood draw it started as โ or open the draw and see everything derived from it.
Inventory & low stock
Track quantities, lots and expiry dates. Set a minimum and low-stock reagents surface on the dashboard before an experiment stops.
Bring your spreadsheet
Import a CSV and BioLIMS matches your columns to your fields, validating as it goes and telling you exactly which rows need attention. Export any registry back out.
How it stacks up
An honest look at the trade-offs, including where the others still win.
| Spreadsheet | Commercial LIMS | BioLIMS | |
|---|---|---|---|
| Cost per extra user | Free | Per-seat licence | Free |
| Time to get running | Minutes | Weeks to months | An afternoon |
| Add a custom field | Add a column | Often a support ticket | In the browser |
| Where samples live | A text column | Modelled properly | Freezer โ box โ well |
| Change history | None | Full audit trail | Full audit trail |
| Sample lineage | Manual | Yes | Yes |
| Who hosts your data | You | The vendor | You |
| API access | None | Usually a paid tier | Included |
| Validation & compliance support | None | Mature offering | Not yet โ see roadmap |
Everything the interface does, the API does too
Register samples from a notebook, look up storage, or pull a dataset for analysis. Per-lab API keys, an OpenAPI spec, and validation errors reported field by field so scripted imports tell you exactly what to fix.
- REST API over records, types and locations
- Query by display ID โ SMP-000142 works directly
- Self-host with Docker in two commands
# Register a sample straight from your analysis script import requests requests.post( "https://your-lab.example.com/api/v1/entities", headers={"Authorization": f"Bearer {BIOLIMS_KEY}"}, json={ "type": "sample", "name": "PT-014 gDNA", "data": { "sample_type": "DNA", "concentration": 88.4, }, }, )
Where the project is today
v0.1 โ the sample-tracking core is complete and working. It's young software: expect rough edges, and please report them.
Sample & inventory tracking
Custom record types, storage, lineage, audit trail, CSV, REST API.
Electronic lab notebook
Experiment write-ups linked to the samples they used.
Workflow automation
Multi-step protocols with task assignment and sample state.
Instrument integrations
Turn plate reader, qPCR and sequencer output into structured records.
Barcode & label printing
Scan a tube to pull it up; print freezer labels.
Electronic signatures
Reviewed-and-approved sign-off on records.
See it with your own samples
Click through the demo in two minutes, or have it running on your own machine in about the same time. If something doesn't match how your lab works, that's worth an issue.
The demo is a shared public sandbox โ expect other people's edits, and don't put anything real in it.