GNU Project - Global / Savannah - Global

Top page

What's new





Known bugs


Mailing lists


'Source code reading' related sites

Comparison of source code reading tools

GNU Global benchmarks
Since I just ran some cscope benchmarks, I thought it'd be interesting to run the exact same tests with GNU global. Here I use the gtags-cscope frontend.
Gtags vs Ctags
We compared ctags vs gtags - see result.
'Comparison with Similar Tools' in the OpenGrok project site
This comparison table compares the function of LXR, ctags, cscope, ViewVC, OpenGrok and, Global which are typical tools for source code reading.
ctags < cscope < gtags
2 month ago, I thought ctags was totally enough for navigating through c codes. However, problems with ctags ...
Code Spelunking: Exploring Cavernous Code Bases
Code diving through unfamiliar source bases is something we do far more often than write new code from scratch--make sure you have the right gear for the job. (by George V. Neville-Neil)
Greg's source code navigation tools
This page is a log of an investigation he made of source code navigation and analysis packages.
Navigating Linux Source Code
With legacy code or large projects, navigation is a serious concern. Here are some tools that can help you find your way. (by James Bonang)

Global related articles

[youtube] Improve project workflow with GNU Global! (Emacs)
For this video I demo a little bit about GNU Global which has been the better tool in my experience for navigating symbols inside of emacs.
Using GNU Global with PostgreSQL
When you are coding in a source tree as big as PostgreSQL, you will at some point want to look into some kind of source code indexing.
EmacsWiki: Gnu Global
The GNU Global package is highly recommended for using a single tags file, covering all files in all subdirectories, that lives at the base of a source-code tree.
Using GNU Global with C++ and Git
GNU global is a very compelling way to quickly search your project for function definitions. Here I show how to index your code and update it automatically when using git.
C/C++ Development Environment for Emacs
This guide will help you to setup an efficient working C/C++ environment. It includes introduction of ggtags and helm-gtags.
GNU Global in wikipedia
This is a description page of GNU Global in wikipedia.
How to read other people's code.
Grep shortcomings, the program intend to read other people's code, you can consider the use like gtags to this tool. gtags GNU Global source code tag system. (by Chien-Hsing Wang)
Code Browsing with Emacs, Global, and Speedbar
This article details a simpler solution, using Emacs in combination with Global and Speedbar for code browsing.
The reason I shifted to gtags is because ctags is no longer sufficient to me. I have to trace the codes from large volume than last time, and they scatter into many different folders.
Source Code Navigation with VIM
In any case, after trying all the above tools (comment: other tag systems), I settled on gnu global, although it took some work to get it working with VIM and my setup. That's what this post is really about: documenting my usage of VIM and gnu global.

Global related tools

