Getting Started
Installation
Section titled “Installation”# Linux / macOScurl -fsSL https://raw.githubusercontent.com/standardbeagle/lci-cpp/main/install.sh | sh# Windows (PowerShell)irm https://raw.githubusercontent.com/standardbeagle/lci-cpp/main/install.ps1 | iexBoth detect your OS/arch, download the matching release binary, and
install it (/usr/local/bin or ~/.local/bin on Unix;
%LOCALAPPDATA%\Programs\lci on Windows). Override with LCI_PREFIX;
pin a version with LCI_VERSION=<version>.
# Linux: tarball or Debian packagecurl -fLO https://github.com/standardbeagle/lci-cpp/releases/download/v<version>/lci-<version>-Linux.tar.gztar -xzf lci-<version>-Linux.tar.gzsudo install lci-<version>-Linux/bin/lci /usr/local/bin/
# orsudo dpkg -i lci-<version>-Linux.deb
lci --versionlci search "myFunction"Updating
Section titled “Updating”lci update # self-update to the latest releaselci update --check # report current vs latest without installinglci update --version <version> # install a specific releaselci update works regardless of how lci was installed.
Building from source
Section titled “Building from source”Toolchain: GCC 13+ or Clang 17+, CMake 3.25+, vcpkg, Ninja.
cmake --preset release \ -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmakecmake --build build/release --parallel./build/release/src/lci --versionInstall and package the build:
cd build/releasesudo cmake --install .cpack -G TGZ # produces lci-<version>-Linux.tar.gzcpack -G DEB # produces lci-<version>-Linux.debThe CPack output contains only bin/lci. Tree-sitter grammars are statically
linked. A vcpkg build, which is how releases are made, links its other libraries
statically too and leaves libc, libm, libstdc++ and libgcc_s dynamic. Release
binaries need glibc 2.38 or newer (Ubuntu 24.04 or equivalent). The .deb and
.rpm declare their dependencies from what the built binary links.
Running the test suite
Section titled “Running the test suite”cmake --build build/release --parallelctest --preset release --parallel $(nproc)The preset excludes the separately gated benchmark target. Run
./build/release/tests/lci_benchmarks explicitly for performance checks.
Your first search
Section titled “Your first search”lci search "myFunction"Full CLI reference: lci --help or lci <command> --help, or see
CLI Usage.
Synonyms
Section titled “Synonyms”.lci.kdl accepts a top-level synonyms block that widens semantic search
expansion. Children are group <words…> (treat the listed words as
synonyms of each other), clear <word> (drop a word from any group), and a
leading clear-all (discard the built-in table before applying the rest of
the block):
synonyms { clear-all group "get" "fetch" "retrieve" group "delete" "remove" "del" clear "add"}An unrecognized child name is a config error. Synonym expansion only
applies when search’s semantic option is on (the default) and no
explicit patterns were given.
Framework naming conventions
Section titled “Framework naming conventions”The naming analyzer allows PascalCase function components in JavaScript, TSX,
Vue, and Svelte files by default. This covers the component naming used by
React, Preact, Solid, Qwik, Vue, and Svelte without disabling checks for
misspellings or obscure terms elsewhere in the name. Plain .ts, .mts, and
.cts server files retain the normal verb-led function checks.
Replace the default extension list in .lci.kdl when a project uses
PascalCase noun-named functions in other file types:
naming { component_function_extensions ".jsx" ".tsx" ".custom"}Extensions are case-insensitive and must begin with a dot. Declaring the key replaces the built-in list instead of extending it.