puck is a free, open source automation project written in TypeScript and released under MIT. It has 13,332 GitHub stars, 973 forks and 200 open issues, and was last pushed 16 hours ago. On this registry it ranks #15 of 54 tracked projects in Automation, with 5 head-to-head comparisons available. It gained 12 stars over the last 3 tracked days.

What is puck?

Puck is a modular, open-source visual editor for React.js that lets teams assemble their own drag-and-drop editing experiences from their existing React components, and it is aimed at developers building internal systems or commercial products who want to own both the editor and the data behind it.

What it is

Puck is an open-source visual editor written in TypeScript and distributed under the MIT licence. It lives in the React.js ecosystem and is itself a React component, so it renders inside an existing application rather than acting as a standalone hosted service. A developer describes the available building blocks in a config object, mounts the Puck component to expose the editing surface, and later mounts the Render component from the same @puckeditor/core package to display what was saved. The repository carries topics including drag-and-drop, page-builder, no-code, and visual-editor, which describe the category it belongs to rather than a separate product surface.

The concrete problem it solves is the editing interface that a team would otherwise have to write from scratch. Anyone who wants content editors, marketers, or internal operators to arrange pages and sections without touching code normally faces a choice between hand-building a bespoke drag-and-drop layer inside their own codebase or adopting a third-party hosted page builder whose components, storage, and rendering pipeline sit outside the application. Puck replaces that bespoke drag-and-drop layer with a configurable component, while keeping the component definitions, the saved data, and the rendering inside the host application, so the same React components serve both the editor and the rendered page.

Key capabilities

  • Exposes a Puck component from @puckeditor/core that renders the editing surface directly inside a React application.
  • Exposes a matching Render component from the same package, so the editor and the published page share one component definition.
  • Takes a config object built from components, where each entry declares its own fields and render function; the README example uses a HeadingBlock with a children field of type: "text".
  • Accepts an initialData value and a save callback, described in the README as the point where data is written to a database.
  • Supports every React.js environment, including Next.js, because the editor is a React component rather than a framework-specific runtime.
  • Ships scaffolding through npx create-puck-app my-app, with recipes for next (App Router and static page generation) and react-router (React Router v7 with dynamic routes for creating pages at any level).
  • Maintains an awesome-puck community repository for plugins and custom fields, alongside a Discord server for discussion.

Who uses it and how

  • Teams building internal systems use Puck to give non-developer colleagues a controlled editing surface over components that already exist in the codebase, which the MIT licence permits without commercial restriction.
  • Product teams shipping commercial applications use the same setup, since the MIT licence covers commercial use and no vendor relationship is required.
  • Next.js projects adopt the next recipe to combine the editor with App Router routing and static page generation.
  • React Router v7 projects adopt the react-router recipe, using dynamic routes to create pages at any level of the site.
  • Teams needing additional fields or integrations draw on the awesome-puck community repository, and can escalate to hands-on support or consultancy through the discovery call link in the README.

Getting started

Install the package with npm i @puckeditor/core --save, or scaffold a pre-configured project with npx create-puck-app my-app. Full documentation lives at puckeditor.com, with a live demo at demo.puckeditor.com.

How it compares

No alternative products are listed in the facts for this registry, and no comparable tools are named there either, so Puck stands alone in this registry rather than being contrasted with a named set of paid equivalents. What can be stated is that it is MIT licensed, that it runs inside the adopter's own React application, and that the README describes the arrangement as one where the adopter owns the data with no vendor lock-in.

When to use it — and when not to

Puck is a component, not a service: it ships no database, no storage layer, no authentication, and no managed hosting, so a self-hoster must supply persistence and wire the save callback to their own database, plus load that data into initialData for rendering. Anyone without an existing React codebase, or anyone who wants a ready-made hosted CMS rather than an editor embedded in their own application, should look elsewhere. The repository currently carries 200 open issues, and the README excerpt leaves the Puck and Render usage examples truncated, so prospective adopters should read the full documentation at puckeditor.com before committing.

project readme (upstream, from github) — read inline




The visual editor for React

DocumentationDemoDiscordContributing

⭐️ Enjoying Puck? Please leave a star!


GIF showing a page being created in the Puck Editor, with components being added, arranged, and customized in real time

What is Puck?

Puck is a modular, open-source visual editor for React.js. You can use Puck to build custom drag-and-drop experiences with your own application and React components.

Because Puck is just a React component, it plays well with all React.js environments, including Next.js. You own your data and there’s no vendor lock-in.

Puck is also licensed under MIT, making it suitable for both internal systems and commercial applications.

Quick start

Install the package:

npm i @puckeditor/core --save # or npx create-puck-app my-app

Render the editor:

// Editor.jsx
import { Puck } from "@puckeditor/core";

// Create Puck component config
const config = {
  components: {
    HeadingBlock: {
      fields: {
        children: {
          type: "text",
        },
      },
      render: ({ children }) => {
        return <h1>{children}</h1>;
      },
    },
  },
};

// Describe the initial data
const initialData = {};

// Save the data to your database
const save = (data) => {};

// Render Puck editor
export function Editor() {
  return <Puck config={config} data={initialData} onPublish={save} />;
}

Render the page:

// Page.jsx
import { Render } from "@puckeditor/core";

export function Page() {
  return <Render config={config} data={data} />;
}

Recipes

Use create-puck-app to quickly spin up a a pre-configured app based on our provided recipes:

npx create-puck-app my-app

Available recipes include:

  • next: Next.js example, using App Router and static page generation
  • react-router: React Router v7 app example, using dynamic routes to create pages at any level

Community

Get support

If you have any questions about Puck, please open a GitHub issue or join us on Discord.

Or book a discovery call for hands-on support and consultancy.

License

MIT © The Puck Contributors

Frequently asked questions

Is puck free to use?

puck is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does puck do?

The visual editor for React.

What is puck written in?

puck is primarily written in TypeScript. Its source is publicly available at https://github.com/puckeditor/puck, and it has 13,332 GitHub stars.