GTAGS Utility for Windows Text Editor 'Sakura'.
Tagls is a language server based on gtags.
This is a simple project to enable GNU global integration with Emacs xref, project, completion-at-point (capf) and imenu with emphasis on tramp support and simplicity.
Deoplete-gtags is a deoplete.nvim source for GNU Global.
Another Emacs frontend to GNU Global. It support wgrep in agtags-grep-mode.
Gutentags is a vim 8 dedicated plugin which will update gtags database in background automatically on file change.
Gtags for Gedit
GtagJump is a plug-in for gedit. It also can use etags, python-jedi and python-symtable.
GNU Global(gtags) support for Atom Editor.
GNU Global compatible source code tagging for golang.
Async plugin for Vim/NeoVim to ease the use of ctags/gtags. It is used for generate and maintain tags for you with multiple platform support, tested on Windows/Linux/macOS. gen_tags.vim will detect SCM(git, hg, svn) root and use it as the project root path. Generate/Update ctags and gtags will run in background.
GNU Global interface of ivy.
A pretty simple effective backend for Emacs 25 xref library, using GNU Global.
This Notepad++ plugin is simply a front-end to GNU Global.
Atom Gtags package
Gtags for Atom. This package uses GNU Global
bundler-gtags command creates gtags for all bundled gems. And also manages direnv settings exporting GTAGSLIBPATH so that editors can tag-jump directly to any gems source code from the bundler application.
C/C++ Intellisense with the help of GNU Global tags.
Provide Intellisense for C/C++ with the help of the GNU Global tool in Visual Studio Code.
alt-gtags.vim is a plugin that enables you to use GNU Global (gtags) in a Vim. if_pyth is required as it is written in Python.
unite-gtags is a unite.vim's source. Execute 'global' command and display the result in Unite interface.
This package is part of GNU ELPA. The goal is to make working with GNU Global in Emacs as effortless and intuitively as possible.
Ajoke is a tool for doing Java programming on Emacs. It is inspired by Emacs-Eclim, but does not depend on Eclipse. Instead, it uses GNU Global and ctags-exuberant extensively, with a bunch of Perl scripts.
Sanaly is a Source code ANALYsis web front end for GNU Global. It can treat source files written in python(.py), shell(.sh), perl(.pl) and ruby(.rb).
Vim's IDE Mode
Videm (Vim's IDE Mode) is a C/C++ IDE based on vim (will become a common IDE framework in future, I think). Videm use Cscope and GNU Global as symbol database.
Drush utilities for Emacs users
Currently the project provides two new Drush commands:
  • drush etags
  • drush gtags
They will run etags/gtags in your DRUPAL_ROOT and generate tag files for use in Emacs and it will help keep them up to date.
Multi windows tag stacked code browsing with global(gtag).
helm-gtags.el is GNU Global helm interface. helm-gtags.el is not compatible anything-gtags.el. But helm-gtags.el is designed for faster search than anything-gtags.el. Now it suppors TRAMP.
A pyQt GUI front-end for cscope, idutils and gtags. Written in python using pyQt, QScintilla libraries.
Notepad++ is a free source code editor and Notepad replacement that supports several languages. You can use Global using its GtagsPlugin.
jEdit is a mature programmer's text editor with hundreds (counting the time developing plug-ins) of person-years of development behind it. GlobalPlugin provides an interface to the GNU Global source tagging tool.
Auto Complete Mode is the most intelligent auto-completion extension for GNU Emacs. You can use this mode with Global.
GNU cflow
GNU cflow analyzes a collection of C source files and prints a graph, charting control flow within the program. You can include this output in your htags hypertext using '--cflow=(cflow's output)'.
OCaml Global Tagger
A plug-in for GNU Global which tags OCaml source code, using CamlP4 for versions 3.10 of OCaml and above. Provides ocaml_tags, which creates tags for ml and mli files, and an ogtags script that wraps a gtags call with the ocaml_tags plug-in.
CEDET is a Collection of Emacs Development Environment Tools written with the end goal of creating an advanced development environment in Emacs. The Symbol References tool in CEDET can use GNU Global as an external tool.
`anything-gtags-select' is `anything' interface of `gtags-find-tag'. `anything-c-source-gtags-select' is a source for `gtags-find-tag'. Replace *GTAGS SELECT* buffer with `anything' interface.
Xgtags.el provides an interface to the Global cross-referencing tools. While gtags.el, that comes with the Global distribution, is more a replacement for emacs' own find-tag/pop-tag-mark facility with some extra stuff, xgtags.el tries to permit the same functionality as gtags.el, but behaves more like xcscope.el, the emacs interface for cscope (
Doxygen Release 1.4.3 or higher
Doxygen is a documentation system for C++, Java, IDL and C.
Doxygen Release 1.4.3 includes new configuration option USE_HTAGS. When enabled in combination with SOURCE_BROWSER=YES, the source browser of htags(1) is used instead of doxygen's own. This facility needs GLOBAL-4.8.6 or the later.
Glimmer is a simple code editor for use with just about any programming language, written by Chris Phelps. It supports Global by script.
Vim editor
Vim is a vi clone written by Bram Moolenaar. You can use Global from this editor using gtags.vim (and|or) gtags-cscope.vim script.
Elvis editor
Elvis is a vi clone written by Steve Kirkendall, which has two variables "tagprg" and "tagprgonce" for running an external tag search program. You can use them with Global.
Emacs is the extensible, customizable, self-documenting real-time display editor, written by Richard Stallman. You can use this program as a front end of Global using gtags.el which is part of the Global package.
Less is a popular file viewer written by Mark Nudelman. In less-370 or the later, you can use Global from this tool.
ID utilities
ID utilities is a very powerful token tag system for generic text file. Its index file is very small and searching is very fast. You can call this command from global(1).
Bash is the shell, or command language interpreter, that will appear in the GNU operating system. You can use bash as a special shell for Global by Globash which is included in Global package.
Automake is a tool for automatically generating `' files compliant with the GNU Coding Standards. Automake supports Global by its GTAGS target.
FreeBSD build system
FreeBSD adopted Global as the standard source code tag system in its build system.
In addition to these, there are many forks and related tools of Global in Github. Please see also Projects which include 'GNU Global' in its title.

Plug-in parsers for Global

Tree-sitter based plug-in parser
This is a plug-in parser based on Tree-sitter a parser generator tool. For now, the project only supports C language.
Pygments Plug-in Parser for GNU Global
This software is a plug-in parser for GNU Global. Uses Pygments, which is a syntax highlighter written in Python, to extract tags. Supports wide variety of programming languages thanks to Pygments.


cmonster is a Python wrapper for the Clang C++ parser.
JFlex is a lexical analyzer generator for Java, written in Java. It is also a rewrite of the very useful tool. JLex which was developed by Elliot Berk at Princeton University.
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages. It includes a single unified parser for the language above.
Semantic is an infrastructure for parser based text analysis in Emacs. It is a lexer, parser-generator, and parser. It is written in Emacs Lisp and is customized to the way Emacs thinks about language files, and is optimized to use Emacs' parsing capabilities.
LangScan is a library to parse various languages. It is also part of Gonzui source code search engine.
GCC-XML is a C++ parser, the C++ front-end to GCC, which is currently able to deal with the language in its entirety.
This is a parser library aimed at developers of free IDEs. SourceBase aims to make parsing based features easy to implement. These include intellisense code completion, producing call graphs and dependency trees, etc.

Tagging systems

Dumb Jump is an Emacs "jump to definition" package with support for 40+ programming languages that favors "just working". This means minimal -- and ideally zero -- configuration with absolutely no stored indexes (TAGS) or persistent background processes.
Cquery is a highly-scalable, low-latency language server for C/C++/Objective-C. It is tested and designed for large code bases like Chromium. cquery provides accurate and fast semantic analysis without interrupting workflow.
Clangd understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more. clangd is a language server that implements the Language Server Protocol; it can work with many editors through a plugin. clangd is based on the Clang C++ compiler, and is part of the LLVM project.
clang-tags is a C / C++ source code indexing tool. Unlike many other indexing tools, clang-tags relies on the clang compiler (via the libclang interface) to analyse and index the source code base.
The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool.
Lctags is a source code tagging system using libclang to replace gtags(1). It can take advantage of compiler level information of clang.
An enhanced php ctags index file generator compatible with Using PHP_Parser as PHP syntax parsing backend, written in pure PHP. The generated ctags index file contains scope and access information about class's methods and properties.
Universal Ctags
The goal of the project is preparing and maintaining common/unified working space where people interested in making ctags better can work together.
Hothasktags generates ctags files for Haskell, with knowledge of import lists and qualified imports. It provides a smart go-to-definition for Vim, that almost always gets it right in the presence of multiple names from different modules.
Generate tag file for C++ source code using clang and python.
Cxxtags is a tool to tag(index) C/C++ source files based on clang. The major difference from ctags is C++ support. C++ syntax (ex. class, namespace, template, etc.) is supported(not fully yet though). And generated tag file is a sqlite3 database file. So you can access tag information via sqlite3 queries.
RTags is a client/server application that indexes c/c++ code and keeps a persistent in-memory database of references, declarations, definitions, symbolnames etc. It allows you to find symbols by name (including class and namespace scope). Most importantly we give you proper follow-symbol and find-references support.
jsctags is a ctags-compatible code indexing solution for JavaScript. Its interface and output are essentially identical to Universal Ctags.
Exuberant Ctags
Exuberant Ctags is a reimplementation of the ctags(1), written by Darren Hiebert. It is very robust in parsing code and supports many languages and many environments. Universal Ctags took this over already.
JTags is a ctags like program for Java language, written by Claudio Fleiner.
You can create a TAGS file by calling the etags program that comes as a part of the Emacs distribution. Usually, etags is compiled and installed when Emacs is built.

Tools similar to grep

Code Search is a tool for indexing and then performing regular expression searches over large bodies of source code. It is a set of command-line programs written in Go.
Pcregrep looks like it's just a regular grep, but with a PCRE regex engine.
Paragrep is a text search tool that operates at the paragraph level.
Cgrep is a grep tool suitable for searching in large code repositories. It supports 30 programming languages and searches that go beyond the simple pattern matching. It enables context-aware filtering and semantic searches through wildcard and combinators.
Grab is another faster grep alternative that tries to use multiple cores. It also uses parallel processing, mmap and other speedy tricks behind the scenes.
Greple is a search tools that lets you search for multiple keywords at a time.
Kaki is inspired by ack, and built on top of nodejs.
Beagrep can grep readlink in Android source code in 0.8 0.231 second when cache is hot, and about 11 seconds when cache is cold.
Ripgrep is a line-oriented search tool that recursively searches your current directory for a regex pattern while respecting your gitignore rules. ripgrep has first class support on Windows, macOS and Linux, with binary downloads available for every release. ripgrep is similar to other popular search tools like The Silver Searcher, ack and grep.
The Silver Searcher - ag
An attempt to make something better than ack, which itself is better than grep. It searches through code about 3x-5x faster than Ack.
A grep program configured the way the author like it, he wrote grin to help himself search directories full of source code. It is written in Python by Robert Kern.
A replacement for (or supplement to) the grep family, glark offers: Perl compatible regular expressions, highlighting of matches, context around matches, complex expressions (``and'' and ``or''), and automatic exclusion of non-text files.
Ack is a tool like grep, optimized for programmers. Designed for programmers with large heterogeneous trees of source code, ack is written purely in portable Perl 5 and takes advantage of the power of Perl's regular expressions.
Rak is a grep replacement in pure Ruby. It accepts Ruby syntax regular expressions and automatically recurses directories, skipping .svn/, .cvs/, pkg/ and more things you don't care about. It is based on the Perl tool ack by Andy Lester.
GNU grep
The grep command searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines.
GNU Global
The -g command of global(1) is also one of grep like tools.
  • Hierarchical search
  • Ignoring binary files and dot files automatically.
  • Ignoring specified files by two method (File list, Skip list).
  • POSIX 1003.2 regular expressions (Basic/Extended)
  • High performance literal search.
  • Change of search range (whole project, current directory, source files, text files)
  • Integration with idutils (index search for tokens)
  • Client/Server (TRAMP ready)


Code::Blocks is a free C++ IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable.
CodeLite is an open-source, cross platform IDE for the C/C++ programming languages (build and tested on Windows XP SP3, Windows Vista, Windows 7, Ubuntu 10.04, and Mac OSX 10.5.8).
VCF Builder IDE
The VCF Builder is an advanced development tool for creating C++ applications, and supporting a wide number of plug-ins for enhancing it's functionality.
NetBeans refers to both a platform framework for Java desktop applications, and an integrated development environment (IDE) for developing with Java, JavaScript, PHP, Python, Ruby, Groovy, C, C++, Scala, Clojure, and others.
Eclipse is a multi-language software development environment comprising an integrated development environment (IDE) and an extensible plug-in system.

Source code browsing Tools

Please see also Global related tools section.
CxxCodeBrowser is a source code indexer and code navigation tool for C/C++ code. This project was previously called sourceweb.
Sourcegraph OSS edition is a fast, open-source, fully-featured code search and navigation engine.
Code Insight
Code Insight is a Open source, cross platform software for developers to browse, edit and understand code easily.
Sourcetrail uses static analysis to provide code search and dependency visualization that lets you understand, refactor and maintain unfamiliar source code.
Hound provides a centralized web front-end to a regex-searchable text index of multiple Git repositories. It was created by engineers at Etsy to handle searching across codebases.
CodeDeopt is a source code search engine which supports Java, C, C++, C#, VB.NET, SQL.
The Elixir Cross Referencer
Elixir is a source code cross-referencer inspired by LXR. It's written in Python and its main purpose is to index every release of the Linux kernel while keeping a minimal footprint.
Tern is a stand-alone code-analysis engine for JavaScript. It is intended to be used with a code editor plugin to enhance the editor's support for intelligent JavaScript editing.
DXR is a source code cross-reference tool that uses static analysis data collected by instrumented compilers.
Go Oracle
A new tool built atop the static analysis libraries under construction in the repository. The oracle is designed to answer, quickly and precisely, a range of questions about your Go program, such as "where can this dynamic call dispatch to?" or "who sends values on this channel?".
Erlcscope builds a cscope compatible database for erlang files. The database can be used with any program which supports cscope along with the standard cscope -d command.
Woboq Code Browser
The Woboq Code Browser is a web-based code browser for C/C++ projects.
A code-understanding, code-browsing or code-search tool. This is a tool to index, then query or search C, C++, Java and Python source code. It builds upon the databases of cscope and ctags, and provides a nice GUI tool.
Source code search engine based upon OpenGrok. It provide simplified interface to search large scale source code tree.
SrcExpl (Source Explorer) is a source code explorer that provides context for the currently selected keyword by displaying the function or type definition or declaration in a separate window. This plugin aims to recreate the context window available in the IDE known as "Source Insight".
Code Search
Code Search is a tool for indexing and then performing regular expression searches over large bodies of source code. It is a set of command-line programs written in Go. Binary downloads are available for those who do not have Go installed.
It is line-oriented source code search engine and search app. It is possible to find the line containing the desired keyword from the order of several tens of thousands of files instantly.
This project provides the ability to generate call graphs to aid the task of understanding code. It uses a highly modular set of collection methods and can be adapted to support any language although only C and C++ are currently supported. Each collection method has different advantages and disadvantages.
Silent Bob
The SilentBob is yet another indexing tool helping you to find your way through the software source code. Although SilentBob is also able to index sources in many popular programming languages, currently C/C++ is the most functional back-end.
OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It can understand various program file formats and version control histories like SCCS, RCS, CVS and Subversion. It is written in Java.
Gonzui is a source code search engine for accelerating open source software development. You can use this tool for your local source code.
PHPXref is a developer tool that's designed to ease the process of working on large PHP projects by making it very fast and easy to browse the code documentation along with the code itself.
ncc is a compiler that produces program analysis information. ncc is a decent replacement of cflow and cscope able to analyse any program using the gcc compiler.
A general purpose source code indexer and cross-referencer that provides web-based browsing of source code with links to the definition and usage of any identifier. Supports multiple languages.
TagSearch is a command line tool for searching Tags in Exuberant ctags Files. - Search for special tag kind (classes, variable definitions ...) - configurable output format - search case sensitive/insensitive - search for partial or full Match.
Freescope is a programmer tool that provides source code browsing on UNIX-like operating systems. It is a clone of the cscope program but has its own unique features such as symbol completion and easy result browsing.
KScope is a KDE front-end to Cscope. It provides a source-editing environment for large C projects, such as the Linux kernel.
The "Tag List" plug-in is a source code browser for the Vim editor. It provides an overview of the structure of source code files and allows you to efficiently browse through source code files in different programming languages.
Cxref is a C source code cross referencing and documenting program for UNIX, written by Andrew M. Bishop. Cxref makes both html and latex style document.
Sapid (Sophisticated API for software Development) is a CASE tool platform based on Sophisticated Software Repository, by Nagoya University.
Cscope is a developer's tool for browsing program code. The cscope code has been released as Open Source by Santa Cruz Operation, Inc. (SCO) under the BSD license.
Cbrowser is a graphical C/C++ source code searching and browsing tool, and a hierarchical function call viewer, written by Chris Felaco.
Source-Navigator is a source code analysis tool by Source-Navigator Team. With it, you can edit your source code, display relationships between classes and functions and members, and display call trees. It is distributed under GPL.
hypersrc is an open-source GUI program for browsing source code. It displays a list of sorted source code tags and a tree view of functions. A programmer can click a tag to hyperlink to its line in a source code file.
ECB(Emacs Code Browser)
ECB is source code browser for Emacs. It is a global minor-mode which displays a couple of windows that can be used to browse directories, files and methods. It supports method parsing for Java, C, C++, Elisp etc.
Htmlfontify provides a means of converting individual emacs buffers, source files, or entire source trees to html, preserving formatting and emacs colourisation / syntax highlighting as much as possible through careful application of CSS style-sheets and html tags.
GNU Source-highlight
Source-highlight, given a source file, produces a document with syntax highlighting. This package can handle Java, Javascript, C,C+, Prolog, Perl, Php3, Python, Flex, ChangeLog and Ruby as source languages, and HTML, XHTML and ANSI color escape sequences as output formats.

Documentation systems for source code

cldoc is a Clang based documentation generator for C and C++. cldoc tries to solve the issue of writing C/C++ software documentation with a modern, non-intrusive and robust approach.
phpDocumentor is the world standard auto-documentation tool for PHP. Written in PHP, phpDocumentor can be used directly from the command-line, or through an easy to use web interface.
ROBODoc is a documentation tool. It extracts specially formatted comment headers from the source file and puts them in a separate file. ROBODoc thus allows you to include the program documentation in the source code and avoid having to maintain two separate documents.
Doxygen is a documentation system for C++, Java, IDL (Corba, Microsoft and KDE-DCOP flavors) and C. You can select output format in HTML, LaTeX, RTF (MS-Word), PostScript, hyperlinked PDF, compressed HTML, and Unix man pages.
Synopsis is a general source code documentation tool. By means of a modular structure it adapts to different styles of embedded documentation, different programming languages and various output formats. It scales well with the size of the project by allowing processing to be controlled by Makefiles.
CWEB is a version of WEB for documenting C, C++, and Java programs. WEB was adapted to C by Silvio Levy in 1987, and since then both Knuth and Levy have revised and enhanced the system in many ways, notably to support C++ and ANSI C. Thus CWEB combines TeX with today's most widely used professional programming languages.

Hypertext of source code

Elixir Linux Cross Referencer
A hypertext presentation of the Linux source code using the Elixir Cross Referencer.
The Linux Source Navigator
This is a CGI interface to browse the entire Linux kernel source, written by Ben Walter.
FreeBSD and Linux Kernel Cross-Reference
This site provides experimental source code browsing for the FreeBSD and Linux kernels by Robert Watson, based on the software provided by the LXR Project.
Cross-Referencing Linux
A hypertext presentation of the Linux source code by Arne Georg Gleditsch and Per Kristian Gjermshus using LXR.
UNIX kernel source tour!
This tour contains four kernels: FreeBSD, Linux, 4.3BSD and UNIX V7(historic UNIX).

UNIX and its clone's Kernel source code

The Unix Heritage Society
Unix Archive contains 5th, 6th and 7th Edition Unix and more. Now, you can use these source code under BSD style license.
CSRG Archive CD-ROMs
Kirk McKusick is selling a 4CD set of all the 4BSD releases from the Computer Systems Research Group. This also includes 1, 2, and 3BSD.
FreeBSD, NetBSD, OpenBSD
*BSD's source code is freely available from their FTP sites, and also available in CD sets. You can get the information from their web site.
The Linux Kernel Archives
This is the primary site for the Linux kernel source, but it has much more than just kernels.
GNU Hurd
The GNU Hurd is the GNU project's replacement for the Unix kernel. You can get the latest Hurd source code via the GNU Project's CVS server.
MINIX 3 is a new open-source operating system designed to be highly reliable, flexible, and secure. It is loosely based somewhat on previous versions of MINIX, but is fundamentally different in many key ways.
OpenIndiana is a community supported operating system, based on the illumos kernel. It seems that it is a successor of OpenSolaris created by Sun Microsystems.
[Top of page]
Copyright (c) 2000-2023 Tama Communications Corporation
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
[image of the globe]