neoclide / coc.nvim

Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.
Other
24.49k stars 960 forks source link
autocompletion language-client lsp neovim-plugin nvim vim vim-plugin

Logo

Make your Vim/Neovim as smart as VS Code

Software License Actions Codecov Coverage Status Doc Matrix


Custom coc popup menu with snippet support

Custom popup menu with snippet support

Why?

Quick Start

Make sure use Vim >= 9.0.0438 or Neovim >= 0.8.0.

Install nodejs >= 16.18.0:

curl -sL install-node.vercel.app/lts | bash

For vim-plug users:

" Use release branch (recommended)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by using npm
Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'npm ci'}

in your .vimrc or init.vim, then restart Vim and run :PlugInstall.

Checkout Install coc.nvim for more info.

You have to install coc extensions or configure language servers for LSP support.

Install extensions like this:

:CocInstall coc-json coc-tsserver

Or you can configure a language server in your coc-settings.json(open it using :CocConfig) like this:

{
  "languageserver": {
    "go": {
      "command": "gopls",
      "rootPatterns": ["go.mod"],
      "trace.server": "verbose",
      "filetypes": ["go"]
    }
  }
}

Checkout the wiki for more details:

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 can change your key mappings. Please use command like:verbose imap <tab> to make sure that your keymap has taken effect.

" https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.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 <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config
inoremap <silent><expr> <TAB>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ CheckBackspace() ? "\<Tab>" :
      \ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"

" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

function! CheckBackspace() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~# '\s'
endfunction

" Use <c-space> to trigger completion
if has('nvim')
  inoremap <silent><expr> <c-space> coc#refresh()
else
  inoremap <silent><expr> <c-@> coc#refresh()
endif

" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)

" GoTo code navigation
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

" Use K to show documentation in preview window
nnoremap <silent> K :call ShowDocumentation()<CR>

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 <leader>rn <Plug>(coc-rename)

" Formatting selected code
xmap <leader>f  <Plug>(coc-format-selected)
nmap <leader>f  <Plug>(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: `<leader>aap` for current paragraph
xmap <leader>a  <Plug>(coc-codeaction-selected)
nmap <leader>a  <Plug>(coc-codeaction-selected)

" Remap keys for applying code actions at the cursor position
nmap <leader>ac  <Plug>(coc-codeaction-cursor)
" Remap keys for apply code actions affect whole buffer
nmap <leader>as  <Plug>(coc-codeaction-source)
" Apply the most preferred quickfix action to fix diagnostic on the current line
nmap <leader>qf  <Plug>(coc-fix-current)

" Remap keys for applying refactor code actions
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
xmap <silent> <leader>r  <Plug>(coc-codeaction-refactor-selected)
nmap <silent> <leader>r  <Plug>(coc-codeaction-refactor-selected)

" Run the Code Lens action on the current line
nmap <leader>cl  <Plug>(coc-codelens-action)

" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)

" Remap <C-f> and <C-b> to scroll float windows/popups
if has('nvim-0.4.0') || has('patch-8.2.0750')
  nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
  nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
  inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
  inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
  vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
  vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif

" Use CTRL-S for selections ranges
" Requires 'textDocument/selectionRange' support of language server
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(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', <f-args>)

" 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 <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>
" Manage extensions
nnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>
" Show commands
nnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>
" Find symbol of current document
nnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>
" Search workspace symbols
nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>
" Do default action for next item
nnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>
" Do default action for previous item
nnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>
" Resume latest coc list
nnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>

Example Lua configuration

NOTE: This only works in Neovim 0.7.0dev+.

-- https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.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 <tab>' 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", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)
keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts)

-- Make <CR> to accept selected completion item or notify coc.nvim to format
-- <C-g>u breaks current undo, please make your own choice
keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)

-- Use <c-j> to trigger snippets
keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)")
-- Use <c-space> to trigger completion
keyset("i", "<c-space>", "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", "<Plug>(coc-diagnostic-prev)", {silent = true})
keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true})

-- GoTo code navigation
keyset("n", "gd", "<Plug>(coc-definition)", {silent = true})
keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true})
keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true})
keyset("n", "gr", "<Plug>(coc-references)", {silent = true})

