LabelForge

Annotation workflow infrastructure

Raw records in.
Reviewed evidence out.

LabelForge is a collaborative workbench for text and structured data. Import a file, pin an immutable schema, assign real work, resolve disagreement, and publish a dataset with a manifest you can verify.

Open sourcePostgreSQLNo model provider required

01CSV and JSONL import
02Server-enforced assignment
03Revision-checked autosave
04Schema-pinned answers
05Checksummed releases

The workflow

An auditable path from file to release

Every step is stored, scoped to a workspace, and visible in the audit trail. There is no hidden AI step and no fabricated productivity score.

  1. 01

    Import and validate

    Parse real bytes, preview row errors, quarantine duplicates, and commit only when the result is explicit.

  2. 02

    Pin a schema

    Publish an immutable annotation schema. Tasks keep the version they started with.

  3. 03

    Assign and annotate

    Managers assign eligible annotators. Drafts autosave with an expected revision.

  4. 04

    Review or adjudicate

    Accept, return, reject, or send a disagreement to a reasoned final answer.

  5. 05

    Release with proof

    Freeze accepted or adjudicated work into a versioned export with SHA-256 checksums.

Built for the awkward parts

The form is easy. The record integrity is not.

LabelForge treats concurrency, schema drift, and disagreement as first-class product states instead of edge cases.

01 / record

Optimistic concurrency

Every draft write carries an expected revision. A stale editor gets a conflict, never a silent overwrite.

02 / record

Immutable schema versions

Answers are interpreted under the schema pinned to the task. New schemas apply only through explicit, audited actions.

03 / record

Honest agreement measures

Cohen's kappa, average Jaccard, and span overlap are shown with sample size, numerator, denominator, and limitations.

04 / record

Reproducible releases

A release is a stored snapshot. The manifest records the policy, counts, schema, and checksums used to verify it.

Stated limits

Small enough to verify. Explicit by design.

The first release is deliberately constrained. Limits are enforced on the server and explained before upload, not hidden behind a truncated file.

Upload per file4 MB
Rows per import10,000
Records per project25,000
Preview staging lifetime1 hour
Import formatsCSV / JSONL
External model callsNone

Vercel Functions cap request bodies at 4.5 MB. LabelForge sets a 4 MB application limit to leave room for multipart overhead. Host limits can change; the app states the limit it enforces.

Start with real workflow

Open the demo, follow one record, publish one release.

The seeded workspace contains synthetic product reviews and support records, multiple roles, drafts, a correction, a disagreement, and a completed release.