2 min read

Rune is now open source

The block editor that powers Zyler is public on npm under MPL-2.0 — a framework-agnostic engine any React app can drop in.

Overview

Rune is the editor engine we built for Zyler: a Notion-style block editor with drag handles, a slash menu, tables, multi-column layouts, wiki-style [[links]], and inline formatting. It's now open source on public npm under the MPL-2.0 license — the same editor that ships inside our own product, free for anyone to build on.

Two packages, one direction

Rune is published as two layers with a strict, one-way dependency (react → core), so you pick the layer that fits your stack:

PackageWhat it is
@ocai/rune-coreHeadless — the ProseMirror/Tiptap schema and extensions. No React, no DOM, no CSS. Runs in SSR, Workers, or a CLI.
@ocai/rune-reactThe default UI — hooks, components, Tailwind + Radix. Drop in <RuneEditor /> and go.

Most apps only need the React package:

pnpm add @ocai/rune-react
import { RuneEditor } from "@ocai/rune-react";
import "@ocai/rune-react/style.css";

export function Editor() {
  return <RuneEditor />;
}

What makes it different

Rune sits between "Tiptap is too low-level" and "BlockNote locks you into one model." Its schema is deliberately flat — blocks are top-level siblings with a depth attribute rather than nested container nodes — and it hands you the native Tiptap Editor, not a wrapper class. Drag handles, side menus, and drop indicators are all ProseMirror decorations, so there are no JS-positioned overlays to fight with.

Editors are infrastructure. We'd rather share the engine and compete on the product built with it.

The road ahead

The public core stays open under MPL-2.0 as a developer-facing foundation and the engine behind Zyler. Browse the source and the live demo on GitHub, or see it in a finished product on the Rune page.

Keep reading

View All