Skip to content
bngarren edited this page Aug 28, 2025 · 7 revisions

checkmate.nvim

Integrations

render-markdown.nvim

Since render-markdown is purely visual and doesn't modify buffer content, this minimizes interaction with checkmate. However, the following behavior may be desirable by users:

  • Disable checkmate.nvim's todo markers (checkboxes) to allow render-markdown.nvim to correctly parse the raw Markdown and render them accordingly (via conceal)
  • Disable render-markdown.nvim's checkbox rendering to prevent any unexpected interaction with checkmate.nvim (though this may not even be necessary if you are using custom, Unicode todo markers in checkmate—these aren't parsed/identified by render-markdown).

To 'disable' checkmate's todo markers (checkboxes), a current workaround is to simply set the todo_markers to regular Markdown, such as:

-- checkmate.Config
todo_markers = {
   unchecked = "[ ]",
   checked = "[x]",
},

In the future, this behavior will be more explicit via the config (more testing is needed).

This behavior is still being explored and tested; please submit bugs/issues with this approach.

To use checkmate.nvim's native rendering and if you encounter issues with render-markdown.nvim, you can disable the render-markdown checkboxes and allow checkmate to fully handle this styling:

require('render-markdown').setup({
    checkbox = {
        enabled = false
    }
})

snacks.nvim

You can easily use checkmate with a scratch buffer via the following strategy:

Within the snacks opts setup a keymap, or call Snacks.scratch.open() however you prefer:

keys = {
  {
    "<leader>T.",
    function()
      -- Can implement your own logic for saving files by cwd, project, git branch, etc.
      local data = vim.fn.stdpath("data")
      local root = data .. "/snacks/todo"
      vim.fn.mkdir(root, "p")
      local file = root .. "/todo.md" -- IMPORTANT: must match checkmate `files` pattern

      ---@diagnostic disable-next-line: missing-fields
      Snacks.scratch.open({
        ft = "markdown",
        file = file,
      })
    end,
    desc = "Toggle Scratch Todo",
  },
}

The critical piece is that the filename must the files patten matcher in checkmate's config.

You could also use the default Snacks file naming logic and just ensure the checkmate files pattern includes that file. Snacks.scratch seems to save files with .markdown extension, so this could be one way.

Undo Behavior

Persistent undo: Disabled for Checkmate-managed buffers. Checkmate keeps Unicode in the buffer but saves Markdown to disk; Neovim only restores undo histories that match the exact file bytes, so cross-session undo would be inconsistent. Normal in-session undo/redo works as expected. This is simply a limitation of Checkmate's design.

Clone this wiki locally