FAQ
Is Blok production-ready?
Blok is pre-1.0 but used in production by early adopters. The API is stable at the shape level (props, types, hooks), but minor breaking changes may still happen before 1.0. Pin your versions and check the changelog before upgrading.
How is Blok different from Puck?
Blok’s data model is Puck-compatible by design. On top of Puck’s drag-and-drop + forms, Blok ships:
- Plugins — first-class plugin API for blocks, fields, and panels.
- Collaboration — comments, versions, audit, presence as bindings.
- Permissions — editor / reviewer / viewer roles.
- Publish gates — SEO, comment, and custom gates blocking publish.
- AI authoring — field-level and block-level AI actions.
- Migrations — schema evolution for block props.
If you’re on Puck today, your data can be loaded into Blok with minor component-name mapping.
Does Blok work with Next.js App Router?
Yes. <Blok /> is a client component — mark your page with "use client"
or wrap Blok in a client boundary. Server components can still import
Blok without adopting client rendering themselves.
Does Blok work without Next.js?
Yes. Blok is pure React — it works in Vite, CRA, Remix, Astro’s client-only islands, or anything else that runs React 18+.
How do I persist data?
Blok doesn’t persist anything by itself. Use the onSave and onPublish
callbacks to send the document to your backend, or use
@useblok/sdk’s useBlokDocument hook with a BlokStorageAdapter.
Can two users edit the same document at the same time?
Presence works out of the box (avatars, peer focus). Conflict-free co-editing (Yjs / Automerge) isn’t built in — you’d wire a CRDT through the store yourself. Today, treat concurrent edits as “last save wins” unless you’ve added CRDT transport.
How do I render the saved JSON on a published page?
Your published pages should use the same component renderers as the editor. Split renderers into a shared folder and import from both the editor page and the preview/production page. See Project setup.
Does the bundle include all the collaboration features?
The collaboration features (versions, comments, audit, presence) are
tree-shakeable — if you don’t pass the corresponding binding to
<Blok>, the UI for that feature isn’t rendered. You pay the cost in
bytes either way (Blok is one package), but nothing runs at runtime.
Is there a server-rendering story for the editor?
<Blok> itself is interactive and runs client-side. Published pages
(rendered from Data + component configs) render wherever your app
renders — server, static, edge, all fine.
How big is it?
The core package is ~120 KB gzipped with all features on. Strip plugins and feature providers (versions, comments, audit, presence) by not passing them, and the runtime work shrinks accordingly.
Can I translate the UI?
Not yet. i18n is on the roadmap. For now, every UI string is in English.
Where can I ask questions?
Reach out to the Blok team through the support channel shared with your team — we’ll help with bugs, feature requests, and general questions.