-- Use K to show documentation in preview window
function _G.show_docs()
    local cw = vim.fn.expand('<cword>')
    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", '<CMD>lua _G.show_docs()<CR>', {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", "<leader>rn", "<Plug>(coc-rename)", {silent = true})

-- Formatting selected code
keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
keyset("n", "<leader>f", "<Plug>(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: `<leader>aap` for current paragraph
local opts = {silent = true, nowait = true}
keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)

-- Remap keys for apply code actions at the cursor position.
keyset("n", "<leader>ac", "<Plug>(coc-codeaction-cursor)", opts)
-- Remap keys for apply source code actions for current file.
keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts)
-- Apply the most preferred quickfix action on the current line.
keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts)

-- Remap keys for apply refactor code actions.
keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true })
keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })

-- Run the Code Lens actions on the current line
keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts)

-- Map function and class text objects
-- NOTE: Requires 'textDocument.documentSymbol' support from the language server
keyset("x", "if", "<Plug>(coc-funcobj-i)", opts)
keyset("o", "if", "<Plug>(coc-funcobj-i)", opts)
keyset("x", "af", "<Plug>(coc-funcobj-a)", opts)
keyset("o", "af", "<Plug>(coc-funcobj-a)", opts)
keyset("x", "ic", "<Plug>(coc-classobj-i)", opts)
keyset("o", "ic", "<Plug>(coc-classobj-i)", opts)
keyset("x", "ac", "<Plug>(coc-classobj-a)", opts)
keyset("o", "ac", "<Plug>(coc-classobj-a)", opts)

-- Remap <C-f> and <C-b> to scroll float windows/popups
---@diagnostic disable-next-line: redefined-local
local opts = {silent = true, nowait = true, expr = true}
keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
keyset("i", "<C-f>",
       'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts)
keyset("i", "<C-b>",
       'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts)
keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)

-- Use CTRL-S for selections ranges
-- Requires 'textDocument/selectionRange' support of language server
keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
keyset("x", "<C-s>", "<Plug>(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', <f-args>)", {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", "<space>a", ":<C-u>CocList diagnostics<cr>", opts)
-- Manage extensions
keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts)
-- Show commands
keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts)
-- Find symbol of current document
keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts)
-- Search workspace symbols
keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts)
-- Do default action for next item
keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts)
-- Do default action for previous item
keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts)
-- Resume latest coc list
keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts)

Articles

Troubleshooting

Try these steps if you experience problems with coc.nvim:

Feedback

Backers

Become a 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

๐Ÿ’ป
Svetlozar Iliev
Svetlozar Iliev

๐Ÿ’ป
James Garbutt
James Garbutt

๐Ÿ’ป
Qingzhou Yue
Qingzhou Yue

๐Ÿ’ป
Maarten de Vries
Maarten de Vries

๐Ÿ’ป
A4-Tacks
A4-Tacks

๐Ÿ’ป
forceofsystem
forceofsystem

๐Ÿ’ป
lake
lake

๐Ÿ’ป
David O'Trakoun
David O'Trakoun

๐Ÿ“–
aispeaking
aispeaking

๐Ÿ’ป
Christian Clauss
Christian Clauss

๐Ÿ’ป
Micah Halter
Micah Halter

๐Ÿ’ป
Cristiano De Michele
Cristiano De Michele

๐Ÿ’ป
Yong Jie
Yong Jie

๐Ÿ’ป
Kira Oakley
Kira Oakley

๐Ÿ“–
Merouane Atig
Merouane Atig

๐Ÿ“–
Gerald
Gerald

๐Ÿ’ป
Nicklas Sedlock
Nicklas Sedlock

๐Ÿ’ป
Adam Tao
Adam Tao

๐Ÿ’ป
itsf4llofstars
itsf4llofstars

๐Ÿ“–
Brian Wo
Brian Wo

๐Ÿ“–
Eric Wong
Eric Wong

๐Ÿ’ป
oxalica
oxalica

๐Ÿ’ป
Christian Zangl
Christian Zangl

๐Ÿ’ป
zoumi
zoumi

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind are welcome!

License

Anti 996