Skip to main content

Headless form builder for React

Forms that belong in your product.

Render with your own UI. Fillo keeps schema, validation, uploads, responses, and delivery connected behind it.

FeedbackForm.tsx
"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>
  );
}

Product feedback

Powered by Fillo

Your form in front. Fillo behind it.

Keep control of the form people see. Fillo takes care of the work behind it.

Change the form without chasing old code

The same fields and rules are used in the form, on the server, and in every response.

Send uploads to your storage

Files go from the browser to storage you connect, while the answer and file stay together in Fillo.

See every response in one place

Open an answer with its files and app context, then export it or send it to the tools your team uses.

Use the UI your product already has

Start with Fillo's form components or replace them with your own. The response backend stays the same.

After someone submits

See the whole response in one place.

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.

A complete response

The file stays with the answer.

Your other tools get it too.

Not a React app?

@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.

See the embed methods

Headless form builder questions

Does Fillo use an iframe?

No. The React and DOM SDKs render the form directly inside your app. Fillo also offers hosted forms when you only need a link.

Is Fillo a form SDK or a form builder?

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.

Can we use our own components?

Yes. You can restyle the default form, replace individual fields, or build the whole form with your own components.

Does it work outside React?

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.

Do we build the form in the dashboard or in code?

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.

Where do uploaded files go?

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.

What if we only need a simple form link?

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.

Is headless embedding free?

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.

The next form does not need another backend project.