Unitary is a modern PHP testing framework for developers who value speed, precision, and full control. No configuration. No clutter. Just a clean, purpose-built core that can execute 100,000+ tests per second and scales smoothly from quick sanity checks to full integration suites.
Mocking, validation, and assertions are built in from the start, with no plugins, adapters, or bootstrapping required. The CLI is fast and intuitive, the workflow is consistent, and getting started takes seconds. Whether you are validating a single function or an entire system, Unitary lets you move quickly and test with confidence.
Visit the full documentation at:
π https://maplephp.github.io/Unitary/
Unitary is designed to feel natural for developers. With clear syntax, built-in validation, and zero setup required, writing tests becomes a smooth part of your daily flow and not a separate chore.
use MaplePHP\Unitary\TestCase;
group("Your grouped test subject", function (TestCase $case) {
$json = '{"response":{"status":200,"message":"ok"}}';
$case->expect($json)
->isJson()
->hasJsonValueAt("response.status", 200)
->validate();
});Unitary is a lightning-fast, developer-first testing framework for PHP, built from the ground up with zero third-party dependencies and a highly optimized core, not just a wrapper around legacy tools.
π Test 100,000+ cases in ~1 second. No config. No bloat. Just results.
- Works out of the box β No setup, no config files.
- Not built on PHPUnit β Unitary is a standalone framework.
- 100% agnostic β Every sub-library is purpose-built for speed and control.
- First-class CLI β Intuitive test runner that works across platforms.
- Powerful validation β Built-in expectation engine, assert support, and structured output.
- Mocking included β No external mocking libraries needed.
- Super low memory usage β Ideal for local runs and parallel CI jobs.
Unitary runs large test suites in a fraction of the time β even 100,000+ tests in just 1 second.
π Thatβs up to 50Γ faster than the most widely used testing frameworks.
Set up your first test in three easy steps:
composer require --dev maplephp/unitaryYou can run unitary globally if preferred with composer global require maplephp/unitary.
Create a file like tests/unitary-request.php. Unitary automatically scans all files prefixed with unitary- (excluding vendor/).
Paste this test boilerplate to get started:
use MaplePHP\Unitary\{TestCase};
group("HTTP Request", function(TestCase $case) {
$request = new Request("GET", "https://example.com/?id=1&slug=hello");
$case->expect($request->getUri()->getQuery())
->hasQueryParam("id", 1)
->hasQueryParam("slug", "hello")
->validate();
});π‘ Tip: Run
php vendor/bin/unitary --templateto auto-generate this boilerplate code.
php vendor/bin/unitaryphp vendor/bin/unitary --help
With that, you are ready to create your own tests!
v2.0.0 This release marks Unitaryβs transition from a testing utility to a full framework. With the core in place, expect rapid improvements in upcoming versions.
Unitary stands on a solid foundation of years of groundwork. Before Unitary was possible, these independent components were developed:
maplephp/Emitronβ PSR-15 kernel and middleware enginemaplephp/httpβ PSR-7 HTTP messaging and stream handlingmaplephp/promptsβ Interactive prompt/command enginemaplephp/blunderβ A pretty error handling frameworkmaplephp/validateβ Type-safe input validationmaplephp/dtoβ Strong data transportmaplephp/containerβ PSR-11 Container, container and DI systemmaplephp/cacheβ PSR-6 and PSR-16 caching library
This full control means everything works together, no patching, no adapters and no guesswork.
Test everything. All the time. Without friction.
TDD becomes natural when your test suite runs in under a second, even with 100,000 cases. No more cherry-picking. No more skipping.
Thatβs DarkBark. Dark, quiet, confident, like a rainy-night synthwave playlist for your CLI.
Unitary is still young β your bug reports, feedback, and suggestions are hugely appreciated.
If you like what you see, consider:
- Reporting issues
- Sharing feedback
- Submitting PRs
- Starring the repo β
Follow the full suite of MaplePHP tools:
