whatisgithub

What is ctags?

universal-ctags/ctags — explained in plain English

Analysis updated 2026-06-24

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

In one sentence

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

What do people build with it?

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

What is it built with?

CAutotoolsSnap

How does it compare?

universal-ctags/ctagsstanfordnlp/gloveaircrack-ng/aircrack-ng
Stars7,1827,2177,219
LanguageCCC
Setup difficultyeasymoderatemoderate
Complexity2/53/54/5
Audiencedeveloperresearcherops devops

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · easy Time to first run · 5min

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

So what is it?

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?

Frequently asked questions

What is ctags?

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.

What language is ctags written in?

Mainly C. The stack also includes C, Autotools, Snap.

How hard is ctags to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is ctags for?

Mainly developer.

Open on GitHub → Ask about another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.