Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk5 min

Why I Built a Fully MIT, Notion-Style Block Editor for React

Bùi Đức Nhật explains why he built slash-editor, how its core, React hooks, and copied UI fit together, and which product requirements teams should verify before adopting it.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

I built slash-editor because the hard part of adding a Notion-like editor to my React products was not the editing engine. It was the block experience around it: slash commands, drag handles, nested reordering, and the controls that make editing feel natural with both keyboard and mouse. I wanted those interactions, customizable shadcn-style UI, and an MIT-licensed foundation to fit together without depending on a hosted service.

Why I wanted another Notion-like editor

In my experience building products, the editor engine was not the main obstacle. The challenge was delivering the interactions people expect from a block editor: inserting content from a slash menu, finding a block’s drag handle, moving nested content, changing a block’s type, and attaching comments to blocks.

As an Amazon Associate I earn from qualifying purchases.

I found tradeoffs in the options I considered. Some approaches meant using styled npm components that did not fit the application’s design system; others meant choosing a different editor engine, or relying on features such as templates, AI, or comments that were offered commercially. That is my experience and motivation, not an exhaustive comparison of editors or a claim that all alternatives have the same limitations.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

I wanted three things at once: keyboard-first editing with mouse equivalents, UI that could use existing shadcn tokens and dark mode, and an MIT dependency graph. I also wanted developers to bring their own services for sync, AI, and uploads rather than require a hosted backend.

What slash-editor is designed to provide

Slash-editor is a Notion-style block editor for React. Its project describes a headless core built on Tiptap and ProseMirror, React hooks for integration, and UI components distributed through a shadcn registry. Registry components are copied into the application, where its developers can change the code rather than treating the UI as a fixed hosted product.

The project describes its dependency graph as MIT-licensed and says there is no paid tier or hosted dependency. Those are project statements, not an independent audit of every dependency or confirmation of current package metadata. The project documentation also describes the division into a headless core, React bindings, and separately installable UI components: slash-editor documentation.

How the architecture separates editing from UI

Core: document model and commands

@slash-editor/core contains the Tiptap and ProseMirror extensions, schema, and commands. It has no React or CSS dependency, so document behavior is kept separate from rendering.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

React bindings: lifecycle and state

@slash-editor/react builds on @tiptap/react. The author describes its role as handling editor lifecycle, subscriptions to state, and caret-anchor geometry through hooks.

Registry UI: application-owned components

The shadcn registry supplies rendered UI that developers copy into their own applications. The core exposes UI state machines through subscribe and getState; React hooks turn those into component state and anchor positions, while registry components render controls using primitives such as Popover and Command. This split is intended to make it possible to modify the presentation without rewriting the editor’s underlying behavior.

Why block interactions need more than a caret

Finding drag targets

A pointer in the gutter or block padding may not correspond to a text caret. For drag handles, I resolve hover and drop targets from cached block rectangles instead of relying only on caret position. The move is performed as a single delete-and-insert transaction, which makes it one undo step and carries the block ID.

Nesting within the document schema

For nested placement, I check what the document schema permits rather than wrapping everything in a universal block container. The goal is to preserve ordinary Tiptap JSON that can work with extensions and Markdown serialization, rather than impose a custom outer structure on every block.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Stable IDs and collaboration

Block IDs are assigned when content is inserted, not when it is rendered. When pasted content would duplicate IDs, those IDs are regenerated; remote y-sync transactions are skipped. I designed that behavior to support combinations such as Yjs collaboration, block-anchored comments, and Mermaid diagrams. These are implementation claims, not independent compatibility-test results.

What the version 0.5 feature snapshot includes

The article’s version 0.5 snapshot describes the following capabilities. It is a snapshot, not confirmation of what a later or current release supports.

  • Block creation and organization: a slash menu with ranking, aliases, groups, and custom items; drag handles; and block menus.
  • Content blocks: headings, lists, task lists, toggles, callouts, quotes, columns, and tables.
  • Media and embeds: image, video, file, and embed blocks using an upload adapter.
  • Extensions and collaboration: mentions, adapter-based AI actions, real-time collaboration with Yjs, Hocuspocus, or WebRTC, presence avatars, comments, and Mermaid diagrams.
  • Reading and portability: table of contents, read-only documents, Markdown import and export, and Markdown shortcuts.
  • Developer resources: documentation files intended for coding agents.

The article also lists what the project does not aim to provide: a hosted sync server, AI gateway, or asset storage; DOCX or PDF fidelity, pagination, or track changes; and support for frameworks other than React at the time described. The core is renderer-free, but that does not by itself establish support for other framework bindings.

What I leave to adapters and application teams

Sync infrastructure and asset storage are not hosted by the project; the intended approach is to connect them through adapters. AI actions are also adapter-based. That gives teams room to use their own services, but means they are responsible for selecting, operating, and securing those services. A project that avoids a hosted dependency does not eliminate the operational work of providing sync, AI, or uploads.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The same separation applies to the UI: copying registry code gives an application control over its components, but also makes those components part of the application’s code to maintain. This is a tradeoff between control and convenience, not a promise that customization or maintenance is cost-free.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to decide whether this foundation fits

Before adopting any editor foundation, map its design to the product’s actual requirements. For slash-editor, the questions I would start with are:

  • Interaction model: Does the product need slash insertion, keyboard-first block editing, mouse-based drag handles, nesting, and block-level actions?
  • UI ownership: Is copying and modifying UI code in the application preferable to consuming a fixed component package?
  • Licensing: Do the project’s license statements and the licenses of the exact dependencies in the version you plan to use meet your requirements? Verify the current package and dependency metadata rather than relying only on a general project claim.
  • Infrastructure: Can the team supply and operate sync, AI, and asset services through adapters?
  • Framework and formats: Is React support sufficient, and do you need DOCX or PDF fidelity, pagination, or tracked changes that fall outside the stated scope?
  • Evidence: Are the available implementation details enough for your use case, or do you require independent performance, accessibility, security, or production-case evidence?

The reviewed article and documentation introduction do not report independent adoption figures, benchmarks, audits, production case studies, or comparative evaluations. They explain the project’s approach and intended scope; they do not establish that it is faster, safer, or better suited to every application than another editor.

Trying it and giving feedback

The author invites developers to try the playground, open it in two tabs with a collaboration-room parameter, inspect the starter, and comment on the API shape before 1.0. These are invitations from the project author, not independent verification of the playground or current release. The article displays a September 30 posting date without a year, and the documentation introduction does not identify a current release version. As the author puts it: “Feedback on the API shape is the most valuable thing right now, before 1.0 locks it in.”

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.