MCPcopy Create free account
hub / github.com/clice-io/clice

github.com/clice-io/clice @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
2,662 symbols 9,056 edges 333 files 593 documented · 22% updated 3d agov0.1.0-alpha.4 · 2025-12-21★ 1,26251 open issues

Browse by type

Functions 2,129 Types & classes 533
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

clice

C++ Standard GitHub license Actions status Documentation Ask DeepWiki Discord

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 serve

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

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 1,073
Function 1,056
Class 482
Enum 48
Interface 3

Languages

C++83%
Python16%
TypeScript1%
Rust1%

Modules by API surface

src/semantic/ast_utility.cpp77 symbols
src/semantic/selection.cpp63 symbols
tests/unit/server/worker_pool_tests.cpp49 symbols
src/semantic/find_target.cpp48 symbols
src/feature/hover.cpp47 symbols
src/server/protocol/agentic.h46 symbols
src/index/usr_generation.cpp42 symbols
tests/integration/agentic/test_agentic.py40 symbols
src/semantic/resolver.cpp40 symbols
src/feature/inlay_hints.cpp40 symbols
src/compile/compilation_unit.cpp38 symbols
tests/integration/utils/client.py37 symbols

For agents

$ claude mcp add clice \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page