Logo

Make your Vim/Neovim as smart as VSCode

Software License Actions Codecov Coverage Status Doc Gitter

--- Gif _Custom popup menu with snippet support_ ## Why? - ๐Ÿš€ **Fast**: separated NodeJS process that does not slow down Vim most of the time. - ๐Ÿ’Ž **Reliable**: typed language, tested with CI. - ๐ŸŒŸ **Featured**: all LSP 3.16 features are supported, see `:h coc-lsp`. - โค๏ธ **Flexible**: [configured like VS Code](https://github.com/neoclide/coc.nvim/wiki/Using-the-configuration-file), [Coc extensions function similarly to VS Code extensions](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) ## Quick Start Make sure use Vim >= 8.1.1719 or Neovim >= 0.4.0. Install [nodejs](https://nodejs.org/en/download/) >= 14.14: ```bash curl -sL install-node.vercel.app/lts | bash ``` For [vim-plug](https://github.com/junegunn/vim-plug) users: ```vim " Use release branch (recommend) Plug 'neoclide/coc.nvim', {'branch': 'release'} " Or build from source code by using yarn: https://yarnpkg.com Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'yarn install --frozen-lockfile'} ``` in your `.vimrc` or `init.vim`, then restart Vim and run `:PlugInstall`. Checkout [Install coc.nvim](https://github.com/neoclide/coc.nvim/wiki/Install-coc.nvim) for more info. You **have to** install coc extension or configure language servers for LSP support. Install extensions like: :CocInstall coc-json coc-tsserver Or configure language server in `coc-settings.json` opened by `:CocConfig`, like: ```json { "languageserver": { "go": { "command": "gopls", "rootPatterns": ["go.mod"], "trace.server": "verbose", "filetypes": ["go"] } } } ``` Checkout the wiki for more details: - [Completion with sources](https://github.com/neoclide/coc.nvim/wiki/Completion-with-sources) - [Using the configuration file](https://github.com/neoclide/coc.nvim/wiki/Using-the-configuration-file) - [Using coc extensions](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) - [Configure language servers](https://github.com/neoclide/coc.nvim/wiki/Language-servers) - [F.A.Q](https://github.com/neoclide/coc.nvim/wiki/F.A.Q) Checkout `:h coc-nvim` for Vim interface. ## Example Vim configuration Configuration is required to make coc.nvim easier to work with, since it doesn't change your key-mappings or Vim options. This is done as much as possible to avoid conflict with your other plugins. **โ—๏ธImportant**: Some Vim plugins could change key mappings. Please use command like`:verbose imap ` to make sure that your keymap has taken effect. ```vim " May need for Vim (not Neovim) since coc.nvim calculates byte offset by count " utf-8 byte sequence set encoding=utf-8 " Some servers have issues with backup files, see #649 set nobackup set nowritebackup " Having longer updatetime (default is 4000 ms = 4s) leads to noticeable " delays and poor user experience set updatetime=300 " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved set signcolumn=yes " Use tab for trigger completion with characters ahead and navigate " NOTE: There's always complete item selected by default, you may want to enable " no select by `"suggest.noselect": true` in your configuration file " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by " other plugin before putting this into your config inoremap \ coc#pum#visible() ? coc#pum#next(1) : \ CheckBackspace() ? "\" : \ coc#refresh() inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" " Make to accept selected completion item or notify coc.nvim to format " u breaks current undo, please make your own choice inoremap coc#pum#visible() ? coc#pum#confirm() \: "\u\\=coc#on_enter()\" function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion if has('nvim') inoremap coc#refresh() else inoremap coc#refresh() endif " Use `[g` and `]g` to navigate diagnostics " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list nmap [g (coc-diagnostic-prev) nmap ]g (coc-diagnostic-next) " GoTo code navigation nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use K to show documentation in preview window nnoremap K :call ShowDocumentation() function! ShowDocumentation() if CocAction('hasProvider', 'hover') call CocActionAsync('doHover') else call feedkeys('K', 'in') endif endfunction " Highlight the symbol and its references when holding the cursor autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming nmap rn (coc-rename) " Formatting selected code xmap f (coc-format-selected) nmap f (coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s) autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Applying code actions to the selected code block " Example: `aap` for current paragraph xmap a (coc-codeaction-selected) nmap a (coc-codeaction-selected) " Remap keys for applying code actions at the cursor position nmap ac (coc-codeaction-cursor) " Remap keys for apply code actions affect whole buffer nmap as (coc-codeaction-source) " Apply the most preferred quickfix action to fix diagnostic on the current line nmap qf (coc-fix-current) " Remap keys for applying refactor code actions nmap re (coc-codeaction-refactor) xmap r (coc-codeaction-refactor-selected) nmap r (coc-codeaction-refactor-selected) " Run the Code Lens action on the current line nmap cl (coc-codelens-action) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server xmap if (coc-funcobj-i) omap if (coc-funcobj-i) xmap af (coc-funcobj-a) omap af (coc-funcobj-a) xmap ic (coc-classobj-i) omap ic (coc-classobj-i) xmap ac (coc-classobj-a) omap ac (coc-classobj-a) " Remap and to scroll float windows/popups if has('nvim-0.4.0') || has('patch-8.2.0750') nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" endif " Use CTRL-S for selections ranges " Requires 'textDocument/selectionRange' support of language server nmap (coc-range-select) xmap (coc-range-select) " Add `:Format` command to format current buffer command! -nargs=0 Format :call CocActionAsync('format') " Add `:Fold` command to fold current buffer command! -nargs=? Fold :call CocAction('fold', ) " Add `:OR` command for organize imports of the current buffer command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics nnoremap a :CocList diagnostics " Manage extensions nnoremap e :CocList extensions " Show commands nnoremap c :CocList commands " Find symbol of current document nnoremap o :CocList outline " Search workspace symbols nnoremap s :CocList -I symbols " Do default action for next item nnoremap j :CocNext " Do default action for previous item nnoremap k :CocPrev " Resume latest coc list nnoremap p :CocListResume ``` ## Example Lua configuration NOTE: This only works in Neovim 0.7.0dev+. ```lua -- Some servers have issues with backup files, see #649 vim.opt.backup = false vim.opt.writebackup = false -- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable -- delays and poor user experience vim.opt.updatetime = 300 -- Always show the signcolumn, otherwise it would shift the text each time -- diagnostics appeared/became resolved vim.opt.signcolumn = "yes" local keyset = vim.keymap.set -- Autocomplete function _G.check_back_space() local col = vim.fn.col('.') - 1 return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil end -- Use Tab for trigger completion with characters ahead and navigate -- NOTE: There's always a completion item selected by default, you may want to enable -- no select by setting `"suggest.noselect": true` in your configuration file -- NOTE: Use command ':verbose imap ' to make sure Tab is not mapped by -- other plugins before putting this into your config local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false} keyset("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts) keyset("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts) -- Make to accept selected completion item or notify coc.nvim to format -- u breaks current undo, please make your own choice keyset("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts) -- Use to trigger snippets keyset("i", "", "(coc-snippets-expand-jump)") -- Use to trigger completion keyset("i", "", "coc#refresh()", {silent = true, expr = true}) -- Use `[g` and `]g` to navigate diagnostics -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list keyset("n", "[g", "(coc-diagnostic-prev)", {silent = true}) keyset("n", "]g", "(coc-diagnostic-next)", {silent = true}) -- GoTo code navigation keyset("n", "gd", "(coc-definition)", {silent = true}) keyset("n", "gy", "(coc-type-definition)", {silent = true}) keyset("n", "gi", "(coc-implementation)", {silent = true}) keyset("n", "gr", "(coc-references)", {silent = true}) -- Use K to show documentation in preview window function _G.show_docs() local cw = vim.fn.expand('') if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then vim.api.nvim_command('h ' .. cw) elseif vim.api.nvim_eval('coc#rpc#ready()') then vim.fn.CocActionAsync('doHover') else vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) end end keyset("n", "K", 'lua _G.show_docs()', {silent = true}) -- Highlight the symbol and its references on a CursorHold event(cursor is idle) vim.api.nvim_create_augroup("CocGroup", {}) vim.api.nvim_create_autocmd("CursorHold", { group = "CocGroup", command = "silent call CocActionAsync('highlight')", desc = "Highlight symbol under cursor on CursorHold" }) -- Symbol renaming keyset("n", "rn", "(coc-rename)", {silent = true}) -- Formatting selected code keyset("x", "f", "(coc-format-selected)", {silent = true}) keyset("n", "f", "(coc-format-selected)", {silent = true}) -- Setup formatexpr specified filetype(s) vim.api.nvim_create_autocmd("FileType", { group = "CocGroup", pattern = "typescript,json", command = "setl formatexpr=CocAction('formatSelected')", desc = "Setup formatexpr specified filetype(s)." }) -- Update signature help on jump placeholder vim.api.nvim_create_autocmd("User", { group = "CocGroup", pattern = "CocJumpPlaceholder", command = "call CocActionAsync('showSignatureHelp')", desc = "Update signature help on jump placeholder" }) -- Apply codeAction to the selected region -- Example: `aap` for current paragraph local opts = {silent = true, nowait = true} keyset("x", "a", "(coc-codeaction-selected)", opts) keyset("n", "a", "(coc-codeaction-selected)", opts) -- Remap keys for apply code actions at the cursor position. keyset("n", "ac", "(coc-codeaction-cursor)", opts) -- Remap keys for apply code actions affect whole buffer. keyset("n", "as", "(coc-codeaction-source)", opts) -- Remap keys for applying codeActions to the current buffer keyset("n", "ac", "(coc-codeaction)", opts) -- Apply the most preferred quickfix action on the current line. keyset("n", "qf", "(coc-fix-current)", opts) -- Remap keys for apply refactor code actions. keyset("n", "re", "(coc-codeaction-refactor)", { silent = true }) keyset("x", "r", "(coc-codeaction-refactor-selected)", { silent = true }) keyset("n", "r", "(coc-codeaction-refactor-selected)", { silent = true }) -- Run the Code Lens actions on the current line keyset("n", "cl", "(coc-codelens-action)", opts) -- Map function and class text objects -- NOTE: Requires 'textDocument.documentSymbol' support from the language server keyset("x", "if", "(coc-funcobj-i)", opts) keyset("o", "if", "(coc-funcobj-i)", opts) keyset("x", "af", "(coc-funcobj-a)", opts) keyset("o", "af", "(coc-funcobj-a)", opts) keyset("x", "ic", "(coc-classobj-i)", opts) keyset("o", "ic", "(coc-classobj-i)", opts) keyset("x", "ac", "(coc-classobj-a)", opts) keyset("o", "ac", "(coc-classobj-a)", opts) -- Remap and to scroll float windows/popups ---@diagnostic disable-next-line: redefined-local local opts = {silent = true, nowait = true, expr = true} keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) keyset("i", "", 'coc#float#has_scroll() ? "=coc#float#scroll(1)" : ""', opts) keyset("i", "", 'coc#float#has_scroll() ? "=coc#float#scroll(0)" : ""', opts) keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) -- Use CTRL-S for selections ranges -- Requires 'textDocument/selectionRange' support of language server keyset("n", "", "(coc-range-select)", {silent = true}) keyset("x", "", "(coc-range-select)", {silent = true}) -- Add `:Format` command to format current buffer vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) -- " Add `:Fold` command to fold current buffer vim.api.nvim_create_user_command("Fold", "call CocAction('fold', )", {nargs = '?'}) -- Add `:OR` command for organize imports of the current buffer vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {}) -- Add (Neo)Vim's native statusline support -- NOTE: Please see `:h coc-status` for integrations with external plugins that -- provide custom statusline: lightline.vim, vim-airline vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") -- Mappings for CoCList -- code actions and coc stuff ---@diagnostic disable-next-line: redefined-local local opts = {silent = true, nowait = true} -- Show all diagnostics keyset("n", "a", ":CocList diagnostics", opts) -- Manage extensions keyset("n", "e", ":CocList extensions", opts) -- Show commands keyset("n", "c", ":CocList commands", opts) -- Find symbol of current document keyset("n", "o", ":CocList outline", opts) -- Search workspace symbols keyset("n", "s", ":CocList -I symbols", opts) -- Do default action for next item keyset("n", "j", ":CocNext", opts) -- Do default action for previous item keyset("n", "k", ":CocPrev", opts) -- Resume latest coc list keyset("n", "p", ":CocListResume", opts) ``` ## Articles - [coc.nvim ๆ’ไปถไฝ“็ณปไป‹็ป](https://zhuanlan.zhihu.com/p/65524706) - [CocList ๅ…ฅๅ‘ๆŒ‡ๅ—](https://zhuanlan.zhihu.com/p/71846145) - [Create coc.nvim extension to improve Vim experience](https://medium.com/@chemzqm/create-coc-nvim-extension-to-improve-vim-experience-4461df269173) - [How to write a coc.nvim extension (and why)](https://samroeca.com/coc-plugin.html) ## Troubleshooting Try these steps if you experience problems with coc.nvim: - Ensure your Vim version >= 8.0 using `:version` - If a service failed to start, use `:CocInfo` or `:checkhealth` if you use Neovim - Checkout the log of coc.nvim with `:CocOpenLog` - If you have issues with the language server, it's recommended to [checkout the language server output](https://github.com/neoclide/coc.nvim/wiki/Debug-language-server#using-output-channel) ## Feedback - Have a question? Start a discussion on [GitHub Discussions](https://github.com/neoclide/coc.nvim/discussions). - File a bug in [GitHub Issues](https://github.com/neoclide/coc.nvim/issues). - Chat with us on [Gitter](https://gitter.im/neoclide/coc.nvim). - ไธญๆ–‡็”จๆˆท่ฏทๅˆฐ [ไธญๆ–‡ gitter](https://gitter.im/neoclide/coc-cn) ่ฎจ่ฎบ ## Backers [Become a backer](https://opencollective.com/cocnvim#backer) and get your image on our README on GitHub with a link to your site. ## Contributors
Qiming zhao
Qiming zhao

