1. Overview

OpenGrok is an open-source and powerful source code search and cross-reference engine. It allows us to explore, search, and navigate through the source code of various projects efficiently.

In this article, we’ll explore the features and benefits of OpenGrok and see how to leverage its capabilities for effective code browsing.

2. What Is OpenGrok?

OpenGrok is a fast and scalable source code search and cross-reference engine that provides a user-friendly web interface for exploring code repositories. It is developed in Java and supports various programming languages, making it versatile and suitable for diverse projects.

Here are some standout features of OpenGrok:

  • Cross-Referencing: It excels in creating cross-references for code elements and linking related functions, classes, and variables. It facilitates seamless code navigation, allowing us to gain insights into the relationship between different parts of the codebase.
  • Searching Capabilities: We can search for specific terms, methods, or symbols across the codebase. The results are displayed within context, providing a comprehensive overview of the instances where the term is used.
  • Syntax highlighting: OpenGrok enhances code readability by highlighting syntax for various programming languages. It aids in quickly identifying different elements in the code, making the reviewing process more efficient.

3. Installation

Setting up OpenGrok involves several steps, including installing the software, configuring it, indexing the source code, and deploying the web interface. OpenGrok requires Java 11 or later, a servlet container, and Universal ctags.

Depending on our application requirements, there are multiple ways to install OpenGrok.

3.1. Using Docker Image

We can use a Docker image for running the OpenGrok instance by pulling it locally:

$ docker pull opengrok/docker

3.2. Using Distribution Tar

We can download the latest version of OpenGrok suitable for our operating system from their repository. Let’s prepare the directories:

$ mkdir opengrok/{src,data,dist,etc,log}

After downloading the tar file, we can extract the archive to our preferred installation directory:

$ tar -C opengrok/dist --strip-components=1 -xzf opengrok-1.13.2.tar.gz

Copying the logging configuration:

$ cp opengrok/dist/doc/logging.properties opengrok/etc

We need to make sure to place the source.war file in a location where the application container can identify and deploy the web application. The release archive includes the WAR file, located within the lib directory:

$ cp opengrok/dist/lib/source.war /opt/homebrew/Cellar/tomcat/10.1.18/libexec/webapps

In the case of Tomcat 8, the path could be /opt/homebrew/Cellar/tomcat/10.1.18/libexec/webapps, though it may vary depending on the operating system.

4. Running OpenGrok

4.1. Using Docker Container

Running OpenGrok using a docker is a straightforward process. We can fire up an OpenGrok instance:

$ docker run -d -v <path/to/repository>:/opengrok/src -p 8080:8080 opengrok/docker:latest

The container makes OpenGrok available at http://localhost:8080/. The directory linked to /opengrok/src should have the projects we want to search (in subdirectories).

However, this image is a simple wrapper around the OpenGrok environment. We can consider it as a compact utility. The indexer and the web container are not set up to handle a lot of work at once.

4.2. Using Distribution Tar

To proceed with running OpenGrok in a standalone environment, the repository to be scanned must be present locally at location opengrok/src. Now, let’s execute the below command:

$ java \
    -Djava.util.logging.config.file=opengrok/etc/logging.properties \
    -jar opengrok/dist/lib/opengrok.jar \
    -c usr/local/bin/ctags \
    -s opengrok/src -d /opengrok/data -H -P -S -G \
    -W opengrok/etc/configuration.xml -U http://localhost:8080/source

The command mentioned above initiates the creation of the index, allows the index to generate the configuration file, and informs the web application that a new index is now accessible.

We can access the application at http://address:port/source, where the address and port depend on the application server configuration, and the source represents the WAR file name:

OpenGrok UI

We can see two repositories being available for code search, offering various options to provide flexibility in searching. Let’s now try to search keyword url in XML files only:

OpenGrok Search

The output shows a search for the url keyword in all XML files in both OpenGrok and hellogitworld repositories.

5. Conclusion

In this article, we explored the capabilities of OpenGrok—a potent source code search engine.

With efficient code search, cross-referencing, and support for multiple version control systems, OpenGrok emerges as an indispensable tool, fostering streamlined development and in-depth code exploration.

Course – LS (cat=Java)
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:


res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.