@usefillo/core
The framework-agnostic core of Fillo — forms that render inside your own product, with your UI, no iframe.
This package holds the shared foundation: the form schema, validation, the conditional-logic engine, response prefill/piping, and a JS client with a resumable upload protocol. It has zero framework dependencies.
Most apps don't install this directly — you install a renderer (@usefillo/react or @usefillo/dom), which re-exports everything here you need for embedding. Reach for @usefillo/core when you're building your own renderer or working with forms on the server.
npm i @usefillo/core
import { createClient, defineForm, validateResponse, visibleBlocks } from "@usefillo/core";
const client = createClient({ key: "pk_live_…" });
const form = defineForm({
id: "cust-feedback",
pages: [{ id: "p1", blocks: [
{ id: "email", kind: "email", label: "Work email", required: true },
{ id: "msg", kind: "long_text", label: "What should we know?" },
] }],
});
Published renderer embeds can fetch by formId without a key. Use a client object for custom API origins, uploads, or submissions from your own renderer; add a publishable key only when syncing defineForm() schemas from code.
Schema settings include submitMode: "auto" for one-tap forms that should submit after a complete discrete answer instead of rendering the first submit button, and submissionLimit: "once_per_visitor" for browser-scoped duplicate prevention. Themes include colorScheme: "light" | "dark" | "auto" for renderer defaults.
Key exports: createClient / FilloClient, defineForm, validateResponse, validateField, visibleBlocks, and the schema types (FormSchema, Field, FieldKind, FormTheme, ResponseData, …).
Links
MIT licensed.
0.6.0 surface
Framework-neutral pieces the renderers share: defineForm / schemaFromJsx
(the JSX compiler), when() condition builder, the FilloAppearance styling
contract (slots + data-attribute names), FilloStrings localization defaults,
and createClient({ baseUrl }) for staging/self-hosted targets.