2018-05-22 21:54:34 +02:00
<p align="center">
<img src="doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
2020-08-02 21:53:59 +02:00
<a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
2018-05-30 21:02:40 +02:00
<img src="https://img.shields.io/crates/l/bat.svg" alt="license">
2018-05-30 21:10:14 +02:00
<a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
2018-05-22 21:54:34 +02:00
A <i>cat(1)</i> clone with syntax highlighting and Git integration.
</p>
2018-04-21 14:23:57 +02:00
2018-05-30 21:23:24 +02:00
<p align="center">
<a href="#syntax -highlighting">Key Features</a> •
<a href="#how -to-use">How To Use</a> •
<a href="#installation ">Installation</a> •
<a href="#customization ">Customization</a> •
2020-06-05 22:42:32 +02:00
<a href="#project -goals-and-alternatives">Project goals, alternatives</a><br>
2021-10-17 22:15:23 +03:00
[English]
2021-12-06 03:18:38 +08:00
[<a href="doc/README-zh.md">中文</a>]
2021-10-17 22:15:23 +03:00
[<a href="doc/README-ja.md">日本語</a>]
[<a href="doc/README-ko.md">한국어</a>]
[<a href="doc/README-ru.md">Русский</a>]
2018-05-30 21:23:24 +02:00
</p>
2018-04-22 15:30:28 +02:00
### Syntax highlighting
2018-05-07 20:06:01 +02:00
`bat` supports syntax highlighting for a large number of programming and markup
languages:
2018-04-22 15:30:28 +02:00
2018-04-26 00:02:53 +02:00

2018-04-22 15:30:28 +02:00
### Git integration
2018-05-07 20:06:01 +02:00
`bat` communicates with `git` to show modifications with respect to the index
2026-03-16 16:47:50 +08:00
(see left sidebar):
2018-04-26 00:02:53 +02:00
2018-04-26 00:03:25 +02:00

2018-04-22 16:15:07 +02:00
2018-11-11 13:19:34 +01:00
### Show non-printable characters
2018-11-11 14:28:18 +01:00
You can use the `-A` /`--show-all` option to show and highlight non-printable
characters:
2018-11-11 14:32:59 +01:00

