npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@bmin-mit/tiptap-slash-commands

v1.0.3

Published

A Tiptap headless UI extension for Reach that adds a slash command menu for your project. Inspired by [@harshtalks/slash-tiptap](https://www.npmjs.com/package/@harshtalks/slash-tiptap) and [Novel](https://novel.sh/)

Downloads

569

Readme

A Headless Slash Commands Menu for Tiptap in React

A Tiptap headless UI extension for Reach that adds a slash command menu for your project. Inspired by @harshtalks/slash-tiptap and Novel

It uses cmdk for the command menu implementation.

You can find an example implementation at TabNote Extension

Why do we need another implementation for the slash menu when Novel and harshtalks already did it?

When I was building TabNote, a Chrome extension that lets you take notes directly on your new tab page, I tried using both Novel and @harshtalks/slash-tiptap for the slash menu feature.

  • Novel’s implementation is tightly coupled to its own editor configuration, making it difficult to reuse in standalone projects.
  • @harshtalks/slash-tiptap bundles Tiptap directly in its dependencies, which can lead to version conflicts if your project uses a different or newer version of Tiptap.

To address these issues in my own side project, I created this library. It treats Tiptap as a peer dependency, avoids shipping any unnecessary editor code, and provides a lightweight, focused extension that you can integrate into any rich text editor setup.

Installation

npm install @bmin-mit/tiptap-slash-commands @tiptap/pm @tiptap/react @tiptap/suggestion
# or
yarn a @bmin-mit/tiptap-slash-commands @tiptap/pm @tiptap/react @tiptap/suggestion
# or
pnpm i @bmin-mit/tiptap-slash-commands @tiptap/pm @tiptap/react @tiptap/suggestion
# or
bun i @bmin-mit/tiptap-slash-commands @tiptap/pm @tiptap/react @tiptap/suggestion

Usage

1. Configure the Extension

Add the extension and keyboard helper to your Tiptap editor configuration.

import { useEditor, EditorContent } from '@tiptap/react'
import { enableKeyboardNavigation, SlashCommandsExtension } from '@bmin-mit/tiptap-slash-commands'

const editor = useEditor({
  extensions: [
    SlashCommandsExtension,
    // ... other extensions
  ],
  editorProps: {
    handleDOMEvents: {
        keydown: (_, v) => enableKeyboardNavigation(v),
    },
  },
  // ...
})

2. Setup the Component Tree

Wrap your editor and command menu with SlashCommands.Root. Use SlashCommands.Commands and SlashCommands.List to define the menu and SlashCommands.Item for each command. The SlashCommands instance is already included in cmdk's components like Empty (SlashCommands.Empty).

import { SlashCommands } from '@bmin-mit/tiptap-slash-commands'

function MyEditor() {
  // ... editor setup

  return (
    <SlashCommands.Root editor={editor}>
      <EditorContent editor={editor} />
      
      <SlashCommands.Commands>
        <SlashCommands.List>
          <SlashCommands.Item 
            onCommand={({ editor, range }) => {
              editor.chain().focus().deleteRange(range).setHeading({ level: 1 }).run()
            }}
          >
            Heading 1
          </SlashCommands.Item>
          
          <SlashCommands.Item 
            onCommand={({ editor, range }) => {
              editor.chain().focus().deleteRange(range).setHeading({ level: 2 }).run()
            }}
          >
            Heading 2
          </SlashCommands.Item>
          
          <SlashCommands.Item 
            onCommand={({ editor, range }) => {
              editor.chain().focus().deleteRange(range).setBulletList().run()
            }}
          >
            Bullet List
          </SlashCommands.Item>
        </SlashCommands.List>
      </SlashCommands.Commands>
    </SlashCommands.Root>
  )
}

License

MIT