A cat(1) clone with wings

8 releases (4 breaking)

new 0.5.0 Aug 19, 2018
0.4.1 May 31, 2018
0.3.0 May 8, 2018
0.2.3 May 3, 2018
0.1.0 Apr 22, 2018

#21 in Command line utilities

Download history 125/week @ 2018-05-27 236/week @ 2018-06-03 173/week @ 2018-06-10 116/week @ 2018-06-17 77/week @ 2018-06-24 142/week @ 2018-07-01 138/week @ 2018-07-08 84/week @ 2018-07-15 94/week @ 2018-07-22 104/week @ 2018-07-29 106/week @ 2018-08-05 81/week @ 2018-08-12 83/week @ 2018-08-19

519 downloads per month

bat - a cat clone with wings
Build Status license Version info
A cat(1) clone with syntax highlighting and Git integration.

Key FeaturesHow To UseInstallationCustomizationProject goals, alternatives

Syntax highlighting

bat supports syntax highlighting for a large number of programming and markup languages:

Syntax highlighting example

Git integration

bat communicates with git to show modifications with respect to the index (see left side bar):

Git integration example

Automatic paging

bat can pipe its own output to less if the output is too large for one screen.

File concatenation

Oh.. you can also use it to concatenate files :wink:. Whenever bat detects a non-interactive terminal, it will fall back to printing the plain file contents.

How to use

Display a single file on the terminal

> bat

Display multiple files at once

> bat src/*.rs

Read from stdin, explicitly specify the language

> yaml2json .travis.yml | json_pp | bat -l json
> curl -s | bat -l rs

As a replacement for cat:

bat >  # quickly create a new file

bat >

bat -n  # show line numbers (only)

bat f - g  # output 'f', then stdin, then 'g'.


From binaries

Check out the Release page for binary builds and Debian packages.

On Arch Linux

You can install via Pacman:

pacman -S bat

On FreeBSD

You can install a precompiled bat package with pkg:

pkg install bat

or build it on your own from the FreeBSD ports:

cd /usr/ports/textproc/bat
make install

On macOS

You can install bat with Homebrew:

brew install bat

From source

If you want to build to compile bat from source, you need Rust 1.26 or higher. You can then use cargo to build everything:

cargo install bat

On macOS, you might have to install cmake (brew install cmake) in order for some dependencies to be built.


Highlighting theme

Use bat --list-themes to get a list of all available themes for syntax highlighting. To select the TwoDark theme, call bat with the --theme=TwoDark option or set the BAT_THEME environment variable to TwoDark. Use export BAT_THEME="TwoDark" in your shells startup file to make the change permanent.

Output style

You can use the --style option to control the appearance of bats output. You can use --style=numbers,changes, for example, to show only Git changes and line numbers but no grid and no file header.

Adding new syntaxes / language definitions

bat uses the excellent syntect library for syntax highlighting. syntect can read any Sublime Text .sublime-syntax file and theme. To add new syntax definitions, do the following.

Create a folder with syntax definition files:

BAT_CONFIG_DIR="$(bat cache --config-dir)"

mkdir -p "$BAT_CONFIG_DIR/syntaxes"
cd "$BAT_CONFIG_DIR/syntaxes"

# Put new '.sublime-syntax' language definition files
# in this folder (or its subdirectories), for example:
git clone

Now use the following command to parse these files into a binary cache:

bat cache --init

Finally, use bat --list-languages to check if the new languages are available.

If you ever want to go back to the default settings, call:

bat cache --clear

Adding new themes

This works very similar to how we add new syntax definitions.

First, create a folder with the new syntax highlighting themes:

BAT_CONFIG_DIR="$(bat cache --config-dir)"

mkdir -p "$BAT_CONFIG_DIR/themes"
cd "$BAT_CONFIG_DIR/themes"

# Download a theme in '.tmTheme' format, for example:
git clone

# Create a link to specify the new default theme
ln -sf "sublime-snazzy/Sublime Snazzy.tmTheme" Default.tmTheme

# Update the binary cache
bat cache --init

Finally, use bat --list-themes to check if the new themes are available.

Note: Unlike for syntax definitions, adding custom themes currently removes all default themes. If you want to go back to the default themes, call bat cache --clear.

Using a different pager

bat uses the pager that is specified in the PAGER environment variable. If this variable is not set, less is used by default. If you want to use a different pager, you can either modify the PAGER variable or set the BAT_PAGER environment variable to override what is specified in PAGER. If you want to pass command-line arguments to the pager, you need to create a small shell script as a wrapper, for example:


less --tabs 4 -RF "$@"

Project goals and alternatives

bat tries to achieve the following goals:

  • Provide beautiful, advanced syntax highlighting
  • Integrate with Git to show file modifications
  • Be a drop-in replacement for (POSIX) cat
  • Offer a user-friendly command-line interface

There are a lot of alternatives, if you are looking for similar programs. See this document for a comparison.

MIT/Apache-2.0 license


Reverse deps