2018-11-11 13:19:34 +01:00
2018-05-09 00:12:25 +02:00
### Automatic paging
2021-10-31 10:18:03 +02:00
By default, `bat` pipes its own output to a pager (e.g. `less` ) if the output is too large for one screen.
2020-11-20 11:25:45 -05:00
If you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.
If you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.
2018-05-09 00:12:25 +02:00
2020-11-20 11:25:45 -05:00
#### File concatenation
2018-05-09 00:12:25 +02:00
2020-11-20 11:25:45 -05:00
Even with a pager set, you can still use `bat` to concatenate files :wink:.
Whenever `bat` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `bat` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents, regardless of the `--pager` option's value.
2018-05-09 00:12:25 +02:00
2018-05-30 21:23:24 +02:00
## How to use
2018-05-09 00:33:49 +02:00
Display a single file on the terminal
2018-05-30 20:40:02 +02:00
```bash
2025-09-01 16:39:43 +02:00
bat README.md
2018-05-09 00:33:49 +02:00
```
Display multiple files at once
2018-05-30 20:40:02 +02:00
```bash
2025-09-01 16:39:43 +02:00
bat src/*.rs
2018-05-09 00:33:49 +02:00
```
2020-06-03 06:47:33 +01:00
Read from stdin, determine the syntax automatically (note, highlighting will
only work if the syntax can be determined from the first line of the file,
usually through a shebang such as `#!/bin/sh` )
2018-10-07 18:39:52 +02:00
```bash
2025-09-01 16:39:43 +02:00
curl -s https://sh.rustup.rs | bat
2018-10-07 18:39:52 +02:00
```
Read from stdin, specify the language explicitly
2018-05-09 00:33:49 +02:00
2018-05-30 20:40:02 +02:00
```bash
2025-09-01 16:39:43 +02:00
yaml2json .travis.yml | json_pp | bat -l json
2018-05-09 00:33:49 +02:00
```
2018-11-11 14:28:18 +01:00
Show and highlight non-printable characters:
```bash
2025-09-01 16:39:43 +02:00
bat -A /etc/hosts
2018-11-11 14:28:18 +01:00
```
2018-05-09 00:33:49 +02:00
2018-11-11 14:28:18 +01:00
Use it as a `cat` replacement:
2018-05-31 22:57:18 +02:00
```bash
bat > note.md # quickly create a new file
bat header.md content.md footer.md > document.md
bat -n main.rs # show line numbers (only)
2018-06-01 16:32:33 +02:00
bat f - g # output 'f', then stdin, then 'g'.
2018-05-31 22:57:18 +02:00
```
2018-05-09 00:33:49 +02:00
2019-02-11 21:38:18 +01:00
### Integration with other tools
2021-02-27 11:47:04 +01:00
#### `fzf`
You can use `bat` as a previewer for [`fzf` ](https://github.com/junegunn/fzf ). To do this,
2024-08-05 09:44:45 -04:00
use `bat` 's `--color=always` option to force colorized output. You can also use `--line-range`
2021-02-27 11:47:04 +01:00
option to restrict the load times for long files:
2021-10-31 10:18:03 +02:00
2021-02-27 11:47:04 +01:00
```bash
2023-08-02 00:28:26 -07:00
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
2021-02-27 11:47:04 +01:00
```
2021-10-31 10:18:03 +02:00
For more information, see [`fzf`'s `README` ](https://github.com/junegunn/fzf#preview-window ).
2021-02-27 11:47:04 +01:00
2019-02-11 21:38:18 +01:00
#### `find` or `fd`
You can use the `-exec` option of `find` to preview all search results with `bat` :
2021-10-31 10:18:03 +02:00
2019-02-11 21:38:18 +01:00
```bash
find … -exec bat {} +
```
2019-02-16 17:57:21 -08:00
If you happen to use [`fd` ](https://github.com/sharkdp/fd ), you can use the `-X` /`--exec-batch` option to do the same:
2021-10-31 10:18:03 +02:00
2019-02-11 21:38:18 +01:00
```bash
fd … -X bat
```
2019-09-18 14:10:11 -07:00
#### `ripgrep`
With [`batgrep` ](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md ), `bat` can be used as the printer for [`ripgrep` ](https://github.com/BurntSushi/ripgrep ) search results.
```bash
2019-09-21 09:01:54 +02:00
batgrep needle src/
2019-09-18 14:10:11 -07:00
```
2019-02-11 21:54:16 +01:00
#### `tail -f`
`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.
2021-10-31 10:18:03 +02:00
2019-02-11 21:54:16 +01:00
```bash
tail -f /var/log/pacman.log | bat --paging= never -l log
```
2021-10-31 10:18:03 +02:00
2019-02-11 21:54:16 +01:00
Note that we have to switch off paging in order for this to work. We have also specified the syntax
explicitly (`-l log` ), as it can not be auto-detected in this case.
2019-10-29 13:20:35 -07:00
#### `git`
2019-02-11 22:04:22 +01:00
You can combine `bat` with `git show` to view an older version of a given file with proper syntax
highlighting:
2021-10-31 10:18:03 +02:00
2019-02-11 22:04:22 +01:00
```bash
git show v0.6.0:src/main.rs | bat -l rs
```
2020-10-27 17:40:40 +01:00
#### `git diff`
You can combine `bat` with `git diff` to view lines around code changes with proper syntax
highlighting:
```bash
2020-10-29 19:37:12 +01:00
batdiff() {
2025-08-03 01:00:43 +08:00
git diff --name-only --relative --diff-filter= d -z | xargs -0 bat --diff
2020-10-29 19:37:12 +01:00
}
2020-10-27 17:40:40 +01:00
```
2020-10-29 19:37:12 +01:00
If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras` ](https://github.com/eth-p/bat-extras ).
2019-10-29 13:20:35 -07:00
2020-10-29 17:40:17 +01:00
If you are looking for more support for git and diff operations, check out [`delta` ](https://github.com/dandavison/delta ).
2019-02-11 22:01:03 +01:00
#### `xclip`
The line numbers and Git modification markers in the output of `bat` can make it hard to copy
the contents of a file. To prevent this, you can call `bat` with the `-p` /`--plain` option or
simply pipe the output into `xclip` :
2019-02-11 22:04:22 +01:00
```bash
2019-02-11 22:01:03 +01:00
bat main.cpp | xclip
```
`bat` will detect that the output is being redirected and print the plain file contents.
2019-08-31 14:32:37 +02:00
#### `man`
2019-09-21 08:51:26 +02:00
`bat` can be used as a colorizing pager for `man` , by setting the
`MANPAGER` environment variable:
2019-09-18 14:10:11 -07:00
2019-09-18 13:43:32 -07:00
```bash
2025-12-11 05:20:50 +01:00
export MANPAGER = "bat -plman"
2019-08-31 14:32:37 +02:00
man 2 select
```
2026-03-14 12:11:41 +05:30
(on some older Debian or Ubuntu releases, the executable is named `batcat` instead of `bat` )
2019-08-31 14:32:37 +02:00
2019-09-21 08:51:26 +02:00
If you prefer to have this bundled in a new command, you can also use [`batman` ](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md ).
2024-02-12 01:38:19 -08:00
Note that the [Manpage syntax ](assets/syntaxes/02_Extra/Manpage.sublime-syntax ) is developed in this repository and still needs some work.
2020-10-01 21:46:36 +02:00
2019-09-18 14:10:11 -07:00
#### `prettier` / `shfmt` / `rustfmt`
The [`prettybat` ](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md ) script is a wrapper that will format code and print it with `bat` .
2022-04-26 19:42:18 +02:00
#### Highlighting `--help` messages
You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
You can also use a wrapper around this:
```bash
# in your .bashrc/.zshrc/*rc
alias bathelp = 'bat --plain --language=help'
help() {
" $@ " --help 2>& 1 | bathelp
}
```
Then you can do `$ help cp` or `$ help git commit` .
2023-09-02 09:52:40 +02:00
When you are using `zsh` , you can also use global aliases to override `-h` and `--help` entirely:
2023-07-10 16:37:44 +02:00
```bash
2023-09-02 09:52:40 +02:00
alias -g -- -h= '-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help= '--help 2>&1 | bat --language=help --style=plain'
2023-07-10 16:37:44 +02:00
```
2025-03-28 22:01:23 +01:00
For `fish` , you can use abbreviations:
```fish
abbr -a --position anywhere -- --help '--help | bat -plhelp'
abbr -a --position anywhere -- -h '-h | bat -plhelp'
```
2023-07-10 16:37:44 +02:00
This way, you can keep on using `cp --help` , but get colorized help pages.
2026-03-28 16:34:28 -04:00
> [!TIP]
> To remove these abbreviations later, run:
> ```fish
> abbr -e -- --help
> abbr -e -- -h
> ```
> The `--` before the abbreviation name is required because `--help` and `-h` start with dashes, which would otherwise be interpreted as flags to `abbr` itself.
2024-10-01 14:16:38 -04:00
Be aware that in some cases, `-h` may not be a shorthand of `--help` (for example with `ls` ). In cases where you need to use `-h`
2025-10-18 05:13:18 +08:00
as a command argument you can prepend `\` to the argument (eg. `ls \-h` ) to escape the aliasing defined above.
2023-09-02 09:52:40 +02:00
2022-04-26 19:42:18 +02:00
Please report any issues with the help syntax in [this repository ](https://github.com/victor-gp/cmd-help-sublime-syntax ).
2019-09-18 14:10:11 -07:00
2018-04-22 16:15:07 +02:00
## Installation
2025-08-14 06:15:56 +02:00
<!--
Installation instructions need to:
* be for widely used systems
* be non-obvious
* be from somewhat official sources
-->
2023-11-13 09:47:25 +08:00
[](https://repology.org/project/bat-cat/versions)
2019-09-01 11:03:35 +02:00
2020-05-12 01:47:33 -07:00
### On Ubuntu (using `apt`)
2018-08-28 20:55:15 +02:00
*... and other Debian-based Linux distributions.*
2018-05-02 20:01:43 +02:00
2021-10-01 00:42:07 +02:00
`bat` is available on [Ubuntu since 20.04 ("Focal") ](https://packages.ubuntu.com/search?keywords=bat&exact=1 ) and [Debian since August 2021 (Debian 11 - "Bullseye") ](https://packages.debian.org/bullseye/bat ).
2020-04-16 23:57:44 -07:00
If your Ubuntu/Debian installation is new enough you can simply run:
2019-10-26 10:33:17 -04:00
```bash
2021-10-23 16:30:43 +05:30
sudo apt install bat
2019-10-26 10:33:17 -04:00
```
2026-03-14 12:11:41 +05:30
**Important** : On some older Ubuntu/Debian releases, the executable is installed as `batcat` instead of `bat` (due to [a name
clash with another package ](https://github.com/sharkdp/bat/issues/982 )). On newer releases, the executable is available as `bat` . If `bat --version` does not work after installation, try `batcat --version` instead. You can set up a `bat -> batcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:
2020-05-12 17:41:15 +02:00
``` bash
2020-05-12 18:35:35 +02:00
mkdir -p ~/.local/bin
2020-05-12 17:41:15 +02:00
ln -s /usr/bin/batcat ~/.local/bin/bat
` ``
2020-05-12 01:47:33 -07:00
2024-07-29 19:41:36 +02:00
an example alias for ` batcat` as ` bat`:
` ``bash
alias bat="batcat"
` ``
2020-05-12 17:42:52 +02:00
### On Ubuntu (using most recent ` .deb` packages)
*... and other Debian-based Linux distributions.*
2020-05-12 01:47:33 -07:00
2020-04-16 23:57:44 -07:00
If the package has not yet been promoted to your Ubuntu/Debian installation, or you want
the most recent release of ` bat`, download the latest ` .deb` package from the
[release page](https://github.com/sharkdp/bat/releases) and install it via:
2019-09-18 13:43:32 -07:00
` ``bash
2021-08-21 19:54:10 +02:00
sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
2018-08-28 20:55:15 +02:00
` ``
2018-04-26 00:02:53 +02:00
2019-06-10 19:42:32 -04:00
### On Alpine Linux
You can install [the ` bat` package](https://pkgs.alpinelinux.org/packages?name=bat)
from the official sources, provided you have the appropriate repository enabled:
` ``bash
apk add bat
` ``
2018-08-28 21:04:41 +02:00
### On Arch Linux
2018-05-01 08:04:40 +10:00
2023-12-01 20:26:35 +00:00
You can install [the ` bat` package](https://www.archlinux.org/packages/extra/x86_64/bat/)
2018-08-28 20:55:15 +02:00
from the official sources:
2018-05-01 08:04:40 +10:00
` ``bash
2018-06-08 09:34:57 +00:00
pacman -S bat
2018-05-01 08:04:40 +10:00
` ``
2018-12-02 21:02:56 +01:00
### On Fedora
2026-05-05 23:53:13 +01:00
You can install [the ` bat` package](https://packages.fedoraproject.org/pkgs/rust-bat/bat/) from the official sources:
2018-12-02 21:02:56 +01:00
` ``bash
2019-07-21 10:57:16 +02:00
dnf install bat
2018-12-02 21:02:56 +01:00
` ``
2019-06-09 18:10:44 +09:00
### On Gentoo Linux
You can install [the ` bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
from the official sources:
` ``bash
emerge sys-apps/bat
` ``
2018-08-28 21:04:41 +02:00
### On FreeBSD
2018-05-16 19:13:13 +02:00
You can install a precompiled [` bat` package](https://www.freshports.org/textproc/bat) with pkg:
2018-05-30 20:40:02 +02:00
` ``bash
2018-05-16 19:13:13 +02:00
pkg install bat
` ``
or build it on your own from the FreeBSD ports:
2018-05-30 20:40:02 +02:00
` ``bash
2018-05-16 19:13:13 +02:00
cd /usr/ports/textproc/bat
make install
` ``
2021-10-15 23:53:32 +01:00
### On OpenBSD
You can install ` bat` package using [` pkg_add(1)`](https://man.openbsd.org/pkg_add.1):
` ``bash
pkg_add bat
` ``
2018-10-11 20:05:17 +02:00
### Via nix
You can install ` bat` using the [nix package manager](https://nixos.org/nix):
` ``bash
nix-env -i bat
` ``
2018-11-06 15:53:39 +01:00
### On openSUSE
You can install ` bat` with zypper:
2019-09-18 13:43:32 -07:00
` ``bash
2018-11-06 15:53:39 +01:00
zypper install bat
` ``
2020-11-26 20:53:58 +05:30
### Via snap package
2021-02-15 22:39:26 +01:00
There is currently no recommended snap package available.
Existing packages may be available, but are not officially supported and may contain [issues](https://github.com/sharkdp/bat/issues/1519).
2020-11-26 20:53:58 +05:30
2020-10-03 21:05:46 +02:00
### On macOS (or Linux) via Homebrew
2020-10-03 20:23:58 +02:00
2022-10-07 22:53:03 -05:00
You can install ` bat` with [Homebrew](https://formulae.brew.sh/formula/bat):
2020-10-03 20:23:58 +02:00
` ``bash
brew install bat
` ``
2020-10-03 21:05:46 +02:00
### On macOS via MacPorts
2018-10-11 20:05:17 +02:00
2019-09-29 13:20:36 +02:00
Or install ` bat` with [MacPorts](https://ports.macports.org/port/bat/summary):
` ``bash
port install bat
` ``
2018-10-11 20:05:17 +02:00
### On Windows
2020-03-06 23:37:18 +01:00
There are a few options to install ` bat` on Windows. Once you have installed ` bat`,
take a look at the ["Using ` bat` on Windows"](#using-bat-on-windows) section.
2018-10-11 20:05:17 +02:00
2020-07-04 19:43:04 -06:00
#### Prerequisites
2025-05-01 19:10:33 +08:00
You will need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist#latest-microsoft-visual-c-redistributable-version)
2020-07-04 19:43:04 -06:00
2023-06-07 16:24:57 +02:00
#### With WinGet
You can install ` bat` via [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):
` ``bash
2023-09-29 17:49:21 -04:00
winget install sharkdp.bat
2023-06-07 16:24:57 +02:00
` ``
2020-03-06 23:37:18 +01:00
#### With Chocolatey
2018-10-11 20:05:17 +02:00
2020-03-06 23:39:17 +01:00
You can install ` bat` via [Chocolatey](https://chocolatey.org/packages/Bat):
2019-04-10 14:23:46 +02:00
` ``bash
2019-04-14 09:58:08 +02:00
choco install bat
2019-04-10 14:23:46 +02:00
` ``
2020-03-06 23:37:18 +01:00
#### With Scoop
2020-03-04 01:04:49 -08:00
2020-03-06 23:37:18 +01:00
You can install ` bat` via [scoop](https://scoop.sh/):
` ``bash
scoop install bat
` ``
#### From prebuilt binaries:
You can download prebuilt binaries from the [Release page](https://github.com/sharkdp/bat/releases),
2026-08-27 13:11:46 +03:00
You will need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) package.
2018-10-11 20:05:17 +02:00
2018-08-28 20:55:15 +02:00
### From binaries
Check out the [Release page](https://github.com/sharkdp/bat/releases) for
2018-10-05 14:01:46 -07:00
prebuilt versions of ` bat` for many different architectures. Statically-linked
2018-11-11 14:28:18 +01:00
binaries are also available: look for archives with ` musl` in the file name.
2018-08-28 20:55:15 +02:00
2018-04-30 15:40:51 +02:00
### From source
2025-10-19 20:57:44 +03:00
If you want to build ` bat` from source, you need Rust 1.79.0 or
2018-05-07 20:06:01 +02:00
higher. You can then use ` cargo` to build everything:
2018-04-25 20:49:49 +02:00
2025-05-18 21:00:59 -04:00
#### From local source
` ``bash
cargo install --path . --locked
` ``
> [!NOTE]
> The ` --path .` above specifies the directory of the source code and NOT where ` bat` will be installed.
> For more information see the docs for [` cargo install`](https://doc.rust-lang.org/cargo/commands/cargo-install.html).
#### From ` crates.io`
2018-05-30 20:40:02 +02:00
` ``bash
2020-04-27 23:43:18 +02:00
cargo install --locked bat
2018-04-26 00:02:53 +02:00
` ``
2018-04-30 16:03:33 +02:00
2020-10-15 09:10:29 +03:00
Note that additional files like the man page or shell completion
2025-05-18 21:00:59 -04:00
files can not be installed automatically in both these ways.
If installing from a local source, they will be generated by ` cargo`
and should be available in the cargo target folder under ` build`.
2020-10-01 21:16:10 +02:00
2025-05-18 21:00:59 -04:00
Furthermore, shell completions are also available by running:
2024-11-15 19:48:41 +01:00
` ``bash
bat --completion <shell>
# see --help for supported shells
` ``
2018-04-30 16:03:33 +02:00
## Customization
2018-05-30 21:32:40 +02:00
### Highlighting theme
Use ` bat --list-themes` to get a list of all available themes for syntax
2025-08-19 15:41:52 -05:00
highlighting. By default, ` bat` uses ` Monokai Extended` or ` Monokai Extended Light`
for dark and light themes respectively. To select the ` TwoDark` theme, call ` bat`
with the ` --theme=TwoDark` option or set the ` BAT_THEME` environment variable to
2018-09-20 14:50:54 +02:00
` TwoDark`. Use ` export BAT_THEME="TwoDark"` in your shell's startup file to
2024-08-05 09:44:45 -04:00
make the change permanent. Alternatively, use ` bat`'s
2024-08-05 09:41:18 -04:00
[configuration file](#configuration-file).
2018-10-06 21:12:12 +02:00
If you want to preview the different themes on a custom file, you can use
the following command (you need [` fzf`](https://github.com/junegunn/fzf) for this):
2019-09-18 13:43:32 -07:00
` ``bash
2018-10-06 21:12:12 +02:00
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
` ``
2018-05-30 21:32:40 +02:00
2024-04-16 14:43:39 +02:00
` bat` automatically picks a fitting theme depending on your terminal's background color.
2025-01-10 17:45:26 +01:00
You can use the ` --theme-dark` / ` --theme-light` options or the ` BAT_THEME_DARK` / ` BAT_THEME_LIGHT` environment variables
2024-04-16 14:43:39 +02:00
to customize the themes used. This is especially useful if you frequently switch between dark and light mode.
2018-11-11 14:28:18 +01:00
You can also use a custom theme by following the
2024-08-05 09:41:18 -04:00
['Adding new themes' section below](#adding-new-themes).
2018-10-11 06:52:35 -07:00
2020-07-19 16:49:10 -04:00
### 8-bit themes
2020-11-29 17:16:54 -05:00
` bat` has three themes that always use [8-bit colors](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors),
2020-07-19 16:49:10 -04:00
even when truecolor support is available:
2020-11-29 17:16:54 -05:00
- ` ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,
yellow, blue, magenta, cyan, and white.
2024-02-24 12:07:05 +01:00
- ` base16` is designed for [base16](https://github.com/tinted-theming/home) terminal themes. It uses
2020-07-19 16:49:10 -04:00
4-bit colors (3-bit colors plus bright variants) in accordance with the
2024-02-24 12:07:05 +01:00
[base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md).
- ` base16-256` is designed for [tinted-shell](https://github.com/tinted-theming/tinted-shell).
2020-07-19 16:49:10 -04:00
It replaces certain bright colors with 8-bit colors from 16 to 21. **Do not** use this simply
2024-02-24 12:07:05 +01:00
because you have a 256-color terminal but are not using tinted-shell.
2020-07-19 16:49:10 -04:00
2021-06-10 06:57:54 +02:00
Although these themes are more restricted, they have three advantages over truecolor themes. They:
2020-07-19 16:49:10 -04:00
2021-06-10 06:57:54 +02:00
- Enjoy maximum compatibility. Some terminal utilities do not support more than 3-bit colors.
- Adapt to terminal theme changes. Even for already printed output.
- Visually harmonize better with other terminal software.
2020-07-19 16:49:10 -04:00
2018-05-30 21:32:40 +02:00
### Output style
2024-08-05 09:44:45 -04:00
You can use the ` --style` option to control the appearance of ` bat`'s output.
2018-05-30 21:32:40 +02:00
You can use ` --style=numbers,changes`, for example, to show only Git changes
2018-11-11 14:28:18 +01:00
and line numbers but no grid and no file header. Set the ` BAT_STYLE` environment
2024-08-05 09:44:45 -04:00
variable to make these changes permanent or use ` bat`'s
2024-08-05 09:41:18 -04:00
[configuration file](#configuration-file).
2018-05-30 21:32:40 +02:00
2026-04-30 01:54:42 -07:00
By default, ` bat` enables ` changes`, ` grid`, ` header-filename`, ` numbers`, and ` snip`.
The available pre-defined styles are:
| Style | Description |
|-------|-------------|
| ` default` | Enables the recommended style components listed above. |
| ` full` | Enables all available components. |
| ` auto` | Same as ` default`, unless the output is piped. |
| ` plain` | Disables all available components. |
The available individual components are:
| Component | Description |
|-----------|-------------|
| ` changes` | Show Git modification markers. |
| ` header` | Alias for ` header-filename`. |
| ` header-filename` | Show filenames before the content. |
| ` header-filesize` | Show file sizes before the content. |
| ` grid` | Vertical/horizontal lines to separate the side bar and header from the content. |
| ` rule` | Horizontal lines to delimit files. |
| ` numbers` | Show line numbers in the side bar. |
| ` snip` | Draw separation lines between distinct line ranges. |
2024-04-06 15:04:20 -07:00
>[!tip]
> If you specify a default style in ` bat`'s config file, you can change which components
> are displayed during a single run of ` bat` using the ` --style` command-line argument.
> By prefixing a component with ` +` or ` -`, it can be added or removed from the current style.
>
> For example, if your config contains ` --style=full,-snip`, you can run bat with
> ` --style=-grid,+snip` to remove the grid and add back the ` snip` component.
> Or, if you want to override the styles completely, you use ` --style=numbers` to
> only show the line numbers.
2025-11-27 22:21:21 +02:00
### Decorations
By default, ` bat` only shows decorations (such as line numbers, file headers, grid borders, etc.) when outputting to an interactive terminal. You can control this behavior with the ` --decorations` option. Use ` --decorations=always` to show decorations even when piping output to another command, or ` --decorations=never` to disable them entirely. Possible values are ` auto` (default), ` never`, and ` always`.
There is also the ` --force-colorization` option, which is an alias for ` --decorations=always --color=always`. This is useful if you want to keep colorization and decorations when piping ` bat`'s output to another program.
2018-08-19 10:49:09 +02:00
### Adding new syntaxes / language definitions
2018-05-30 21:32:40 +02:00
2020-10-14 08:24:20 +02:00
Should you find that a particular syntax is not available within ` bat`, you can follow these
instructions to easily add new syntaxes to your current ` bat` installation.
2020-10-14 19:18:11 +13:00
2020-10-14 08:24:20 +02:00
` bat` uses the excellent [` syntect`](https://github.com/trishume/syntect/)
2018-05-07 20:06:01 +02:00
library for syntax highlighting. ` syntect` can read any
[Sublime Text ` .sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html)
2020-10-14 08:24:20 +02:00
and theme.
A good resource for finding Sublime Syntax packages is [Package Control](https://packagecontrol.io/). Once you found a
syntax:
2018-04-30 16:03:33 +02:00
2020-10-14 19:18:11 +13:00
1. Create a folder with syntax definition files:
2018-05-02 22:21:56 +02:00
2020-10-14 08:26:02 +02:00
` ``bash
mkdir -p "$(bat --config-dir)/syntaxes"
cd "$(bat --config-dir)/syntaxes"
2018-04-30 16:03:33 +02:00
2020-10-14 08:26:02 +02:00
# Put new '.sublime-syntax' language definition files
# in this folder (or its subdirectories), for example:
git clone https://github.com/tellnobody1/sublime-purescript-syntax
` ``
2018-04-30 16:03:33 +02:00
2020-10-14 19:18:11 +13:00
2. Now use the following command to parse these files into a binary cache:
2018-05-02 22:21:56 +02:00
2020-10-14 08:26:02 +02:00
` ``bash
bat cache --build
` ``
2018-05-08 19:48:10 +02:00
2020-10-14 19:18:11 +13:00
3. Finally, use ` bat --list-languages` to check if the new languages are available.
2018-05-30 20:40:02 +02:00
2020-10-14 08:26:02 +02:00
If you ever want to go back to the default settings, call:
2018-05-08 19:48:10 +02:00
2020-10-14 08:26:02 +02:00
` ``bash
bat cache --clear
` ``
2018-05-21 00:28:30 +02:00
2020-10-14 08:24:20 +02:00
4. If you think that a specific syntax should be included in ` bat` by default, please
2020-10-14 08:26:02 +02:00
consider opening a "syntax request" ticket after reading the policies and
instructions [here](doc/assets.md): [Open Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).
2020-10-14 19:18:11 +13:00
2018-08-19 10:49:09 +02:00
### Adding new themes
This works very similar to how we add new syntax definitions.
2025-08-19 15:41:52 -05:00
> [!NOTE]
2026-03-14 11:44:38 +05:30
> Custom themes must be stored in [` .tmTheme` files](https://www.sublimetext.com/docs/color_schemes_tmtheme.html).
> Newer ` .sublime-color-scheme` files are currently not supported.
2018-08-19 10:49:09 +02:00
First, create a folder with the new syntax highlighting themes:
` ``bash
2019-02-07 22:37:12 +01:00
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
2018-08-19 10:49:09 +02:00
# Download a theme in '.tmTheme' format, for example:
git clone https://github.com/greggb/sublime-snazzy
# Update the binary cache
2019-02-07 22:31:37 +01:00
bat cache --build
2018-08-19 10:49:09 +02:00
` ``
Finally, use ` bat --list-themes` to check if the new themes are available.
2025-08-19 15:41:52 -05:00
> [!NOTE]
> ` bat` uses the name of the ` .tmTheme` file for the theme's name.
2018-08-19 10:49:09 +02:00
2020-10-11 21:11:26 +02:00
### Adding or changing file type associations
You can add new (or change existing) file name patterns using the ` --map-syntax`
command line option. The option takes an argument of the form ` pattern:syntax` where
` pattern` is a glob pattern that is matched against the file name and
the absolute file path. The ` syntax` part is the full name of a supported language
2021-01-10 16:18:33 +01:00
(use ` bat --list-languages` for an overview).
2020-10-11 21:11:26 +02:00
2022-01-29 07:45:47 +02:00
**Note:** You probably want to use this option as [an entry in ` bat`'s configuration file](#configuration-file)
for persistence instead of passing it on the command line as a one-off. Generally
2022-01-28 22:58:47 +02:00
you'd just use ` -l` if you want to manually specify a language for a file.
2020-10-11 21:11:26 +02:00
Example: To use "INI" syntax highlighting for all files with a ` .conf` file extension, use
` ``bash
--map-syntax='*.conf:INI'
` ``
Example: To open all files called ` .ignore` (exact match) with the "Git Ignore" syntax, use:
` ``bash
--map-syntax='.ignore:Git Ignore'
` ``
Example: To open all ` .conf` files in subfolders of ` /etc/apache2` with the "Apache Conf"
syntax, use (this mapping is already built in):
` ``bash
2021-01-10 16:18:33 +01:00
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
2020-10-11 21:11:26 +02:00
` ``
2018-08-18 20:22:11 +02:00
### Using a different pager
` bat` uses the pager that is specified in the ` PAGER` environment variable. If this variable is not
2025-09-09 12:25:41 -04:00
set, ` less` is used by default. You can also use bat's built-in pager with ` --pager=builtin` or
by setting the ` BAT_PAGER` environment variable to "builtin".
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`.
2018-09-26 18:08:24 +02:00
2024-02-07 21:18:12 -08:00
>[!NOTE]
> If ` PAGER` is ` more` or ` most`, ` bat` will silently use ` less` instead to ensure support for colors.
2021-06-05 22:47:17 +02:00
2018-10-20 14:54:44 +02:00
If you want to pass command-line arguments to the pager, you can also set them via the
` PAGER`/` BAT_PAGER` variables:
2018-08-18 20:22:11 +02:00
` ``bash
2025-08-15 15:50:16 +02:00
export BAT_PAGER="less -RFK"
2018-08-18 20:22:11 +02:00
` ``
2024-08-05 09:44:45 -04:00
Instead of using environment variables, you can also use ` bat`'s [configuration file](#configuration-file) to configure the pager (` --pager` option).
2018-11-11 14:28:18 +01:00
2019-12-23 10:00:57 +01:00
2024-02-07 21:18:12 -08:00
### Using ` less` as a pager
2018-09-26 18:03:46 +02:00
2024-02-07 21:18:12 -08:00
When using ` less` as a pager, ` bat` will automatically pass extra options along to ` less`
to improve the experience. Specifically, ` -R`/` --RAW-CONTROL-CHARS`, ` -F`/` --quit-if-one-screen`,
2025-08-15 15:50:16 +02:00
` -K`/` --quit-on-intr` and under certain conditions, ` -X`/` --no-init` and/or ` -S`/` --chop-long-lines`.
2024-02-07 21:18:12 -08:00
>[!IMPORTANT]
> These options will not be added if:
> - The pager is not named ` less`.
> - The ` --pager` argument contains any command-line arguments (e.g. ` --pager="less -R"`).
> - The ` BAT_PAGER` environment variable contains any command-line arguments (e.g. ` export BAT_PAGER="less -R"`)
>
> The ` --quit-if-one-screen` option will not be added when:
> - The ` --paging=always` argument is used.
> - The ` BAT_PAGING` environment is set to ` always`.
2025-10-19 15:38:49 -04:00
The ` -R`/` --RAW-CONTROL-CHARS` option is needed to interpret ANSI colors correctly.
2024-02-07 21:18:12 -08:00
2025-10-19 15:38:49 -04:00
The ` -F`/` --quit-if-one-screen` option instructs ` less` to exit immediately if the output size is smaller than
2024-02-07 21:18:12 -08:00
the vertical size of the terminal. This is convenient for small files because you do not
have to press ` q` to quit the pager.
2025-10-19 15:38:49 -04:00
The ` -K`/` --quit-on-intr` option instructs ` less` to exit immediately when an interrupt signal is received.
2025-08-16 15:23:35 +02:00
This is useful to ensure that ` less` quits together with ` bat` on SIGINT.
2025-08-15 15:50:16 +02:00
2025-10-19 15:58:21 -04:00
The ` -X`/` --no-init` option is added to versions of ` less` older than version 530 (older than 558 on Windows) to
fix a bug with the ` -F`/` --quit-if-one-screen` feature. Unfortunately, it also breaks mouse-wheel support in ` less`.
2024-02-07 21:18:12 -08:00
If you want to enable mouse-wheel scrolling on older versions of ` less` and do not mind losing
the quit-if-one-screen feature, you can set the pager (via ` --pager` or ` BAT_PAGER`) to ` less -R`.
For ` less` 530 or newer, it should work out of the box.
2025-10-19 15:38:49 -04:00
The ` -S`/` --chop-long-lines` option is added when ` bat`'s ` -S`/` --chop-long-lines` option is used. This tells ` less`
2024-02-07 21:18:12 -08:00
to truncate any lines larger than the terminal width.
2018-09-26 18:03:46 +02:00
2020-07-08 17:36:55 +02:00
### Indentation
` bat` expands tabs to 4 spaces by itself, not relying on the pager. To change this, simply add the
` --tabs` argument with the number of spaces you want to be displayed.
**Note**: Defining tab stops for the pager (via the ` --pager` argument by ` bat`, or via the ` LESS`
environment variable for ` less`) won't be taken into account because the pager will already get
expanded spaces instead of tabs. This behaviour is added to avoid indentation issues caused by the
sidebar. Calling ` bat` with ` --tabs=0` will override it and let tabs be consumed by the pager.
2019-09-15 14:53:34 +02:00
### Dark mode
2024-05-18 14:54:45 -07:00
If you make use of the dark mode feature in **macOS**, you might want to configure ` bat` to use a different
2020-04-21 22:11:07 +02:00
theme based on the OS theme. The following snippet uses the ` default` theme when in the _dark mode_
and the ` GitHub` theme when in the _light mode_.
2019-09-15 14:53:34 +02:00
2019-09-15 15:54:34 +02:00
` ``bash
2025-03-29 00:07:48 +01:00
alias cat="bat --theme auto:system --theme-dark default --theme-light GitHub"
2019-09-15 14:53:34 +02:00
` ``
2024-05-18 14:54:45 -07:00
The same dark mode feature is now available in **GNOME** and affects the ` org.gnome.desktop.interface color-scheme` setting. The following code converts the above to use said setting.
` ``bash
# .bashrc
sys_color_scheme_is_dark() {
condition=$(gsettings get org.gnome.desktop.interface color-scheme)
condition=$(echo "$condition" | tr -d "[:space:]'")
if [ $condition == "prefer-dark" ]; then
return 0
else
return 1
fi
}
bat_alias_wrapper() {
#get color scheme
sys_color_scheme_is_dark
if [[ $? -eq 0 ]]; then
# bat command with dark color scheme
bat --theme=default "$@"
else
# bat command with light color scheme
bat --theme=GitHub "$@"
fi
}
alias cat='bat_alias_wrapper'
` ``
2020-10-05 22:20:26 +05:30
2018-11-11 14:28:18 +01:00
## Configuration file
2018-11-04 17:52:03 +00:00
2018-11-11 14:39:04 +01:00
` bat` can also be customized with a configuration file. The location of the file is dependent
on your operating system. To get the default path for your system, call
2021-10-31 10:18:03 +02:00
` ``bash
2018-11-11 11:07:38 +01:00
bat --config-file
` ``
2018-11-04 17:52:03 +00:00
2024-10-06 18:20:43 +02:00
Alternatively, you can use ` BAT_CONFIG_PATH` or ` BAT_CONFIG_DIR` environment variables to point ` bat`
to a non-default location of the configuration file or the configuration directory respectively:
2018-11-07 16:31:23 +00:00
` ``bash
2024-10-06 18:20:43 +02:00
export BAT_CONFIG_PATH="/path/to/bat/bat.conf"
export BAT_CONFIG_DIR="/path/to/bat"
2018-11-07 16:31:23 +00:00
` ``
2018-11-04 17:52:03 +00:00
2020-03-25 22:05:01 -04:00
A default configuration file can be created with the ` --generate-config-file` option.
` ``bash
bat --generate-config-file
` ``
2021-10-06 20:32:47 +02:00
There is also now a systemwide configuration file, which is located under ` /etc/bat/config` on
Linux and Mac OS and ` C:\ProgramData\bat\config` on windows. If the system wide configuration
file is present, the content of the user configuration will simply be appended to it.
2018-11-11 14:28:18 +01:00
### Format
2018-11-04 17:52:03 +00:00
2018-11-11 11:07:38 +01:00
The configuration file is a simple list of command line arguments. Use ` bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the ` #` character.
2018-11-04 17:52:03 +00:00
2018-11-11 11:07:38 +01:00
Example configuration file:
2018-11-07 16:31:23 +00:00
` ``bash
2018-11-04 17:52:03 +00:00
# Set the theme to "TwoDark"
--theme="TwoDark"
2018-11-07 16:31:23 +00:00
# Show line numbers, Git modifications and file header (but no grid)
--style="numbers,changes,header"
2018-11-11 12:17:15 +01:00
# Use italic text on the terminal (not supported on all terminals)
--italic-text=always
2021-09-07 12:00:44 +08:00
# Use C++ syntax for Arduino .ino files
2020-03-22 10:37:18 +01:00
--map-syntax "*.ino:C++"
2020-10-04 00:16:39 +05:30
` ``
2018-09-08 14:01:33 +05:30
## Using ` bat` on Windows
2020-03-04 01:04:49 -08:00
` bat` mostly works out-of-the-box on Windows, but a few features may need extra configuration.
2018-09-08 14:01:33 +05:30
2020-07-04 19:43:04 -06:00
### Prerequisites
2026-08-27 13:11:46 +03:00
You will need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) package.
2020-07-04 19:43:04 -06:00
2018-09-08 14:01:33 +05:30
### Paging
Windows only includes a very limited pager in the form of ` more`. You can download a Windows binary
for ` less` [from its homepage](http://www.greenwoodsoftware.com/less/download.html) or [through
Chocolatey](https://chocolatey.org/packages/Less). To use it, place the binary in a directory in
2019-04-10 14:23:46 +02:00
your ` PATH` or [define an environment variable](#using-a-different-pager). The [Chocolatey package](#on-windows) installs ` less` automatically.
2018-09-08 14:01:33 +05:30
2018-11-18 12:11:07 +01:00
### Colors
2018-09-08 14:01:33 +05:30
2018-11-18 12:11:07 +01:00
Windows 10 natively supports colors in both ` conhost.exe` (Command Prompt) and PowerShell since
2018-09-08 14:01:33 +05:30
[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)), as
well as in newer versions of bash. On earlier versions of Windows, you can use
2024-06-28 15:05:21 +01:00
[Cmder](http://cmder.app/), which includes [ConEmu](https://conemu.github.io/).
2018-09-08 14:01:33 +05:30
2023-05-09 02:40:27 +02:00
**Note:** Old versions of ` less` do not correctly interpret colors on Windows. To fix this, you can add the optional Unix tools to your PATH when installing Git. If you don’ t have any other pagers installed, you can disable paging entirely by passing ` --paging=never` or by setting ` BAT_PAGER` to an empty string.
2018-09-08 14:01:33 +05:30
2018-09-14 09:11:40 -07:00
### Cygwin
2018-10-09 17:11:13 +02:00
` bat` on Windows does not natively support Cygwin's unix-style paths (` /cygdrive/*`). When passed an absolute cygwin path as an argument, ` bat` will encounter the following error: ` The system cannot find the path specified. (os error 3)`
2018-09-14 09:11:40 -07:00
This can be solved by creating a wrapper or adding the following function to your ` .bash_profile` file:
2019-09-18 13:43:32 -07:00
` ``bash
2018-09-14 09:11:40 -07:00
bat() {
local index
local args=("$@")
for index in $(seq 0 ${#args[@]}) ; do
case "${args[index]}" in
-*) continue;;
*) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
esac
done
command bat "${args[@]}"
}
` ``
2018-08-28 22:08:34 +02:00
## Troubleshooting
2021-11-19 03:09:19 -03:00
### Garbled output
2021-12-25 14:14:38 +01:00
If an input file contains color codes or other ANSI escape sequences or control characters, ` bat` will have problems
2021-11-19 03:09:19 -03:00
performing syntax highlighting and text wrapping, and thus the output can become garbled.
2024-06-15 17:12:02 -07:00
If your version of ` bat` supports the ` --strip-ansi=auto` option, it can be used to remove such sequences
before syntax highlighting. Alternatively, you may disable both syntax highlighting and wrapping by
2021-11-19 03:09:19 -03:00
passing the ` --color=never --wrap=never` options to ` bat`.
2026-07-01 07:09:49 +02:00
For untrusted input, the ` --sanitize=auto|always|never` option additionally replaces terminal-active
control bytes and Unicode bidi / zero-width formatting characters with the Unicode replacement
character. It implies ` --strip-ansi` at the same value.
2024-06-15 17:12:02 -07:00
> [!NOTE]
> The ` auto` option of ` --strip-ansi` avoids removing escape sequences when the syntax is plain text.
2018-08-28 22:08:34 +02:00
### Terminals & colors
2020-07-19 16:49:10 -04:00
` bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
highlighting themes are not optimized for 8-bit colors. It is therefore strongly recommended
that you use a terminal with 24-bit truecolor support (` terminator`, ` konsole`, ` iTerm2`, ...),
or use one of the basic [8-bit themes](#8-bit-themes) designed for a restricted set of colors.
2018-08-28 22:08:34 +02:00
See [this article](https://gist.github.com/XVilka/8346728) for more details and a full list of
terminals with truecolor support.
Make sure that your truecolor terminal sets the ` COLORTERM` variable to either ` truecolor` or
` 24bit`. Otherwise, ` bat` will not be able to determine whether or not 24-bit escape sequences
are supported (and fall back to 8-bit colors).
2018-09-03 22:12:41 +02:00
### Line numbers and grid are hardly visible
Please try a different theme (see ` bat --list-themes` for a list). The ` OneHalfDark` and
` OneHalfLight` themes provide grid and line colors that are brighter.
2019-10-11 20:37:08 +02:00
### File encodings
` bat` natively supports UTF-8 as well as UTF-16. For every other file encoding, you may need to
convert to UTF-8 first because the encodings can typically not be auto-detected. You can ` iconv`
to do so.
Example: if you have a PHP file in Latin-1 (ISO-8859-1) encoding, you can call:
` `` bash
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
` ``
Note: you might have to use the ` -l`/` --language` option if the syntax can not be auto-detected
by ` bat`.
2018-08-28 21:03:03 +02:00
## Development
` ``bash
# Recursive clone to retrieve all submodules
git clone --recursive https://github.com/sharkdp/bat
# Build (debug version)
cd bat
2019-10-06 15:03:54 +07:00
cargo build --bins
2018-08-28 21:03:03 +02:00
# Run unit tests and integration tests
cargo test
# Install (release version)
2020-10-04 12:39:17 +07:00
cargo install --path . --locked
2018-08-28 21:03:03 +02:00
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
2020-10-04 12:39:17 +07:00
cargo install --path . --locked --force
2018-08-28 21:03:03 +02:00
` ``
2024-08-05 09:44:45 -04:00
If you want to build an application that uses ` bat`'s pretty-printing
2026-08-09 18:05:20 +12:00
features as a library, check out the [API documentation](https://docs.rs/bat/).
2021-01-10 21:18:50 +01:00
Note that you have to use either ` regex-onig` or ` regex-fancy` as a feature
when you depend on ` bat` as a library.
2020-10-27 21:39:54 -07:00
## Contributing
2020-10-26 20:48:52 -07:00
2020-10-29 19:46:36 +01:00
Take a look at the [` CONTRIBUTING.md`](CONTRIBUTING.md) guide.
2020-10-26 20:48:52 -07:00
2019-09-07 08:57:07 +02:00
## Maintainers
- [sharkdp](https://github.com/sharkdp)
- [eth-p](https://github.com/eth-p)
2020-10-05 23:11:10 +02:00
- [keith-hall](https://github.com/keith-hall)
2021-01-09 14:22:23 +01:00
- [Enselic](https://github.com/Enselic)
2019-09-07 08:57:07 +02:00
2021-07-13 11:00:36 +02:00
## Security vulnerabilities
2025-08-27 20:33:50 +02:00
See [` SECURITY.md`](SECURITY.md).
2021-07-13 11:00:36 +02:00
2018-05-21 00:28:30 +02:00
## 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](doc/alternatives.md) for a comparison.
2020-01-19 00:00:35 +09:00
## License
2025-09-26 20:33:12 +07:00
Copyright (c) 2018-2025 [bat-developers](https://github.com/sharkdp/bat).
2020-01-19 00:00:35 +09:00
2020-08-27 04:51:09 -07:00
` bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
2020-01-19 00:00:35 +09:00
See the [LICENSE-APACHE ](LICENSE-APACHE ) and [LICENSE-MIT ](LICENSE-MIT ) files for license details.