๐Ÿ’ป
Heyward Fann
Heyward Fann

๐Ÿ’ป
Raidou
Raidou

๐Ÿ’ป
kevinhwang91
kevinhwang91

๐Ÿ’ป
ๅนด็ณ•ๅฐ่ฑ†ๆฑค
ๅนด็ณ•ๅฐ่ฑ†ๆฑค

๐Ÿ’ป
Avi Dessauer
Avi Dessauer

๐Ÿ’ป
ๆœ€ไธŠๅท
ๆœ€ไธŠๅท

๐Ÿ’ป
Yatao Li
Yatao Li

๐Ÿ’ป
wongxy
wongxy

๐Ÿ’ป
Sam McCall
Sam McCall

๐Ÿ’ป
Samuel Roeca
Samuel Roeca

๐Ÿ’ป
Amirali Esmaeili
Amirali Esmaeili

๐Ÿ’ป
Jack Rowlingson
Jack Rowlingson

๐Ÿ’ป
Jaehwang Jung
Jaehwang Jung

๐Ÿ’ป
Antoine
Antoine

๐Ÿ’ป
Cosmin Popescu
Cosmin Popescu

๐Ÿ’ป
Duc Nghiem Xuan
Duc Nghiem Xuan

๐Ÿ’ป
Francisco Lopes
Francisco Lopes

