clice
June 17, 2026 · View on GitHub
A C++ language server written from scratch on LLVM/Clang, with selected components ported from clangd. clice redesigns key architectural decisions to solve long-standing problems in C++ tooling.
Why clice?
Some problems in C++ tooling require architectural changes that cannot be easily retrofitted into existing language servers. clice addresses these from the ground up:
Template intelligence — Type vec2[0]. inside a template body and get full completions. clice uses pseudo-instantiation to resolve dependent types through nested typedefs and template specializations without needing concrete type arguments. Types like std::vector<std::vector<T>>::reference resolve to std::vector<T>&, enabling completion, hover, and go-to-definition inside generic code.
Compilation context — A first-class concept in clice. For source files, switch between different compilation commands (e.g. different build configurations). For header files, switch which source file provides the including context (preprocessor state, preceding declarations). This handles non-self-contained headers and context-dependent macros naturally, with automatic context switching as you navigate.
C++20 named modules — Parallel module compilation driven by a dependency-aware compile graph with interest-counted cancellation. Pre-compiled module interfaces (BMIs) are cached across editor sessions, so reopening a project skips redundant builds. The LSP layer provides module name completion on import statements and module-aware semantic highlighting.
Getting Started
Install
Download the latest binary from the releases page, or build from source.
Platforms: Linux (x64, ARM64), macOS (x64, ARM64), Windows (x64, ARM64)
Editor Setup
| Editor | Setup |
|---|---|
| VS Code | Install the clice extension from the Marketplace |
| Neovim | Add editors/nvim to your runtime path: vim.opt.rtp:append("/path/to/clice/editors/nvim") |
| Zed | Load editors/zed as a local extension |
| Other | Any LSP client works — point it at clice server |
Project Setup
clice reads a compilation database to understand your project. For CMake:
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
By default clice searches the workspace root and its immediate subdirectories (e.g. build/) for compile_commands.json. See configuration for custom paths and other build systems.
Note
clice is approaching its first stable release. Most features work well, but some edge cases remain. Bug reports via issues are welcome.
Documentation
Full docs at docs.clice.io/clice covering configuration, architecture, and the feature checklist.
Contributing
See the contribution guide or join our Discord.
pixi run build # configure + build
pixi run test # unit + integration + smoke tests