Compare
Composer, riff, vivacity and viv on the same corpus and the same compatibility sweep. Every number below comes from a results file in the repository, not a guess — see the sources under each table.
Speed
| Tool | Cold | Warm | No-op | Update-warm |
|---|---|---|---|---|
| Composer | 1.52s | 1.11s | 0.20s | 0.35s |
| riff | 0.56s (9/10) | 0.47s (9/10) | 0.07s (9/10) | n/a |
| viv | 0.26s | 0.06s | 0.01s | 0.21s |
| vivacity | 0.41s (6/10) | 0.12s (6/10) | 0.04s (6/10) | 0.22s (6/10) |
viv 0.12.0, composer 2.10.2, riff 0.0.7, vivacity 0.6.0, flags --no-plugins --no-scripts, 3 runs each, from a local mirror.
source: bench/results/corpus.md, section 2026-09-15T06:54:06Z (2026-09-15)
Skips recorded for this run:
- laravel/laravel/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- symfony/demo/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- drupal/recommended-project/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- drupal/recommended-project/vivacity: run.sh: failed: vivacity
- roots/bedrock/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- roots/bedrock/vivacity: run.sh: failed: vivacity
- composer/composer/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- phpunit/phpunit/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- slimphp/Slim-Skeleton/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- yiisoft/yii2-app-basic/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- yiisoft/yii2-app-basic/vivacity: run.sh: failed: vivacity
- statamic/statamic/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- craftcms/craft/riff: skipped, known failure at riff 0.0.7 (bench/skips.txt)
- craftcms/craft/vivacity: run.sh: failed: vivacity
Capability
| Composer | riff | vivacity | viv | |
|---|---|---|---|---|
Byte-identical vendor/ |
is the reference | no — 4 differences (autoloader-suffix, provide order, NULL vs null, a newer InstalledVersions.php) (JOURNAL.md, 2026-09-06) |
not measured here | yes, 10/10 pinned projects (compat/results/v0.13.0.md) |
| Corpus projects installed (of 10) | 10 | 9 | 6 | 10 |
| Plugins handled natively | all (runs PHP) | not measured here | its known list (JOURNAL.md, 2026-09-15) | 14 adapters (docs/plugin-strategy.md) |
| Needs PHP to install | yes | no | no | no |
Drop-in composer shim |
— | — | — | yes |
| Publishes its failures | — | — | NOTICE, changelog | compat/results/, bench/results/corpus.md footnotes, JOURNAL.md |
n/a and "not measured here" cells are viv's own gaps too, not just a
missing measurement for someone else: see docs/stability.md
for what viv's output contract does and doesn't cover.