๐Ÿ’ป
daquexian
daquexian

๐Ÿ’ป
dependabot[bot]
dependabot[bot]

๐Ÿ’ป
greenkeeper[bot]
greenkeeper[bot]

๐Ÿ’ป
Chris Kipp
Chris Kipp

๐Ÿ’ป
Dmytro Meleshko
Dmytro Meleshko

๐Ÿ’ป
Kirill Bobyrev
Kirill Bobyrev

๐Ÿ’ป
Gontran Baerts
Gontran Baerts

๐Ÿ’ป
Andy
Andy

๐Ÿ’ป
Cheng JIANG
Cheng JIANG

๐Ÿ’ป
Corin
Corin

๐Ÿ’ป
Daniel Zhang
Daniel Zhang

๐Ÿ’ป
Ferdinand Bachmann
Ferdinand Bachmann

๐Ÿ’ป
Guangqing Chen
Guangqing Chen

๐Ÿ’ป
Jade Meskill
Jade Meskill

๐Ÿ’ป
Jasper Poppe
Jasper Poppe

๐Ÿ’ป
Jean Jordaan
Jean Jordaan

๐Ÿ’ป
Kid
Kid

๐Ÿ’ป
Pieter van Loon
Pieter van Loon

๐Ÿ’ป
Robert Liebowitz
Robert Liebowitz

