Concepts

How your data travels.

From the moment a participant submits a response to the moment you download it for analysis — every step is encrypted and auditable.

Session → Transit → Storage → Export

Session01

Participant completes study

Responses are collected trial by trial in the browser. On completion, one JSON record is assembled.

participant session

Browser runtime
Transit02

Encrypted in transit

The record travels over TLS. No plaintext leaves the participant's device.

encrypted in transit

📱
🔒

TLS · end-to-end

TLS encrypted
Storage03

Encrypted at rest

Records are AES-256 encrypted before writing to the database. Your key, your data.

encrypted at rest

{
🔒
{
🔒
{
🔒
AES-256
Export04

Download & analyse

Export the full dataset as CSV or JSON whenever you're ready. No lock-in.

export formats

CSVspreadsheet
JSONprogrammatic
CSV · JSON
Incremental vs full

lab.js sends partial (incremental) data to the server after each ~3-second pause in activity, and sends the complete dataset when the experiment ends. Only incremental saves that have a matching complete dataset are automatically removed — if the experiment never ends, you keep only the incremental data and may lose the final part of the session.

Encryption layers

TLS — in transit
AES-256 — at rest
Your key — account-scoped
End properly

Make sure your experiment ends.

Add a defined duration or a final screen that signals completion. In the lab.js builder preview, a download button slides in when the experiment ends — in Open Lab, participants are automatically redirected instead.

  • Builder preview: download button appears at experiment end
  • Open Lab: end event triggers redirect to the next study component
  • Without a proper end, only incremental data is saved — the last part of the session may be lost
Incremental vs full

Two kinds of saved data.

During a session, lab.js periodically sends partial uploads after ~3 seconds of user inactivity. At the end, it sends one complete dataset that covers the whole session.

  • Incremental datasets appear during the session as partial snapshots
  • The final dataset is complete and supersedes all incremental saves
  • If the experiment never reaches its end, only incremental data is kept
Dataset size

Keep your dataset lean.

By default, lab.js stores every variable and parameter. Prefix non-essential parameters with an underscore to exclude them from the stored dataset.

  • Variables like _instructionsText are excluded automatically
  • Useful for long instruction texts that repeat on every row
  • Underscore prefix works on any variable name in the builder