https://github.com/mistweaverco/kulala-ls
A minimal 🤏 language 🔊 server 📡 for HTTP 🐼 syntax 🌈.
https://github.com/mistweaverco/kulala-ls
graphql http http-client kulala language-server-protocol lsp-server neovim
Last synced: about 1 year ago
JSON representation
A minimal 🤏 language 🔊 server 📡 for HTTP 🐼 syntax 🌈.
- Host: GitHub
- URL: https://github.com/mistweaverco/kulala-ls
- Owner: mistweaverco
- License: mit
- Created: 2024-10-01T20:33:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-23T21:12:04.000Z (about 1 year ago)
- Last Synced: 2025-03-29T16:03:13.265Z (about 1 year ago)
- Topics: graphql, http, http-client, kulala, language-server-protocol, lsp-server, neovim
- Language: TypeScript
- Homepage:
- Size: 371 KB
- Stars: 67
- Watchers: 3
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README

# kulala-ls
[](https://www.npmjs.com/package/@mistweaverco/kulala-ls)
[](https://www.typescriptlang.org/)
[](https://rollupjs.org/)
[](https://github.com/mistweaverco/kulala-ls/releases/latest)
[](https://discord.gg/QyVQmfY4Rt)
[Install](#install) •[Supports](#supports) • [Usage](https://kulala.mwco.app/docs/usage/) • [HTTP File Spec](https://kulala.mwco.app/docs/usage/http-file-spec)
A minimal 🤏 language 🔊 server 📡 for HTTP 🐼 syntax 🌈.
Kulala is swahili for "rest" or "relax".
## Install
### Neovim
> [!WARNING]
> Requires Neovim 0.10.0+.
Install language server:
```sh
npm install -g @mistweaverco/kulala-ls
```
Recommended plugins:
- [lazy.nvim](https://github.com/folke/lazy.nvim)
- [lsp-config](https://github.com/neovim/nvim-lspconfig)
- [blink.cmp](https://github.com/saghen/blink.cmp)
### Configuration
Via Lazy:
```lua
{
"neovim/nvim-lspconfig",
config = function()
local nvim_lsp = require("lspconfig")
local capabilities = vim.lsp.protocol.make_client_capabilities()
local servers = {
"kulala_ls",
}
for _, lsp in ipairs(servers) do
if nvim_lsp[lsp] ~= nil then
if nvim_lsp[lsp].setup ~= nil then
nvim_lsp[lsp].setup({
capabilities = capabilities,
})
else
vim.notify("LSP server " .. lsp .. " does not have a setup function", vim.log.levels.ERROR)
end
end
end
end,
},
{
"saghen/blink.cmp",
build = "cargo build --release",
version = "*",
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
-- 'default' for mappings similar to built-in completion
-- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate)
-- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept
-- See the full "keymap" documentation for information on defining your own keymap.
keymap = {
preset = "default",
[""] = { "select_and_accept", "fallback" },
cmdline = {
preset = "default",
},
},
completion = {
-- Show documentation when selecting a completion item
documentation = { auto_show = true, auto_show_delay_ms = 500 },
},
appearance = {
-- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
},
-- Default list of enabled providers defined so that you can extend it
-- elsewhere in your config, without redefining it, due to `opts_extend`
sources = {
default = {
"lsp",
"path",
"buffer",
},
},
},
}
```
## Supports
- Variable completion *(with support for multiple sources)*
- [x] `OS environment` (Kulala)
- [x] `http-client.env.json` (Kulala and Intellij)
- [x] `http-client.private.env.json` (Kulala and Intellij)
- [x] `.env` (Kulala and rest-nvim)
- [x] `.vscode/settings.json` *`rest-client.environmentVariables`* (Kulala and VSCode rest-client)
- [x] `*.code-workspace` *`rest-client.environmentVariables`* (Kulala and VSCode rest-client)
- [x] Header name completion
- [x] Header value completion
- [x] Method completion
- [x] Scheme completion
- [x] HTTP Version completion
- [x] GraphQL completion via GraphQL schema introspection
### GraphQL
You need to have a GraphQL schema file somewhere in your project.
The language server will look for it in the following order:
1. `[filename].graphql-schema.json`
2. `graphql-schema.json` (Keeps looking up the directory tree until it finds a schema file)