Fieldia

Forms and app screens, written once as JSON

Describe a page — its fields, its layout, when a field shows or is required — and Fieldia draws it in plain JavaScript, React, Vue or Angular, checks what people enter, and hands the record to your backend.

Get started See the demos

One page, every framework

The page is plain JSON: you can store it, generate it from your backend's own field definitions, or build it in a designer. The same page renders the same way everywhere, because every framework binding is a thin shell around one plain-DOM viewer.

<!-- No build step: one script tag -->
<script src="https://cdn.jsdelivr.net/npm/@fieldia/viewer/bundle/fieldia.js"></script>
<script>
  Fieldia.mountViewer(document.getElementById('app'), {
    page, dataSource: Fieldia.createMemoryDataSource(),
  });
</script>
// React, Vue and Angular: the same page, the same look
import { FieldiaForm } from '@fieldia/react';

<FieldiaForm page={page} dataSource={api} recordId={42} />

What a page can do

Four rules

  1. The core never touches the DOM. Page format, conditions, validation and record state run in a browser, in Node, or on the server that generates pages.
  2. Fieldia knows no backend. Pages arrive as JSON; records travel through an interface your app implements.
  3. Render once, bind thinly. Fields render in plain DOM, once. A framework binding adds nothing a framework would not need.
  4. A page is data. No functions or components inside a page: buttons name actions, and your app decides what they do.