Introducing Best, a new Bash testing framework

Originally published: 2026-09-03

Last modified: 2026-09-08

Best is a new Bash testing framework focused on simplicity. Its API is heavily influenced by Jest and Pest. It's available to install via Homebrew and runs on Linux, MacOS, and Windows.

Best will always be free (as in both freedom and beer; libre and gratis) and open source, with a strict no-LLM and no-AI policy, and a well-defined code of conduct.

Best is licensed under GPL-3.0-or-later.

Why build a Bash testing framework in 2026?

For the API. There are many other Bash testing frameworks available, but none of them provide a similar API to Jest and Pest. If you're already familiar with Jest or Pest, then Best aims to provide you with a similar testing experience when you're writing Bash.

API comparison

Jest (TypeScript / JavaScipt)

it('should compare two same numbers', () => expect(1).toBe(1))
it('should not compare different numbers', () => expect(1).not.toBe(2))

Pest (PHP)

it('should compare two same numbers', fn() => expect(1)->toBe(1));
it('should not compare two different numbers', fn() => expect(1)->not->toBe(2));

Best (Bash)

it 'should compare two same numbers'; expect 1; to_be 1
it 'should not compare two different numbers'; expect 1; not; to_be 2

Who is building this project?

Paul Shryock started this project in the Summer of 2026 with a desire to write simple Bash unit tests in a format consistent with Jest and Pest. Paul is a software engineer with 17 years of experience working across the full stack in several industries.

As of 2026-09-03, Paul is the sole maintainer and contributor. If you would like to contribute to Best, please read the Code of Conduct and Contributing Guidelines for more information. Contributions are welcome, and in the long-term, Paul would love to share maintenance responsibilities with one or more other contributors who are interested.

The source code for Best is available on Codeberg.

What is the current state of Best?

As of 2026-09-03, Best is in early development. The API may have some breaking changes before reaching v1.

API functions

Function Description
describe Describes one or more tests.
it Sets up initial test state.
expect Sets up test expectation state.
not Reverses an expectation.
to_be Expects the actual value to be the expected value.
to_throw Expects the last exit code not to be 0.
skip Skips a test.

CLI options

Option Description
--filter <pattern> Run only test files matching pattern.
--help Print help text.
--version Print version.

How can I install Best?

Currently, Best is available via Homebrew. In the future, we will explore distribution through many other operating system and programming language package managers.

Install

$ brew tap paulshryock/tap https://codeberg.org/paulshryock/homebrew-tap
$ brew trust --formula paulshryock/tap/best
$ brew install best

Uninstall

$ brew uninstall best
$ brew untrust --formula paulshryock/tap/best
$ brew untap paulshryock/tap

How can I follow the project to stay informed?

How can I support the maintainers of Best?

For now, we're looking for feedback! If you try Best, let us know what you love or hate about it. Your feedback is valuable at this stage, and would be much appreciated. Provide feedback by opening an Issue on Codeberg.

In the future, we will explore options for providing a way to donate money. Any monetary donations we might receive in the future will be put back into the project, in the form of, for example, domain registration renewal and website hosting costs. If we get to the point where we are accepting donations, we will publish transparency reports to show what money is received, from whom, and how it is spent.

Thanks for reading

Thank you so much for your interest in Best, and we'll see you in the next update.