
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
@usefillo/react
Advanced tools
Headless React components for embedding Fillo forms natively in your product.
React components and hooks for embedding Fillo forms natively inside your product — rendered in your own DOM, with your styles, on your route. No iframe.
npm i @usefillo/react
react and react-dom (18 or 19) are peer dependencies.
"use client";
import { Fillo, when, createClient } from "@usefillo/react";
import "@usefillo/react/styles.css"; // optional default theme — or bring your own
const client = createClient({ key: process.env.NEXT_PUBLIC_FILLO_KEY });
export function ContactForm() {
return (
<Fillo.Form id="contact" title="Talk to us" client={client}>
<Fillo.Text id="name" label="Your name" required />
<Fillo.Email id="email" label="Work email" required />
<Fillo.Select id="topic" label="Topic" required>
<Fillo.Option id="sales" label="Sales" />
<Fillo.Option id="support" label="Support" />
</Fillo.Select>
<Fillo.LongText id="message" label="How can we help?"
visibleIf={when("topic").eq("support")} />
</Fillo.Form>
);
}
The first time this runs, the form appears in your Fillo workspace as a draft —
publish it there and responses, logic, exports, webhooks, and integrations all
work. Field ids are permanent (they key your responses); conditional questions
are visibleIf, never conditional JSX. The equivalent config style,
defineForm({ id, pages }), remains first-class — JSX compiles to it exactly.
import { FilloForm } from "@usefillo/react";
<FilloForm formId="cust-feedback" onSubmitted={(r) => confetti()} />
<Fillo.Form
id="contact"
client={client}
appearance={{
theme: { primary: "#4f46e5", radius: "12px" }, // also themes your hosted page
classNames: {
control: "rounded-xl border-zinc-200 data-[invalid]:border-red-400",
option: "rounded-lg border p-3 data-[selected]:border-indigo-600",
button: (s) => (s.variant === "primary" ? "bg-indigo-600 text-white" : ""),
},
fields: { nps: { control: "grid grid-cols-11 gap-1" } },
}}
>
Every rendered part carries a named slot (data-fillo) and state attributes
(data-invalid, data-selected, data-checked, …), and the default
stylesheet is cascade-layered so your utilities always win. On Tailwind v3 or
reset-heavy sites import @usefillo/react/styles.unlayered.css instead.
Localize every built-in string with the strings prop. Styling contract:
fillo.so/docs/styling.
Every part is replaceable — and every embed method is free:
components / customComponents — swap any field kind for your own<FilloProvider> + <FormField> / useField() — your layout, Fillo's engineuseFilloController() — the bare engine for total controlURL prefill works in embeds (?field=value, hidden-field paramName),
submissions retry safely, and failed submits show a visible, answer-preserving
error. This package re-exports the embedding surface from
@usefillo/core so a single
import is usually enough.
MIT licensed.
FAQs
Headless React components for embedding Fillo forms natively in your product.
The npm package @usefillo/react receives a total of 157 weekly downloads. As such, @usefillo/react popularity was classified as not popular.
We found that @usefillo/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.