Bat – A Cat Clone with Syntax Highlighting and Git Integration

If you're a developer, you're probably familiar with frustration of working with command-line tools that don't offer a lot of visual feedback. This is particularly true when working with a text editor or terminal. However, there's a new tool out there that can help make your life a little bit easier. It's called Bat, and it's a cat clone with syntax highlighting and Git integration.

What is Bat?

Bat is a tool that works similarly to cat command in Unix, which concatenates and displays contents of one or more files. However, Bat takes things a step further by offering syntax highlighting for code files, as well as Git integration. This means you can use Bat to view code files and see syntax highlighting, even if you're not using an editor that supports syntax highlighting.

Bat is an open-source project that's available on GitHub. It's written in Rust, a systems programming language that's known for its speed and safety.

Syntax Highlighting

Syntax highlighting is one of key features of Bat. When you use Bat to view a file, it will automatically detect file type and apply syntax highlighting to make code easier to read. This can be especially helpful when you're working with large code files or unfamiliar code.

Bat supports syntax highlighting for a wide variety of languages, including −

  • JavaScript

  • Python

  • Ruby

  • Java

  • C#

  • PHP

  • HTML

  • CSS

To use Bat to view a file with syntax highlighting, simply type −

bat <filename>

Git Integration

Another key feature of Bat is its Git integration. Bat can be used to view Git diffs, which are changes between two versions of a file. This can be helpful when you're trying to understand what's changed between two versions of a file or when you're reviewing changes that someone else has made to a file.

To view a Git diff with Bat, simply type −

bat -p <filename>

This will show changes between current version of file and version in Git repository. You can also use Bat to view a specific version of a file from Git −

bat -p <filename>@<commit>

This will show contents of file at specified commit.

Other Features

In addition to syntax highlighting and Git integration, Bat has several other features that can be helpful for developers. These include −

Line numbering

Bat can display line numbers, which can be helpful when you're trying to reference a specific line of code.


If you're working with a large file, Bat can automatically paginate output so you can view it one page at a time.


Bat supports theming, so you can customize colors and appearance of syntax highlighting.


Here are a few examples of how you can use Bat in your development workflow −

Viewing a file with syntax highlighting −

bat app.js

Viewing a Git diff with syntax highlighting −

bat -p app.js

Viewing a specific version of a file from Git −

bat -p app.js@HEAD~2

Customizing appearance of syntax highlighting −

bat --theme TwoDark app.js

Some Additional Points


Installing Bat is fairly easy, as it's available on most package managers. Here's how you can install it on some of most popular package managers −

  • Homebrew (macOS) − brew install bat

  • APT (Debian/Ubuntu) − sudo apt install bat

  • YUM/DNF (Red Hat/Fedora/CentOS) − sudo dnf install bat or sudo yum install bat

  • Chocolatey (Windows) − choco install bat

Alternatively, you can download pre-built binaries for different platforms from Bat GitHub page.

Integration with Text Editors

While Bat is primarily a command-line tool, it can also be integrated with some text editors to provide syntax highlighting within editor itself. Here are some of text editors that support Bat integration −

Visual Studio Code

Bat syntax highlighting extension can be installed from Visual Studio Code Marketplace.

Sublime Text

Bat package can be installed via Package Control package manager.


Bat syntax highlighting plugin can be installed via Vim's plugin manager, such as Vundle or Pathogen.

Using Bat in Scripts

Bat can also be used in shell scripts to provide syntax highlighting for output of commands. Here's an example of how you can use Bat in a script that displays contents of a log file −



if [ -f "$LOGFILE" ]; then
   cat "$LOGFILE" | bat
   echo "Log file not found: $LOGFILE"

This script checks if log file exists, and if it does, it pipes contents to Bat for syntax highlighting.


While Bat is a powerful tool, it does have some limitations. Here are a few things to keep in mind when using Bat −


While Bat is generally fast, it can be slower than cat command when used on very large files.

Dependency on Git

Bat's Git integration requires that repository is available on local machine and that Git is installed.


Bat may not work correctly with some file types or languages that are not well-supported by tool.

Collaboration with Team Members

Bat's Git integration can be particularly helpful when collaborating with team members on a project. With Bat, you can easily view and review code changes, making it easier to merge changes and resolve conflicts. You can also use Bat to view commit history for a file and see who made changes and when.

Example of how you can use Bat

bat --git-log app.js

This will show a log of all commits that have affected app.js file, along with author, date, and commit message for each commit.

Using Bat with Pipes

Bat can also be used in combination with pipes to filter and manipulate output of other commands. For example, you could use Bat to view contents of a compressed file without having to first decompress it −

gzip -cd somefile.gz | bat

This will pipe output of gzip command (which decompresses somefile.gz file) to Bat, which will then display contents with syntax highlighting.

Customizing Syntax Highlighting

While Bat comes with several built-in themes, you can also customize syntax highlighting by creating your own theme file. theme file is a TOML-formatted file that specifies colors and styles for different syntax elements. Here's an example of a theme file that uses a custom color scheme −

keyword = "green"
string = "orange"
comment = "gray"

To use custom theme, you would specify it on command line with --theme option −

bat --theme mytheme.toml app.js


Bat is a useful tool for developers who work with command-line tools and want a little more visual feedback. Its syntax highlighting and Git integration make it a powerful alternative to cat command, and its other features, such as line numbering and theming, make it even more useful. If you're a developer who spends a lot of time in terminal, give Bat a try and see how it can improve your workflow.

Updated on: 10-Apr-2023


Kickstart Your Career

Get certified by completing the course

Get Started