Design · Route · Enforce
FormWorkbench is the engineering platform for document-driven processes. Define multi-party documents in code. Compose them into processes. Close the loop automatically.
Strip away the software. Every process is a human filling out a structured document, routing it to the next person, and waiting for them to fill out theirs.
I-9 → W-4 → Direct Deposit → Handbook. Four documents, three parties, one deadline.
A form with an expiration date and a rule that fires when it lapses.
A form with a signature field and a section that depends on the previous.
Historical document instances queried over time. "Show me every W-4 filed in Q1."
A form builder that doesn't understand process. A process tool that doesn't understand documents. An approval system. A compliance tracker. A document manager. They're all the same thing.
| What you have today | What it actually is |
|---|---|
| Google Forms / Typeform | Form without process |
| Zapier / Power Automate | Process without documents |
| DocuSign / Adobe Sign | Form with one field (signature) |
| JIRA / ServiceNow | Task tracker without form context |
| Compliance spreadsheet | Rules without enforcement |
FormWorkbench unifies all five. One primitive. One DSL. One runtime.
Define documents, compose processes, and enforce rules from the canonical Lisp source the runtime actually deploys.
Define multi-section documents with assignees, conditional fields, and section sequencing. Each section depends on the previous — the employer can't review until the employee submits.
Document builders generate HTML. FormWorkbench engineers processes.
Multi-party documents in canonical Lisp. Sections, assignees, conditional fields, signatures, and locales.
Chain documents into DAG processes with parallel branches, wait nodes, and guards.
Assign sections by role. Set deadlines. Send magic links to external parties.
Query submissions with Datalog. Time travel to any point. Audit trails built in.
Node.js or Cloudflare. SQLite storage. Multi-tenant by default.
Document is the center. Everything else orbits it.
Entity
Long-lived identity across systems
Fact
Immutable, timestamped assertion
Rule
Declarative Datalog constraint
Violation
First-class, queryable divergence
Task
Auto-routed remediation work
Action
Parameterized state mutation
[entity, attribute, value]
Append-only. Time travel. Schema-flexible.
find → where → compile → SQL
Pattern matching. Recursive CTEs. Compiles to SQL.
yield* Effect.gen()
Type-safe async. Composable layers. Dependency injection.
If you manage compliance, run operations, or build the platform underneath.
Regulatory documents, deadlines, multi-party signatures, audit trails. Define rules that fire when certifications lapse. Query every submission historically.
Onboarding flows, recurring certifications, approval routing. Compose multi-form processes with parallel branches and deadline enforcement.
Multi-tenancy, auth, time travel, query engine, deploy targets. SQLite storage, Cloudflare or Node.js, Effect-TS throughout.
Your processes are too important for drag-and-drop.
(form "I-9 Employment Eligibility" (:page (page (:section-id "employee-information") (:assignee employee) (:field (field text :i9.legal_name (:label "Legal Name") (:required true))) (:field (field date :i9.start_date (:label "Start Date") (:required true))) (:field (field boolean :i9.employee_signature (:label "Employee Signature") (:required true))))) (:page (page (:section-id "employer-review") (:assignee employer) (:depends-on "employee-information") (:field (field select :i9.document_type (:label "Document Type") (:option (option "passport" "Passport")) (:option (option "receipt" "Receipt")))) (:field (field boolean :i9.employer_signature (:label "Employer Signature") (:required true)))))(form "I-9 Employment Eligibility" (:page (page (:section-id "employee-information") (:assignee employee) (:field (field text :i9.legal_name (:label "Legal Name") (:required true))) (:field (field text :i9.other_last_names (:label "Other Last Names Used"))) (:field (field date :i9.date_of_birth (:label "Date of Birth") (:required true))) (:field (field select :i9.citizenship_status (:label "Citizenship Status") (:required true) (:option (option "citizen" "U.S. Citizen")) (:option (option "permanent_resident" "Permanent Resident")) (:option (option "authorized_alien" "Authorized Alien")))) (:field (field boolean :i9.employee_signature (:label "Employee Signature") (:required true))))) (:page (page (:section-id "employer-review") (:assignee employer) (:depends-on "employee-information") (:field (field text :i9.document_number (:label "Document Number") (:required true))) (:field (field date :i9.expiration_date (:label "Expiration Date"))) (:field (field boolean :i9.employer_signature (:label "Employer Signature") (:required true)))))