A neovim plugin for rendering typst inline using the kitty unicode graphics protocol
Lua
63
40 commits
updated Aug 19, 2026
A neovim plugin that uses the new(ish) kitty unicode rendering protocol to render typst expressions inline. Has live previews as you type in insert mode.
Requires nvim >=10.0, and only works properly in ghostty and kitty.
Works in tmux (partially, it will break if two instances of the plugin work as they will replace each-other's images), will not work in zellij as they have no way of passing through the escape sequences kitty needs to display images.
https://github.com/user-attachments/assets/94179603-2f41-43ff-9e5f-6dc4f31dc02d
Lazy.nvim:
{
'PartyWumpus/typst-concealer',
opts = {},
ft = "typst",
},
Typst-concealer can be disabled/enabled inside buffers. You can change the default with the enabled_by_default option.
-- example keybinds
vim.keymap.set("n", "<leader>ts", function()
require('typst-concealer').enable_buf(vim.fn.bufnr())
end)
vim.keymap.set("n", "<leader>th", function()
require('typst-concealer').disable_buf(vim.fn.bufnr())
end)
The options are mostly explained in the types, so either take a look in the code, (look for the typstconfig type) or get a good lua LSP and take a look what your autocomplete tells you.
The styling_type option is probably the most important one. It has three modes:
#sets. This is best for documents that never intend to be actually rendered as pdf/html, but just in neovim, otherwise the output of either neovim or the pdf is going to look rather strange.These styles are applied after all other rules are applied.
$ 2+2=4 $, not $2+2=4$, or the plugin will render it weird. This is the complete opposite of what typst normally does, will be fixed eventually)Lua
100.0%
A neovim plugin for rendering typst inline using the kitty unicode graphics protocol
Lua
63
40 commits
updated Aug 19, 2026
A neovim plugin that uses the new(ish) kitty unicode rendering protocol to render typst expressions inline. Has live previews as you type in insert mode.
Requires nvim >=10.0, and only works properly in ghostty and kitty.
Works in tmux (partially, it will break if two instances of the plugin work as they will replace each-other's images), will not work in zellij as they have no way of passing through the escape sequences kitty needs to display images.
https://github.com/user-attachments/assets/94179603-2f41-43ff-9e5f-6dc4f31dc02d
Lazy.nvim:
{
'PartyWumpus/typst-concealer',
opts = {},
ft = "typst",
},
Typst-concealer can be disabled/enabled inside buffers. You can change the default with the enabled_by_default option.
-- example keybinds
vim.keymap.set("n", "<leader>ts", function()
require('typst-concealer').enable_buf(vim.fn.bufnr())
end)
vim.keymap.set("n", "<leader>th", function()
require('typst-concealer').disable_buf(vim.fn.bufnr())
end)
The options are mostly explained in the types, so either take a look in the code, (look for the typstconfig type) or get a good lua LSP and take a look what your autocomplete tells you.
The styling_type option is probably the most important one. It has three modes:
#sets. This is best for documents that never intend to be actually rendered as pdf/html, but just in neovim, otherwise the output of either neovim or the pdf is going to look rather strange.These styles are applied after all other rules are applied.
$ 2+2=4 $, not $2+2=4$, or the plugin will render it weird. This is the complete opposite of what typst normally does, will be fixed eventually)Lua
100.0%