Change the form without chasing old code
The same fields and rules are used in the form, on the server, and in every response.
Headless form builder for React
Render with your own UI. Fillo keeps schema, validation, uploads, responses, and delivery connected behind it.
"use client";
import { Fillo, createClient } from "@usefillo/react";
import "@usefillo/react/styles.css";
const fillo = createClient({ key: process.env.NEXT_PUBLIC_FILLO_KEY! });
export function FeedbackForm() {
return (
<Fillo.Form client={fillo} id="product-feedback" title="Product feedback">
<Fillo.Rating id="score" label="How is it going?" max={5} />
<Fillo.LongText id="note" label="What should we fix?" />
</Fillo.Form>
);
}Keep control of the form people see. Fillo takes care of the work behind it.
The same fields and rules are used in the form, on the server, and in every response.
Files go from the browser to storage you connect, while the answer and file stay together in Fillo.
Open an answer with its files and app context, then export it or send it to the tools your team uses.
Start with Fillo's form components or replace them with your own. The response backend stays the same.
After someone submits
The answer, account details, and uploaded file arrive together. Review it in Fillo, then export it or send it to the tools your team uses.
@usefillo/dom renders the same forms with framework-agnostic DOM. Call renderForm() from Vue, Svelte, or Astro, register a <fillo-form> custom element, or load the standalone bundle on a page with no build step. Same schema, same validation, and the responses land in the same Fillo workspace.
No. The React and DOM SDKs render the form directly inside your app. Fillo also offers hosted forms when you only need a link.
Both. Developers install the React or DOM form SDK to render native controls, while the visual editor lets teammates update builder-managed forms without replacing the embed.
Yes. You can restyle the default form, replace individual fields, or build the whole form with your own components.
Yes. @usefillo/dom renders the same forms with framework-agnostic DOM: call renderForm() from Vue, Svelte, or Astro, register a <fillo-form> custom element, or load the standalone bundle on a page with no build step.
Either. Build it in the Fillo editor when teammates need to update it, or keep it in your repo when form changes should go through code review.
Connect Google Drive, Box, Amazon S3, or Cloudflare R2 and uploads go there from the browser. Fillo keeps each file attached to the right response.
Then a hosted form tool may be simpler. Fillo is most useful when the form lives inside your product and needs your UI, user context, uploads, or a shared response inbox.
Yes. The default renderer, custom fields, and fully headless composition are available on every plan. The default renderer includes a small Powered by Fillo badge on the Free plan (paid plans can turn it off); a fully headless layout uses your UI and has no Fillo layout or badge.