Need help with ctags?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

4.7K Stars 468 Forks GNU General Public License v2.0 9.1K Commits 197 Opened issues


A maintained ctags implementation

Services available


Need anything else?

Contributors list

Universal Ctags

Coverity Scan Build Status Coverage Status Build status RTD build status CircleCI Build Status GitHub Actions/VALGRIND

Universal Ctags (abbreviated as u-ctags) is a maintained implementation of

generates an index (or tag) file of language objects found in source files for programming languages. This index makes it easy for text editors and other tools to locate the indexed items.

Exuberant Ctags (e-ctags) maintained by Darren Hiebert, the ancestor of Universal Ctags, improved traditional

with multi-language support, the ability for the user to define new languages searched by regular expressions (called optlib in Universal Ctags), and the ability to generate emacs-style TAGS files. But the activity of the project unfortunately stalled.

Universal Ctags has the objective of continuing the development of Exuberant Ctags. Reza Jelveh [email protected] initially created a personal fork of Exuberant Ctags on GitHub. As interest and participation grew, it was decided to move development to a dedicated project as Universal Ctags. The goal of this project is to maintain a common/unified working space where people interested in making ctags better can work together.

Some of major features of Universal Ctags are;

  • more numbers of improved language support
    • new extended C/C++ language parser, etc.
  • fully extended optlib (a feature to define a new language parser from a command line)
  • interactive mode (experimental)

The latest build and package

If you want to try the latest Universal Ctags without building it yourself...


Daily builds are available at the ctags-win32 project. Go to the releases page to download zip packages.


See Homebrew Tap for Universal Ctags


Go to ctags-snap and clone the

repo. Then, follow instructions to build the snap package of Universal Ctags. Snapcraft will automatically fetch the source code from GitHub.

How to build and install

To build with Autotools (Autoconf, Automake, and Libtool) on GNU/Linux, OSX, or Windows 10 WSL,

    $ git clone
    $ cd ctags
    $ ./
    $ ./configure --prefix=/where/you/want # defaults to /usr/local
    $ make
    $ make install # may require extra privileges depending on where to install


for more information.

To build on Windows, see

for more information.

To build on OSX, see

for more information.


The primary documents of Universal Ctags are man pages. Users should first consult the ctags(1), and other man pages if necessary.

Universal Ctags Hacking Guide, which also includes the man pages, is primarily for developers and provides additional information to the man pages, including experimental features.

See also

on this repository.

Differences from exuberant-ctags

You may be interested in how Universal Ctags is different from Exuberant Ctags. See ctags-incompatibilities(7) and Introduced changes for details.

The most significant incompatible changes:

  • Universal Ctags doesn't load

    at starting up time. Instead, it loads
  • Universal Ctags is more strict about characters that can be used in kind letters and kind names than Exuberant-ctags.

    • The letter must be an alphabetical character (
      is reserved for
    • The first character of the name must be alphabetic, and the rest characters must be alphanumeric (

The detailed background is explained in #1737.

If you want to reuse your

written for Exuberant-ctags, you must review kind letters and names defined with
options. When updating the definitions, using
option is appreciated.

Pull-requests are welcome!

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.