vivace es una reimplementación en Rust de los comandos de gestión de dependencias de Composer. La versión 0.4.0 añade composer update, sumándose al soporte de composer install ya presente en versiones anteriores. El objetivo declarado es una equivalencia byte a byte: con el mismo composer.json y composer.lock, vivace genera el mismo directorio vendor/ y el mismo archivo de bloqueo que Composer 2.10.3.

terminal
git clone https://github.com/Adelagric/vivace && cd vivace
cargo build --release
fixtures/make.sh
harness/update.sh
harness/diff-vendor.sh

Para lograr esa paridad en update, el autor portó el resolutor real de Composer en lugar de escribir un algoritmo nuevo. Se trasladaron el pool builder, el pool optimizer, el rule set, el solucionador CDCL, la política de versiones y el escritor del lock. Un algoritmo de resolución distinto elegiría versiones de paquetes diferentes cuando el grafo de dependencias es ambiguo, lo que generaría un lock imposible de comparar con el de Composer.

La validación se hace contra instantáneas congeladas de Packagist. La prueba compara primero el pool de candidatos, luego la secuencia completa de decisiones del solucionador, leída directamente del objeto Solver interno de Composer, después las operaciones resultantes y por último el archivo de bloqueo final. Los proyectos de prueba incluyen Laravel, la aplicación de demostración de Symfony, Sylius, rector-src y un recommended-project de Drupal, además de casos sintéticos más pequeños creados para forzar backtracking, un conjunto de dependencias irresoluble, alias raíz y paquetes virtuales.

Cualquiera puede comprobarlo localmente. Tras clonar el repositorio, se ejecuta cargo build --release, luego fixtures/make.sh para descargar los proyectos de prueba, y después harness/update.sh y harness/diff-vendor.sh, que comparan la salida de vivace con ejecuciones reales de Composer. En un proyecto propio funciona igual: vivace update --no-install junto a composer update --no-install, comparando los dos archivos composer.lock. El autor trata cualquier diferencia no vacía como un error a reportar.

vivace no ejecuta scripts PHP durante la instalación o la actualización. Tres plugins comunes de Composer, symfony/runtime, composer/installers y drupal/core-composer-scaffold, se emulan y se verifican contra el comportamiento real de los plugins; con cualquier otro plugin, vivace recurre a ejecutar el binario real de composer. La herramienta todavía no soporta los comandos require y remove, actualizaciones parciales como composer update vendor/name, repositorios VCS o path, las explicaciones de Composer sobre conjuntos irresolubles, ni Windows. El proyecto está alojado en github.com/Adelagric/vivace, con notas de versión en CHANGELOG.md y la lista de escenarios sin probar en HANDOVER.md.