by universal-ctags

universal-ctags / ctags

A maintained ctags implementation

4.0K Stars 414 Forks Last release: Not found GNU General Public License v2.0 8.0K Commits 3 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Universal Ctags

Build Status Coverity Scan Build Status Coverage Status Build status RTD build status CircleCI Build Status

Universal Ctags generates an index (or tag) file of language objects found in source files for many popular programming languages. This index makes it easy for text editors and other tools to locate the indexed items. Universal Ctags improves on traditional ctags because of its multilanguage support, its ability for the user to define new languages searched by regular expressions, and its ability to generate emacs-style TAGS files.

universal-ctags has the objective of continuing the development from what existed in the Sourceforge area. Github exuberant-ctags repository was started by Reza Jelveh and was later moved to the universal-ctags organization.

The goal of the project is preparing and maintaining common/unified working space where people interested in making ctags better can work together.

Getting PACKCC compiler-compiler

Packcc is a compiler-compiler; it translates .peg grammar file to .c file. packcc was originally written by Arihiro Yoshida. Its source repository is at sourceforge. It seems that packcc at sourceforge is not actively maintained. Some derived repositories are at github. Currently, our choice is https://github.com/enechaev/packcc. It is the most active one in the derived repositories.

The source tree of packcc is grafted at misc/packcc directory. Building packcc and ctags are integrated in the build-scripts of Universal-ctags.

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 ctags. Snapcraft will automatically fetch the source code from GitHub.

How to build and install

To build with Autotools, see

for more information. (To build on GNU/Linux, Autotools is your choice.) To build on Windows, see
for more information. To build on OSX, see
for more information.


Man page (ctags.1) is generated only in Autotools based building process. In addition rst2man command is needed.

rst2man is part of the python-docutils package on Ubuntu.


You may be interested in how universal-ctags is different from exuberant-ctags. The critical and attractive changes are explained in docs/*.rst. The preformatted version is available on line, https://docs.ctags.io/.

The most significant incompatible changes:

  • Universal-ctags doesn't load

    at starting up time. Instead, it loads
    . See the above web site and man pages (man/ctags.1.rst.in and man/ctags-incompatibilities.7.in in the source tree).
  • 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 (

See the web site and man pages. The detailed background is explained in #1737.

If you want to reuse your .ctags 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.