๐Ÿ’ป
Seth Messer
Seth Messer

๐Ÿ’ป
UncleBill
UncleBill

๐Ÿ’ป
ZERO
ZERO

๐Ÿ’ป
fsouza
fsouza

๐Ÿ’ป
XiaoZhang
XiaoZhang

๐Ÿ’ป
whyreal
whyreal

๐Ÿ’ป
yehuohan
yehuohan

๐Ÿ’ป
ใƒใ‚ฏใƒ€ใƒณใใ‚“
ใƒใ‚ฏใƒ€ใƒณใใ‚“

๐Ÿ’ป
Raphael
Raphael

๐Ÿ’ป
tbodt
tbodt

๐Ÿ’ป
Aaron McDaid
Aaron McDaid

๐Ÿ’ป
Aasif Versi
Aasif Versi

๐Ÿ’ป
Abner Silva
Abner Silva

๐Ÿ’ป
Adam Stankiewicz
Adam Stankiewicz

๐Ÿ’ป
Adamansky Anton
Adamansky Anton

๐Ÿ’ป
Ahmed El Gabri
Ahmed El Gabri

๐Ÿ’ป
Alexandr Kondratev
Alexandr Kondratev

๐Ÿ’ป
Andrew Shim
Andrew Shim

๐Ÿ’ป
Andy Lindeman
Andy Lindeman

