Introducing Best, a new Bash testing framework
Originally published:
Last modified:
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?
- This blog will announce new releases along with any API-breaking changes.
- Subscribe to release updates via RSS.
- An RSS feed of the blog will be made available in the near future.
- A Fediverse account will be made available in the near future.
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.