Install Vavang Invoice
Installation is performed from the host Sylius application. Licensed customers receive access to the commercial package through Vavang’s private Composer distribution.
1. Configure the private repository
The repository is served from https://packages.vavang.dev. Keep Composer credentials in auth.json outside Git, in your deployment secret manager, or in the authentication mechanism supplied with your access.
composer config repositories.vavang composer https://packages.vavang.dev
The final commercial package name is vavang/invoice-plugin. During the SI-226 migration, some pre-V1 releases already published remain available under the historical name sylius-invoice/sylius-invoice-plugin. Use the package name associated with the release supplied with your access; the first commercial V1 releases will use:
composer require vavang/invoice-plugin
For the currently validated pre-V1 RC on Satis, the command remains:
composer require sylius-invoice/sylius-invoice-plugin
2. Load the required bundles
If no Flex recipe has already registered them, add the following bundles to config/bundles.php:
return [
// ...
Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],
Sylius\PdfGenerationBundle\SyliusPdfGenerationBundle::class => ['all' => true],
Sylius\InvoicingPlugin\SyliusInvoicingPlugin::class => ['all' => true],
SyliusInvoicePlugin\SyliusInvoicePlugin::class => ['all' => true],
];
Then load the official Sylius InvoicingPlugin configuration:
# config/packages/sylius_invoicing.yaml
imports:
- { resource: '@SyliusInvoicingPlugin/config/config.yaml' }
Then import the Vavang routes:
# config/routes/sylius_invoice.yaml
sylius_invoice:
resource: '@SyliusInvoicePlugin/Resources/config/routes.yaml'
3. Start in MANUAL mode
Create config/packages/sylius_invoice.yaml, configure the seller fiscal identity and keep transmission manual during onboarding:
sylius_invoice:
transmission:
mode: MANUAL
4. Configure Messenger
The sylius_invoice_async transport needs a DSN provided by the environment:
framework:
messenger:
transports:
sylius_invoice_async:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
5. Migrate and verify
bin/console sylius-invoice:check-requirements
bin/console doctrine:migrations:migrate --no-interaction
bin/console cache:clear
bin/console debug:router | grep sylius_invoice
bin/console sylius-invoice:compliance:doctor
Before enabling automatic transmission, also run a sylius_invoice_async worker under your normal process supervisor:
bin/console messenger:consume sylius_invoice_async --time-limit=3600 --memory-limit=256M