๐Ÿ’ป
Augustin
Augustin

๐Ÿ’ป
Bastien Orivel
Bastien Orivel

๐Ÿ’ป
Ben Lu
Ben Lu

๐Ÿ’ป
Ben
Ben

๐Ÿ’ป
Brendan Roy
Brendan Roy

๐Ÿ’ป
brianembry
brianembry

๐Ÿ’ป
br
br

๐Ÿ’ป
Cason Adams
Cason Adams

๐Ÿ’ป
Chang Y
Chang Y

๐Ÿ’ป
Chayoung You
Chayoung You

๐Ÿ’ป
Chen Lijun
Chen Lijun

๐Ÿ’ป
Chen Mulong
Chen Mulong

๐Ÿ’ป
Chris Weyl
Chris Weyl

๐Ÿ’ป
dezza
dezza

๐Ÿ’ป
Cody Allen
Cody Allen

๐Ÿ’ป
Damien Rajon
Damien Rajon

๐Ÿ’ป
Daniel Eriksson
Daniel Eriksson

๐Ÿ’ป
Daniel Jenson
Daniel Jenson

๐Ÿ’ป
David Mejorado
David Mejorado

๐Ÿ’ป
Deric Pang
Deric Pang

๐Ÿ’ป
Ding Tao
Ding Tao

๐Ÿ’ป
Doron Behar
Doron Behar

๐Ÿ’ป
Egor Kovetskiy
Egor Kovetskiy

๐Ÿ’ป
ElKowar
ElKowar

๐Ÿ’ป
Emeliov Dmitrii
Emeliov Dmitrii

๐Ÿ’ป
Fabian Becker
Fabian Becker

๐Ÿ’ป
FallenWarrior2k
FallenWarrior2k

๐Ÿ’ป
Fausto Nรบรฑez Alberro
Fausto Nรบรฑez Alberro

๐Ÿ’ป
Felipe Ramos
Felipe Ramos

๐Ÿ’ป
Fredrik Borg
Fredrik Borg

๐Ÿ’ป
Gavin Sim
Gavin Sim

๐Ÿ’ป
Gibson Fahnestock
Gibson Fahnestock

๐Ÿ’ป
Giovanni Giordano
Giovanni Giordano

๐Ÿ’ป
Gopal Adhikari
Gopal Adhikari

๐Ÿ’ป
Hanh Le
Hanh Le

๐Ÿ’ป
hedy
hedy

๐Ÿ’ป
Hendrik Lammers
Hendrik Lammers

๐Ÿ’ป
Henry Barreto
Henry Barreto

๐Ÿ’ป
Hugo
Hugo

