Forms that ask. Answers in ink.

The open-source, self-hosted alternative to Form.io. AI drafts your forms, and agents fill them in.

Developer copy — Read the docs
Server copy — validated Visa intake with passport upload and a signature
Agent copy — via MCP Visa intake with passport upload and a signature

What you preview is what the server enforces.

Validation, conditions and calculations run in one Rust engine. The builder runs it in the browser through WebAssembly; the server runs the same code when the submission arrives. There is no builder-only approximation to drift from the truth.

Browser copy

Server copy

Try it: a passport number of 6 to 9 letters and digits. This page imitates the rule in a few lines of script; in InkAsk both copies come from the one engine.

Start from whatever you already have.

Every entry point lands in the same builder, with the same undo history, so you can switch between them halfway.

  1. A sentence

    Tell the copilot what you need to collect. It drafts the form, shows the change as a diff, and applies it only when you say so.

    Describe a form
  2. A template

    Begin from a saved form or a starter layout, then change any field.

    Browse templates
  3. A document or PDF

    Upload the paper form your team uses today. InkAsk reads its fields and rebuilds it as a working form.

    Import a PDF
  4. A Form.io project

    Bring form JSON, templates and MongoDB submissions across. You keep your data, not Form.io's code or quirks.

    Read the import guide

Every form is also a tool for agents.

Publish a form and InkAsk's MCP server offers it as a tool. An agent fills it with the same fields, the same rules and the same error messages a person sees, and its submission lands beside theirs.

{
  "tool": "submit_visa_intake",
  "arguments": {
    "fullName": "Amira Haddad",
    "passportNumber": "X1234",
    "nationality": "JO"
  }
}
→ passportNumber: Passport number must be 6 to 9 letters and digits.

Example data. The error is the one the form above shows a person.

Put the builder inside your own product.

Embed the builder or the renderer with the npm package, the React and Vue wrappers, or the <ik-builder> web component. It takes your brand tokens and can hide InkAsk entirely.

import { createBuilder } from '@inkask/builder';

createBuilder(document.querySelector('#editor'), {
  form: await api.forms.get('visa-intake'),
  theme: 'tailwind',
  whiteLabel: true,
});

Choose the copy you keep.

  1. Community

    The whole platform under the AGPL. Run it on your own servers with Postgres.

    Self-host
  2. Cloud

    We run it for you: updates, backups and the AI features switched on. Free to start, within monthly limits.

    Start on Cloud
  3. Enterprise

    Commercial licence, white-label and support, sold through our partners.

    Find a partner

Sign here and publish your first form.