CLANGD(1)

πŸ“¦
version 20.1.8 Β· 4 versions
, in ubuntu stonking

πŸ’– CLANGD πŸ’–

okay bestie, welcome to the clangd manual page, straight from the User Commands corner of the universe ✨ this is the page for clangd 20, and no cap, it's a lot β€” but I got you, we're going through every single flag together 🫢


🌸 NAME 🌸

clangd β€” manual page for clangd 20 πŸ’…


✨ DESCRIPTION ✨

OVERVIEW: clangd is a language server that provides IDE-like features to editors πŸ‘‘

Real talk: you should be using it via an editor plugin, not by yeeting it at your terminal directly. It's literally not built for that vibe. For more info, go look at:

https://clangd.llvm.org/
https://microsoft.github.io/language-server-protocol/

clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment variable πŸŽ€ (yes, the env var is real, it's giving main character energy)

USAGE: clangd [options]

OPTIONS:


πŸ”§ GENERIC OPTIONS πŸ”§

  • --help β€” Show you the available options. And if that's not enough for you (valid), --help-hidden shows more πŸ‘€
  • --help-list β€” Show you a list of the available options. If you want more, --help-list-hidden has you covered ✨
  • --version β€” Print the version of this program. Simple. Iconic. Slay πŸ’…

🧚 clangd compilation flags options 🧚

  • --compile-commands-dir=<string> β€” Point clangd at a path where it should go looking for compile_commands.json πŸ“‚ If that path is invalid, clangd will look in the current directory and in the parent paths of each source file instead β€” it's flexible like that.
  • --query-driver=<string> β€” A comma separated list of globs that white-lists gcc-compatible drivers that are safe to execute ⚠️ Drivers matching any of these globs will be used to extract system includes. For example: /usr/bin/**/clang-*,/path/to/repo/**/g++-*

πŸ‘‘ clangd feature options πŸ‘‘

  • --all-scopes-completion β€” If set to true, code completion will include index symbols that are not defined in the scopes (e.g. namespaces) visible from the code completion point. Such completions can insert scope qualifiers πŸ”₯
  • --background-index β€” Index your project code in the background and persist that index on disk. Obsessed with this one honestly πŸ’Ύ
  • --background-index-priority=<value> β€” Thread priority for building the background index. Heads up bestie: the effect of this flag is OS-specific πŸ™ˆ
    • =background β€” Minimum priority, runs on idle CPUs. May leave 'performance' cores unused 😴
    • =low β€” Reduced priority compared to interactive work.
    • =normal β€” Same priority as other clangd work.
  • --clang-tidy β€” Enable clang-tidy diagnostics βœ…
  • --completion-style=<value> β€” Granularity of code completion suggestions πŸŽ€
    • =detailed β€” One completion item for each semantically distinct completion, with full type information πŸ”
    • =bundled β€” Similar completion items (e.g. function overloads) are combined. Type information shown where possible 🎁
  • --experimental-modules-support β€” Experimental support for standard C++ modules πŸ§ͺ (experimental! be aware!)
  • --fallback-style=<string> β€” The clang-format style to apply by default when no .clang-format file is found πŸ’„
  • --function-arg-placeholders=<string> β€” When disabled (0), completions contain only parentheses for function calls. When enabled (1), completions also contain placeholders for method parameters 🫢
  • --header-insertion=<value> β€” Add #include directives when accepting code completions πŸ“₯
    • =iwyu β€” Include what you use. Insert the owning header for top-level symbols, unless the header is already directly included or the symbol is forward-declared.
    • =never β€” Never insert #include directives as part of code completion 🚫
  • --header-insertion-decorators β€” Prepend a circular dot or space before the completion label, depending on whether an include line will be inserted or not ⭐
  • --import-insertions β€” If header insertion is enabled, add #import directives when accepting code completions or fixing includes in Objective-C code 🍎
  • --limit-references=<int> β€” Limit the number of references returned by clangd. 0 means no limit (default=1000) πŸ”’
  • --limit-results=<int> β€” Limit the number of results returned by clangd. 0 means no limit (default=100) πŸ”’
  • --project-root=<string> β€” Path to the project root. Requires remote-index-address to be set πŸ”—
  • --remote-index-address=<string> β€” Address of the remote index server 🌐
  • --rename-file-limit=<int> β€” Limit the number of files to be affected by symbol renaming. 0 means no limit (default=50) 🏷️

🌈 clangd miscellaneous options 🌈

  • --check[=<string>] β€” Parse one file in isolation instead of acting as a language server. Super useful to investigate/reproduce crashes or configuration problems πŸ•΅οΈ With --check=<filename>, it attempts to parse a particular file.
  • --enable-config β€” Read user and project configuration from YAML files πŸ“„ Project config is from a .clangd file in the project directory. User config is from clangd/config.yaml in the following directories:
    • Windows: %USERPROFILE%\AppData\Local
    • Mac OS: ~/Library/Preferences/
    • Others: $XDG_CONFIG_HOME, usually ~/.config

Configuration is documented at https://clangd.llvm.org/config.html πŸ“š

  • -j <uint> β€” Number of async workers used by clangd. The background index also uses this many workers πŸ§‘πŸ€πŸ§‘
  • --malloc-trim β€” Release memory periodically via malloc_trim(3) 🧹
  • --pch-storage=<value> β€” Storing PCHs in memory increases memory usage, but may improve performance βš–οΈ
    • =disk β€” store PCHs on disk πŸ’½
    • =memory β€” store PCHs in memory 🧠

πŸ’œ clangd protocol and logging options πŸ’œ

  • --log=<value> β€” Verbosity of log messages written to stderr πŸ“
    • =error β€” Error messages only 🚨
    • =info β€” High level execution tracing πŸ”Ž
    • =verbose β€” Low level details πŸ—£οΈ
  • --offset-encoding=<value> β€” Force the offsetEncoding used for character positions. This bypasses negotiation via client capabilities 🎯
    • =utf-8 β€” Offsets are in UTF-8 bytes
    • =utf-16 β€” Offsets are in UTF-16 code units
    • =utf-32 β€” Offsets are in unicode codepoints
  • --path-mappings=<string> β€” Translates between client paths (as seen by a remote editor) and server paths (where clangd sees files on disk) πŸ—ΊοΈ Comma separated list of '<client_path>=<server_path>' pairs, the first entry matching a given path is used. e.g. /home/project/incl=/opt/include,/home/project=/workarea/project
  • --pretty β€” Pretty-print JSON output 🌸 (your eyes will thank you)

and that's the whole page bestie, you ate that 🫢 this was clangd 20, dated September 2026, living in the User Commands family β€” go forth and be the main character of your own editor πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from