๐Ÿ’ป
Jackie Li
Jackie Li

๐Ÿ’ป
Jakub Nowak
Jakub Nowak

๐Ÿ’ป
James Pickard
James Pickard

๐Ÿ’ป
Jia Sui
Jia Sui

๐Ÿ’ป
Ellie Hermaszewska
Ellie Hermaszewska

๐Ÿ’ป
Joel Bradshaw
Joel Bradshaw

๐Ÿ’ป
John Carlo Roberto
John Carlo Roberto

๐Ÿ’ป
Jonas Holst Damtoft
Jonas Holst Damtoft

๐Ÿ’ป
Jonathan Lehman
Jonathan Lehman

๐Ÿ’ป
Joosep Alviste
Joosep Alviste

๐Ÿ’ป
Josa Gesell
Josa Gesell

๐Ÿ’ป
Joshua Rubin
Joshua Rubin

๐Ÿ’ป
Julian Grinblat
Julian Grinblat

๐Ÿ’ป
Julian Valentin
Julian Valentin

๐Ÿ’ป
KabbAmine
KabbAmine

๐Ÿ’ป
Kay Gosho
Kay Gosho

๐Ÿ’ป
Kenny Huynh
Kenny Huynh

๐Ÿ’ป
Kevin Rambaud
Kevin Rambaud

๐Ÿ’ป
Kian Cross
Kian Cross

๐Ÿ’ป
Kristijan Husak
Kristijan Husak

๐Ÿ’ป
NullVoxPopuli
NullVoxPopuli

๐Ÿ’ป
Lasse Peters
Lasse Peters

๐Ÿ’ป
Noel Errenil
Noel Errenil

๐Ÿ’ป
LinArcX
LinArcX

๐Ÿ’ป
Liu-Cheng Xu
Liu-Cheng Xu

๐Ÿ’ป
Marc
Marc

๐Ÿ’ป
Marius Gawrisch
Marius Gawrisch

๐Ÿ’ป
Mark Hintz
Mark Hintz

๐Ÿ’ป
Mathieu Le Tiec
Mathieu Le Tiec

๐Ÿ’ป
Matt White
Matt White

๐Ÿ’ป
Matthew Evans
Matthew Evans

๐Ÿ’ป
Me1onRind
Me1onRind

๐Ÿ’ป
Qyriad
Qyriad

๐Ÿ’ป
Narcis B.
Narcis B.

๐Ÿ’ป
Neur1n
Neur1n

๐Ÿ’ป
Nicolas Dermine
Nicolas Dermine

๐Ÿ’ป
Noah
Noah

๐Ÿ’ป
PENG Rui
PENG Rui

๐Ÿ’ป
Paco
Paco

๐Ÿ’ป
Peng Guanwen
Peng Guanwen

๐Ÿ’ป
Petter Wahlman
Petter Wahlman

๐Ÿ’ป
Pooya Moradi
Pooya Moradi

๐Ÿ’ป
Quade Morrison
Quade Morrison

๐Ÿ’ป
Ralf Vogler
Ralf Vogler

๐Ÿ’ป
Ran Chen
Ran Chen

๐Ÿ’ป
Ricardo Garcรญa Vega
Ricardo Garcรญa Vega

๐Ÿ’ป
Rick Jones
Rick Jones

๐Ÿ’ป
Ryan Christian
Ryan Christian

๐Ÿ’ป
Salo
Salo

๐Ÿ’ป
Sam Nolan
Sam Nolan

๐Ÿ’ป
Saurav
Saurav

๐Ÿ’ป
Sean Mackesey
Sean Mackesey

๐Ÿ’ป
Sheel Patel
Sheel Patel

๐Ÿ’ป
Solomon Ng
Solomon Ng

๐Ÿ’ป
Sri Kadimisetty
Sri Kadimisetty

๐Ÿ’ป
Stephen Prater
Stephen Prater

๐Ÿ’ป
Sune Kibsgaard
Sune Kibsgaard

๐Ÿ’ป
Aquaakuma
Aquaakuma

๐Ÿ’ป
Takumi Kawase
Takumi Kawase

๐Ÿ’ป
The Blob SCP
The Blob SCP

