Skip to main content

Changelog

Notable, shipped changes to Fillo. Newest first.

July 19, 2026

Calculated fields

SDK 0.11.0

A new calculated field computes a number from other answers — an order total from quantity and price, a sum across amounts — and updates live as the respondent types. The server recomputes it from the validated answers on submit, so a tampered value is ignored by construction. The computed value pipes into headings, drives visibility and page jumps, and lands in the grid, CSV, webhooks, and Google Sheets as a real number. Simple expressions build in the editor; deeper ones — nesting, conditionals, rounding — are written in code, and the editor says so instead of flattening them.

Number fields that read like values

SDK 0.11.0

Number fields gain display formatting: decimals, a prefix like $, a suffix like kg, and thousand separators in the SDK input. Formatting never changes what's stored — the respondent's exact number is kept — and an older embed simply renders a plain input instead of requiring an upgrade.

An input-quality pass across every field

SDK 0.11.0

The phone field now covers every calling country at about a kilobyte of data, and typing + to start an international number works. A failed submit shows one focused error summary linking to each field instead of a pile of simultaneous alerts, and submits, restores, and picks are announced to screen readers. Keyboard behavior, focus outlines, pointer targets, forced-colors, right-to-left, and dark mode tightened across every field kind, and the vanilla embed gains per-file upload progress, cancel, and retry.

Human check in the vanilla embed

SDK 0.11.0

The Cloudflare Turnstile human check now renders through @usefillo/dom too, so Vue, Svelte, Astro, and plain browser apps get the same challenge flow as the React SDK — and a challenge-gated form is submittable through every renderer.

July 16, 2026

A new docs and guides site

The docs are now a full site: reference pages for every part of Fillo, plus two dozen start-to-finish guides — contact forms, quizzes, NPS, Typeform and Google Forms migrations, and framework recipes for Next.js, React, Vue, Svelte, and Astro. Search is built in, every page has a Markdown twin, and llms.txt points coding agents at all of it in plain text.

Require a human check

SDK 0.9.0

Turn on a human-verification challenge (Cloudflare Turnstile) per form: the SDK renders the widget in your own DOM and Fillo verifies the result on the server. Fillo hosts the keys, so it's a toggle rather than a setup, and a form without the check loads zero third-party JavaScript.

Page jumps and early exit

SDK 0.9.0

A page can now carry jump rules that branch the flow: when a rule matches the answers so far, the form goes to another page — or straight to the end. Rules run top to bottom and the first match wins, and the renderer and the server share one engine for what's reachable, so a skipped page's required fields don't fail validation.

The Fillo MCP server

npx -y @usefillo/mcp gives a coding agent the full Fillo loop — provision a workspace, scaffold a form into the repo, publish it, and query responses — without leaving the session. It authenticates with the same credentials as the CLI.

July 14, 2026

Delivery activity and replay

Every form now has an Activity page: recent handoffs to its webhooks, integrations, and notification email, each marked delivered, retrying, or failed, with per-destination health. Failed deliveries replay with one click.

July 13, 2026

Accept only verified respondents

A form can require the verified identity your server signs with identify(). Submissions from anyone else are held in a new Quarantined view — kept out of webhooks, integrations, notifications, exports, and counts — until someone on your team releases them.

Workspace API keys and a management API

Mint scoped, revocable API keys and read your data server-to-server: list forms and versions, page through responses with the same filters as the grid, look up a respondent's history, or delete a response. Documented with an OpenAPI spec at /docs/api.

July 12, 2026

Localize every string

SDK 0.8.0

Every field, validation, and upload string in the renderer can now be overridden, so an embedded form speaks your product's language. Also in 0.8.0: conditional logic works across pages, and a failed upload offers Retry instead of counting against the file limit.

July 11, 2026

Insights, rebuilt

Insights are now cohort-driven, and each number drills down to the responses behind it. The daily digest that summarizes abandoned starts got the same pass.

July 9, 2026

Unified response limits

SDK 0.7.0

One setting decides who counts as the same responder and what happens when they return: limit repeats per browser, per contact field, or per signed-in person, optionally scoped by another field's answer. On a repeat, keep the first answer or let a verified person update it in place.

July 8, 2026

Google Sheets: stream into an existing sheet

Point a form at a sheet and tab you already own using the Google picker, instead of only creating a new spreadsheet.

July 7, 2026

Respondent layer

SDK 0.7.0

Forms that live inside your product can now recognize the signed-in user with identify() (optionally verified by your server), save and resume in-progress answers across reloads and devices, and recover drop-off with an in-progress view, resume links, and a daily digest.

July 3, 2026

Write forms as JSX, style them with Tailwind

SDK 0.6.0

Author a form as <Fillo.Form> components that compile to the exact schema defineForm() produces, and restyle every rendered part through the appearance prop and data-* state attributes — your utility classes win by cascade order, no CSS overrides.

June 19, 2026

Zapier integration

Send each new response to Zapier the moment it arrives — REST hooks, not polling — with per-form output fields, so mapping answers in a Zap doesn't mean guessing.