explaingit

universal-ctags/ctags

7,182CAudience · developerComplexity · 2/5Setup · easy

TLDR

Universal Ctags is a command-line tool that indexes your source code so editors like Vim and Emacs can instantly jump to function definitions, autocomplete symbol names, and navigate large codebases without searching files manually.

Mindmap

mindmap
  root((repo))
    What It Does
      Index source symbols
      Generate tags file
      Support custom parsers
    Editor Support
      Vim
      Emacs
      Other tag-aware editors
    Install Options
      Homebrew Mac
      Windows daily builds
      Snap Linux
    Audience
      Developers
      Editor power users
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Generate a tags index for a large C or Python project so Vim can jump to any function definition with a single keystroke

USE CASE 2

Define a custom language parser using optlib to index symbols in a language or file format that Universal Ctags does not support by default

USE CASE 3

Replace Exuberant Ctags with Universal Ctags in an existing editor setup to get support for more modern languages

Tech stack

CAutotoolsSnap

Getting it running

Difficulty · easy Time to first run · 5min

On Mac install via Homebrew, on Windows use prebuilt daily binaries from the companion project.

In plain English

Universal Ctags is a command-line tool that reads source code files and produces an index, sometimes called a tags file, listing every significant symbol it finds: function names, class definitions, variable declarations, and similar constructs. Text editors and code navigation tools load this index to let users jump directly to where a function is defined, autocomplete symbol names, and search across a codebase without reading files manually. The project is a maintained continuation of an older tool called Exuberant Ctags, which had stopped receiving updates. Universal Ctags picked up where that project left off, adding support for more programming languages, extending the ability to define custom language parsers through a feature called optlib, and keeping up with changes in modern codebases. The tool works by running it against a directory of source files. It outputs a tags file that editors like Vim, Emacs, and many others know how to read. Once the index exists, navigating code becomes faster because the editor can look up a symbol's location in the tags file rather than scanning files one by one. Universal Ctags is written in C and builds using the standard Autotools toolchain on Linux and Mac. On Windows, pre-built daily binaries are available from a companion project. Mac users can install it through Homebrew. There is also a Snap package for Linux distributions that support Snap. If you used Exuberant Ctags before, the README notes a few incompatibilities: the config file location changed from ~/.ctags to ~/.ctags.d/*.ctags, and the rules for valid kind letters and kind names are stricter. A separate document lists the full set of differences between the two versions. The project primarily targets developers who work with editors that support tag-based navigation. It has no graphical interface and no installer wizard, usage is through the command line.

Copy-paste prompts

Prompt 1
How do I use Universal Ctags to generate a tags file for my entire project directory and configure Vim to use it for jump-to-definition navigation?
Prompt 2
How do I write a custom optlib parser in Universal Ctags to index symbols from a domain-specific file format?
Prompt 3
I am migrating from Exuberant Ctags to Universal Ctags, what config file path changes and syntax differences do I need to update to avoid breaking my setup?
Open on GitHub → Explain another repo

← universal-ctags on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.