๐Ÿ’ป
Tomasz N
Tomasz N

๐Ÿ’ป
Tomoyuki Harada
Tomoyuki Harada

๐Ÿ’ป
Tony Fettes
Tony Fettes

๐Ÿ’ป
Tony Narlock
Tony Narlock

๐Ÿ’ป
Tony Wang
Tony Wang

๐Ÿ’ป
Victor Quach
Victor Quach

๐Ÿ’ป
Whisperity
Whisperity

๐Ÿ’ป
William Turner
William Turner

๐Ÿ’ป
Xiaochao Dong
Xiaochao Dong

๐Ÿ’ป
Hugh Hou
Hugh Hou

๐Ÿ’ป
Jackie Li
Jackie Li

๐Ÿ’ป
Zachary Freed
Zachary Freed

๐Ÿ’ป
akiyosi
akiyosi

๐Ÿ’ป
alexjg
alexjg

๐Ÿ’ป
aste4
aste4

๐Ÿ’ป
clyfish
clyfish

๐Ÿ’ป
dev7ba
dev7ba

๐Ÿ’ป
diartyz
diartyz

๐Ÿ’ป
doza-daniel
doza-daniel

๐Ÿ’ป
equal-l2
equal-l2

๐Ÿ’ป
fong
fong

๐Ÿ’ป
hexh
hexh

๐Ÿ’ป
hhiraba
hhiraba

๐Ÿ’ป
ic-768
ic-768

๐Ÿ’ป
javiertury
javiertury

๐Ÿ’ป
karasu
karasu

๐Ÿ’ป
kevineato
kevineato

๐Ÿ’ป
Eduardo Costa
Eduardo Costa

๐Ÿ’ป
micchy326
micchy326

๐Ÿ’ป
midchildan
midchildan

๐Ÿ’ป
minefuto
minefuto

๐Ÿ’ป
miyanokomiya
miyanokomiya

๐Ÿ’ป
miyaviee
miyaviee

๐Ÿ’ป
monkoose
monkoose

๐Ÿ’ป ๐Ÿ›
mujx
mujx

๐Ÿ’ป
mvilim
mvilim

๐Ÿ’ป
naruaway
naruaway

๐Ÿ’ป
piersy
piersy

๐Ÿ’ป
ryantig
ryantig

๐Ÿ’ป
rydesun
rydesun

๐Ÿ’ป
sc00ter
sc00ter

๐Ÿ’ป
smhc
smhc

๐Ÿ’ป
Sam Kaplan
Sam Kaplan

๐Ÿ’ป
tasuten
tasuten

๐Ÿ’ป
todesking
todesking

๐Ÿ’ป
typicode
typicode

๐Ÿ’ป
ๆŽ้ธฃ้ฃž
ๆŽ้ธฃ้ฃž

๐Ÿ’ป
Ikko Ashimine
Ikko Ashimine

๐Ÿ“–
Rammiah
Rammiah

๐Ÿ›
Alisue
Alisue

๐Ÿ›
bigshans
bigshans

๐Ÿ“–
Robert Boyd III
Robert Boyd III

๐Ÿ›
Yuki Iwanaga
Yuki Iwanaga

๐Ÿ’ป
SpringHack
SpringHack

๐Ÿ›
Lucas Burns
Lucas Burns

๐Ÿ“–
qiqiboy
qiqiboy

๐Ÿ’ป
timsu92
timsu92

๐Ÿ“–
Shawn M Moore
Shawn M Moore

๐Ÿ’ป
Aaron U'Ren
Aaron U'Ren

๐Ÿ›
SeniorMars
SeniorMars

๐Ÿ“–
็‰ง็พŠ็Šฌ็œŸQ
็‰ง็พŠ็Šฌ็œŸQ

๐Ÿ“–
geraldspreer
geraldspreer

๐Ÿ“–
Fabio
Fabio

๐Ÿ“–
Li Yunting
Li Yunting

๐Ÿ›
Jeff L.
Jeff L.

๐Ÿ’ป
Elliot Winkler
Elliot Winkler

๐Ÿ’ป
This project follows the [all-contributors](https://allcontributors.org) specification. Contributions of any kind are welcome! ## License [Anti 996](./LICENSE.md)