PHPackages                             lemonade/vario-online-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. lemonade/vario-online-sdk

ActiveLibrary[HTTP &amp; Networking](/categories/http)

lemonade/vario-online-sdk
=========================

PHP SDK for the Vario Online API providing typed dataset queries, domain models and PSR-18 HTTP integration for Vario ERP systems.

v3.0.1(3w ago)123↓95.8%MITPHPPHP ^8.1CI passing

Since Mar 2Pushed 1mo agoCompare

[ Source](https://github.com/johnnyxlemonade/vario-online-sdk)[ Packagist](https://packagist.org/packages/lemonade/vario-online-sdk)[ Docs](https://github.com/johnnyxlemonade/vario-online-sdk)[ RSS](/packages/lemonade-vario-online-sdk/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (56)Versions (28)Used By (0)

Vario Online API PHP SDK (Community Vario ERP Integration Library)
==================================================================

[](#vario-online-api-php-sdk-community-vario-erp-integration-library)

[![PHP Version](https://camo.githubusercontent.com/509d619d85004824fa1b4f3f79a444656e0b33fbf17721ad64d33e7fd21ecc2a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6c656d6f6e6164652f766172696f2d6f6e6c696e652d73646b)](https://packagist.org/packages/lemonade/vario-online-sdk)[![Packagist Version](https://camo.githubusercontent.com/c9abb6a6c586bf310a0996565b047d193dc51b029d6b939c6113d23ae8c2c5d1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c656d6f6e6164652f766172696f2d6f6e6c696e652d73646b)](https://packagist.org/packages/lemonade/vario-online-sdk)[![Downloads](https://camo.githubusercontent.com/9a2b2f578c9d77867b8f405e06fe0115b171f8ab95fac1bbb9493e2c5a2fb743/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c656d6f6e6164652f766172696f2d6f6e6c696e652d73646b)](https://packagist.org/packages/lemonade/vario-online-sdk)[![PHPStan](https://camo.githubusercontent.com/d18b9a987aa81e64470a11caecf72caa66597c9ebd6b307bd1c2cb7a752b0dff/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c25323031302d627269676874677265656e2e737667)](https://phpstan.org/)[![Tests](https://github.com/johnnyxlemonade/vario-online-sdk/actions/workflows/phpunit.yml/badge.svg)](https://github.com/johnnyxlemonade/vario-online-sdk/actions/workflows/phpunit.yml)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

A strongly typed PHP SDK for the Vario Online API, designed for building custom integrations with Vario ERP systems.

This project is an independent community-maintained client library for developers who want to integrate PHP applications with the Vario ERP platform. It is not officially affiliated with Vario Software.

The SDK provides a modern domain-oriented abstraction layer over the Vario Online API including dataset queries, authentication handling, domain mapping, and transport-agnostic HTTP communication.

It is designed for building stable ERP integrations where API payload structures may vary between installations.

More information about Vario ERP:

---

Typical Use Cases
-----------------

[](#typical-use-cases)

This SDK is commonly used for:

- integrating Vario ERP with e-commerce platforms
- synchronizing products, customers, and orders
- building data pipelines from Vario datasets
- exporting ERP data into BI or analytics systems
- creating custom ERP dashboards or integrations
- automating ERP workflows

---

Why this SDK exists
-------------------

[](#why-this-sdk-exists)

This SDK exists to provide a more structured integration layer for PHP applications that work with Vario dataset rows and endpoint payloads.

At the transport boundary, integrations often still need to deal with low-level request payloads, decoded response arrays, and mapping decisions between ERP data and application code.

This SDK adds a domain-oriented layer on top of that workflow.

Instead of keeping those concerns spread across application code, developers can work with typed domain models such as:

- `KnownParty`
- `Product`
- `IncomingOrder`

These models are backed by immutable value objects, normalizers, mappers, and a shared document foundation for document-like endpoints.

For write flows, document-oriented modules such as `IncomingOrder` and `OutgoingQuotation` share common primitives for calculated lines, price mode, descriptions, quantities, tax totals, monetary totals, tax exchange rates, and line/total calculators.

Goals of the SDK:

- stable integration surface
- strong typing and IDE support
- separation between API payloads and application logic
- maintainable ERP integrations

---

Features
--------

[](#features)

- Typed API facade (`VarioApi`)
- Domain-driven read models (`KnownParty`, `Product`)
- Immutable value objects
- DatasetView -&gt; Domain mapping layer
- Streaming dataset processing (`iterate()`, lazy pipelines)
- IncomingOrder builder with shared document calculated lines and automatic line/total calculation
- OutgoingQuotation builder/write flow with payload preview and upsert support
- Shared document primitives and calculators for document-like endpoints (`Domain\Shared\Document`)
- Automatic authentication and token refresh
- PSR-18 transport layer (replaceable HTTP client, no vendor lock-in)
- PSR-3 logging support
- Structured request/response logging with duration metrics
- Configurable token storage (memory, session, custom)
- Lazy-loaded API modules
- Unified exception model
- PHPStan level 10 compliant

---

Supported Vario API Areas
-------------------------

[](#supported-vario-api-areas)

The SDK provides abstractions for several Vario Online API modules:

- DatasetView API
- KnownParty API
- Product catalog datasets
- Incoming orders: query, mapping, payload preview, builder-based upsert flow
- Outgoing quotations: payload preview, builder-based upsert flow

Additional integrations can be built through the generic DatasetView layer.

---

Architecture Overview
---------------------

[](#architecture-overview)

The SDK uses a layered architecture that separates application usage, API modules, domain mapping, and transport infrastructure.

Main goals:

- keep application code independent from transport details
- provide typed domain models instead of raw API arrays
- isolate API schema volatility behind a mapping layer
- allow replaceable HTTP clients through PSR-18

```
Application
  |
  v
VarioApiFactory
  |
  +- VarioClientConfig
  +- TokenStorageInterface
  +- PSR-18 Client Discovery
  |
  v
VarioApi (Facade)
  |
  v
API Modules
  |
  +- Dataset APIs (Queries)
  |    v
  |  Mapper / Normalizer Layer
  |    v
  |  Domain Read Models (Product, KnownParty, ...)
  |
  +- Endpoint APIs (Actions)
       v
     Domain Entities / Responses
  |
  v
VarioClient (Transport Orchestrator)
  |
  +- RequestAuthenticator
  +- RequestLogger
  +- ResponseHandler
  |
  v
PSR-18 HTTP Client Interface
  |
  v
External HTTP Client
(Guzzle / Symfony HttpClient / Nyholm PSR-7 / Laminas Diactoros / custom)

```

Applications interact with the SDK through the `VarioApi` facade created by the `VarioApiFactory`. The factory assembles the complete client stack including configuration, token storage, and HTTP transport.

### API Modules

[](#api-modules)

The SDK exposes functionality through API modules, each responsible for a specific area of the Vario API.

Two integration styles are supported:

**Dataset APIs (Queries)**
These APIs retrieve data from Vario datasets. The responses are normalized and mapped into domain read models. This layer isolates application logic from dataset column naming and schema changes.

**Endpoint APIs (Actions)**
These APIs interact with specific Vario endpoints such as document creation or entity updates. They typically return domain entities or response objects directly without passing through the dataset mapping layer.

### Shared document model

[](#shared-document-model)

Document-like endpoints share a common foundation under `Lemonade\Vario\Domain\Shared\Document`.

This shared layer includes:

- `DocumentCalculatedLineInput`
- `DocumentPriceMode`
- `DocumentDescription`
- `DocumentQuantity`
- `DocumentMonetaryTotal`
- `DocumentTaxTotal`
- `DocumentTaxExchangeRate`
- line and totals calculators

Endpoint-specific root models remain separate where they represent actual endpoint semantics:

- `IncomingOrderInput`
- `OutgoingQuotationInput`
- endpoint-specific API modules
- endpoint-specific result objects

### Mapping Layer

[](#mapping-layer)

For dataset-based integrations the SDK introduces a mapping and normalization layer.

This layer transforms raw DatasetView rows into stable domain models such as:

- `Product`
- `KnownParty`
- `IncomingOrder`

By separating mapping logic from application code, changes in the Vario dataset schema usually require modifying only the mapper configuration rather than the business logic.

### Transport Layer

[](#transport-layer)

The actual communication with the Vario API is orchestrated by `VarioClient`.

The client coordinates:

- authentication and token refresh
- request logging
- response handling and error conversion

The transport boundary follows the PSR-18 HTTP Client standard, allowing developers to use any compatible HTTP client implementation such as Guzzle or Symfony HttpClient.

This design keeps transport concerns out of domain logic.

---

Strategic Design Decisions (ADR)
--------------------------------

[](#strategic-design-decisions-adr)

The development of this SDK was guided by several architectural principles.

### 1. Zero-Mixed Policy (PHPStan Level 10)

[](#1-zero-mixed-policy-phpstan-level-10)

The library enforces Level 10 static analysis with strict rules. API responses are mapped through strict array shapes so structural problems are caught during analysis instead of at runtime.

### 2. Memory-First Streaming and Lazy Pipelines

[](#2-memory-first-streaming-and-lazy-pipelines)

Vario datasets can contain tens of thousands of records. The SDK implements streaming generators (`iterate()`) and lazy pipelines so large catalogs can be processed with minimal memory overhead.

### 3. Domain-Oriented Mapping Layer

[](#3-domain-oriented-mapping-layer)

The Vario API schema can vary between installations. The mapping layer keeps application code coupled to stable immutable domain models while the SDK handles translation from backend fields.

### 4. Transport Agnostic (PSR-18)

[](#4-transport-agnostic-psr-18)

By following PSR-18 and PSR-17, the SDK avoids vendor lock-in. Transport-level concerns remain isolated from domain logic.

---

Roadmap
-------

[](#roadmap)

The SDK will continue evolving with improvements focused on extensibility, performance, and maintainability.

### Middleware Pipeline

[](#middleware-pipeline)

Introduce a request/response middleware pipeline to reduce responsibilities currently handled inside `VarioClient`.

Planned processing flow:

```
Request
  |
  v
AuthenticationMiddleware
  |
  v
LoggingMiddleware
  |
  v
RetryMiddleware
  |
  v
HTTP Client
  |
  v
ResponseMiddleware
  |
  v
Result

```

Benefits:

- smaller and simpler `VarioClient`
- clearer separation of transport concerns
- easier testing
- support for custom middleware

### Dataset Streaming Improvements

[](#dataset-streaming-improvements)

Enhancements to large dataset processing:

- improved lazy pipelines
- configurable page prefetching
- better memory diagnostics

### Additional Domain Modules

[](#additional-domain-modules)

Future domain abstractions may include:

- inventory
- warehouse operations
- sales documents
- customer pricing

---

Requirements
------------

[](#requirements)

- PHP 8.1+
- Composer
- Access to Vario Online API (VPN + credentials)
- PSR-18 HTTP client implementation
- PSR-3 compatible logger

---

Installation
------------

[](#installation)

Install the SDK via Composer:

```
composer require lemonade/vario-online-sdk
```

The SDK does not ship with a built-in HTTP client.

Instead, it follows the PSR-18 HTTP Client standard, which allows you to use any compatible HTTP client implementation.

Example using Guzzle:

```
composer require guzzlehttp/guzzle guzzlehttp/psr7
```

---

Quick Start
-----------

[](#quick-start)

```
use Lemonade\Vario\VarioApiFactory;
use Lemonade\Vario\VarioClientConfig;
use Lemonade\Vario\ValueObject\DatasetViewQuery;
use Lemonade\Vario\ValueObject\CustomDatasetView;
use Lemonade\Vario\Http\Adapter\GuzzleHttpAdapter;
use Lemonade\Vario\Auth\Storage\InMemoryTokenStorage;

$config = new VarioClientConfig(
    baseUrl: 'https://your-vario-server',
    loginName: 'USER',
    password: 'PASSWORD',
    companyNumber: 'COMPANY'
);

$vario = VarioApiFactory::create(
    config: $config,
    httpAdapter: new GuzzleHttpAdapter($config),
    tokenStorage: new InMemoryTokenStorage()
);

$query = DatasetViewQuery::for(
    new CustomDatasetView('Katalog/KatalogCenikAPI'),
    pageLength: 100
);

foreach ($vario->datasetView()->iterate($query) as $row) {
    print_r($row);
}
```

### Mapping dataset rows to domain models

[](#mapping-dataset-rows-to-domain-models)

The mapping layer converts raw dataset rows into strongly typed domain objects.

```
foreach ($mapper->iterate($vario->datasetView()->iterate($productQuery)) as $product) {
    $identity = $product->identity();
    $price = $product->pricing()?->getPrice();

    echo $identity?->getSku() . ' | ';
    echo $identity?->getName() . ' | ';
    echo $price?->getValue() . PHP_EOL;
}
```

Full examples are available in the `examples/` directory.

---

Domain Example - Incoming Orders
--------------------------------

[](#domain-example---incoming-orders)

The SDK provides a typed `IncomingOrder` module for both reading and writing incoming order documents.

For write operations, the recommended entry point is `IncomingOrderBuilder`.

It allows developers to define order lines using a simplified high-level input and automatically derives:

- line totals without VAT
- line totals with VAT
- tax subtotals
- document monetary total
- document tax total

### Recommended write flow

[](#recommended-write-flow)

```
use DateTimeImmutable;
use Lemonade\Vario\Domain\Common\Currency;
use Lemonade\Vario\Domain\IncomingOrder\Builder\IncomingOrderBuildInput;
use Lemonade\Vario\Domain\IncomingOrder\Builder\IncomingOrderBuilder;
use Lemonade\Vario\Domain\IncomingOrder\Enum\IncomingOrderPaymentMeansCode;
use Lemonade\Vario\Domain\IncomingOrder\Write\IncomingOrderLineItemInput;
use Lemonade\Vario\Domain\IncomingOrder\Write\IncomingOrderPartiesInput;
use Lemonade\Vario\Domain\Shared\Document\Enum\DocumentPriceMode;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentIdentityInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineIdentityInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLinePriceInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineQuantityInput;

$builder = new IncomingOrderBuilder();

$lineItem = (new IncomingOrderLineItemInput())
    ->withCatalogueItemIdentification('SKU-001')
    ->withSellersItemIdentification('SKU-001');

$order = $builder->build(new IncomingOrderBuildInput(
    identity: new DocumentIdentityInput(
        uuid: 'e4daf94d-fd98-4f7d-a7c6-93cd21dee5f8',
    ),
    issueDate: new DateTimeImmutable('2024-04-02T00:00:00+02:00'),
    currency: Currency::CZK,
    parties: new IncomingOrderPartiesInput(
        buyerCustomerParty: $buyer,
        sellerSupplierParty: $seller,
    ),
    lines: [
        new DocumentCalculatedLineInput(
            identity: new DocumentCalculatedLineIdentityInput(
                uuid: 'd2045e34-49b4-4238-84e2-950362f2007e',
            ),
            lineItem: $lineItem,
            quantity: new DocumentCalculatedLineQuantityInput(
                value: 2.0,
                unitCode: 'Ks',
            ),
            price: new DocumentCalculatedLinePriceInput(
                unitPrice: 100.0,
                vatRate: 21.0,
                priceMode: DocumentPriceMode::WithoutVat,
                lineAllowanceAmount: 20.0,
            ),
        ),
    ],
    paymentMeansCode: IncomingOrderPaymentMeansCode::BankAccount,
));

$preview = $vario->incomingOrders()->previewUpsert([$order]);
```

`unitPrice` is the final unit price without VAT after discount, `lineAllowanceAmount` is the discount without VAT, and Vario derives the base price before discount as `LineExtensionAmount + LineAllowanceAmount`. `LineAllowanceAmount` does not change SDK totals.

### Low-level write API

[](#low-level-write-api)

For advanced integrations, the SDK still exposes low-level write models such as:

- `IncomingOrderInput`
- `IncomingOrderLineInput`

These are useful when the integration already calculates all monetary and tax values externally and needs full control over the outgoing payload.

Domain Example - Outgoing Quotations
------------------------------------

[](#domain-example---outgoing-quotations)

`OutgoingQuotationBuilder` uses the same shared document model. You define high-level calculated lines, the builder derives line amounts, monetary totals, and tax totals, and `previewUpsert()` returns the exact payload.

```
use DateTimeImmutable;
use Lemonade\Vario\Domain\Common\Currency;
use Lemonade\Vario\Domain\KnownParty\KnownPartyInput;
use Lemonade\Vario\Domain\OutgoingQuotation\Builder\OutgoingQuotationBuildInput;
use Lemonade\Vario\Domain\OutgoingQuotation\Builder\OutgoingQuotationBuilder;
use Lemonade\Vario\Domain\OutgoingQuotation\Enum\OutgoingQuotationPaymentMeansCode;
use Lemonade\Vario\Domain\OutgoingQuotation\Write\OutgoingQuotationLineItemInput;
use Lemonade\Vario\Domain\OutgoingQuotation\Write\OutgoingQuotationPartiesInput;
use Lemonade\Vario\Domain\Shared\Document\Enum\DocumentPriceMode;
use Lemonade\Vario\Domain\Shared\Document\ValueObject\DocumentDescription;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentIdentityInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineIdentityInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLinePriceInput;
use Lemonade\Vario\Domain\Shared\Document\Write\DocumentCalculatedLineQuantityInput;
use Lemonade\Vario\Domain\Shared\Identification;
use Lemonade\Vario\Domain\Shared\IdentificationScheme;

$buyer = (new KnownPartyInput('A - Storex, v.o.s.'))
    ->addIdentification(new Identification(IdentificationScheme::UIN, '620927153', 'CZ'));

$seller = (new KnownPartyInput(''))
    ->addIdentification(new Identification(IdentificationScheme::VAT, 'CZ61681229', 'CZ'));

$quotation = (new OutgoingQuotationBuilder())->build(new OutgoingQuotationBuildInput(
    identity: new DocumentIdentityInput(
        uuid: 'c676048c-3789-4228-82b2-9ca6e7b952f7',
        id: 'ZAKTEST-2026-00002',
    ),
    issueDate: new DateTimeImmutable('2026-06-18T00:00:00+02:00'),
    currency: Currency::CZK,
    parties: new OutgoingQuotationPartiesInput(
        buyerCustomerParty: $buyer,
        sellerSupplierParty: $seller,
    ),
    lines: [
        new DocumentCalculatedLineInput(
            identity: new DocumentCalculatedLineIdentityInput(
                uuid: 'd4b5b29c-d658-4568-aaa9-839f11ce1446',
                id: '1',
            ),
            lineItem: (new OutgoingQuotationLineItemInput())
                ->withCatalogueItemIdentification('A25882')
                ->addDescription(new DocumentDescription('Adam kreslo - skladacka')),
            quantity: new DocumentCalculatedLineQuantityInput(
                value: 1.0,
                unitCode: 'Ks',
            ),
            price: new DocumentCalculatedLinePriceInput(
                unitPrice: 95.0,
                vatRate: 21.0,
                priceMode: DocumentPriceMode::WithoutVat,
                lineAllowanceAmount: 25.0,
            ),
        ),
    ],
    paymentMeansCode: OutgoingQuotationPaymentMeansCode::Cash,
    payableRoundingAmount: 0.05,
));

$preview = $vario->outgoingQuotations()->previewUpsert([$quotation]);
```

`unitPrice` is the final unit price without VAT after discount, `lineAllowanceAmount` is the discount without VAT, and Vario derives the base price before discount as `LineExtensionAmount + LineAllowanceAmount`. `LineAllowanceAmount` does not change SDK totals.

The real `upsert()` write flow is also available, but it is not shown as the default example path here.

### Read and write model structure

[](#read-and-write-model-structure)

Endpoint modules keep endpoint-specific read/write/API/result classes, while shared document concepts now live in `Domain\Shared\Document`.

For example, IncomingOrder still keeps dedicated endpoint layers such as:

- `Read`
- `Write`
- `Enum`
- `Result`
- `Builder`

Generic document value objects and calculators such as descriptions, quantities, calculated lines, tax totals, monetary totals, and document calculators are shared across document-like endpoints through:

- `Lemonade\Vario\Domain\Shared\Document\Enum`
- `Lemonade\Vario\Domain\Shared\Document\ValueObject`
- `Lemonade\Vario\Domain\Shared\Document\Write`
- `Lemonade\Vario\Domain\Shared\Document\Calculator`

Full IncomingOrder examples are available in:

```
examples/incoming-order-query.php
examples/incoming-order-upsert-builder.php

```

---

Documentation
-------------

[](#documentation)

Full documentation is available in the project Wiki:

Key documentation pages:

- [Getting Started](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Getting-Started)
- [Installation](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Installation)
- [Configuration](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Configuration)
- [KnownParty Domain](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/KnownParty-Domain)
- [Product Domain](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Product-Domain)
- [IncomingOrder Domain](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/IncomingOrder-Domain)
- [Filtering &amp; Queries](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Filtering-and-Queries)
- [Logging](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Logging)
- [Token Storage](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Token-Storage)
- [Authentication](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Authentication)
- [Architecture](https://github.com/johnnyxlemonade/vario-online-sdk/wiki/Architecture)

---

Development
-----------

[](#development)

Run development commands from the SDK repository root.

Common checks:

- Composer validation: `composer validate --strict`
- PHP lint: `composer lint`
- Coding standards check: `composer cs:check`
- PHPStan: `composer stan`
- PHPUnit: `composer test`
- Full project check: `composer check`

Code style fixes:

- `composer cs:fix`

Additional Composer scripts are defined in `composer.json`.

```
composer check
```

---

Disclaimer
----------

[](#disclaimer)

This project is an independent open-source initiative and is not affiliated with or endorsed by Vario Software.

---

License
-------

[](#license)

MIT License

Copyright (c) 2026 Jan Mudrak

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance92

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Recently: every ~20 days

Total

27

Last Release

27d ago

Major Versions

v1.12.1 → v2.0.12026-06-22

v2.0.1 → v3.0.02026-07-22

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3079458?v=4)[Johnny X. Lemonade](/maintainers/johnnyxlemonade)[@johnnyxlemonade](https://github.com/johnnyxlemonade)

---

Top Contributors

[![johnnyxlemonade](https://avatars.githubusercontent.com/u/3079458?v=4)](https://github.com/johnnyxlemonade "johnnyxlemonade (56 commits)")

---

Tags

api-clienterp-integrationphp-libraryphp-sdkpsr-18variovario-apivario-erpvario-onlinepsr-18api clientphp-sdkERPvariovario-onlinevario-apivario-erperp-integration

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/lemonade-vario-online-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/lemonade-vario-online-sdk/health.svg)](https://phpackages.com/packages/lemonade-vario-online-sdk)
```

###  Alternatives

[tempest/framework

The PHP framework that gets out of your way.

2.3k37.6k21](/packages/tempest-framework)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

86337.5k](/packages/flow-php-flow)[cakephp/cakephp

The CakePHP framework

8.9k20.0M1.9k](/packages/cakephp-cakephp)[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)[typo3/cms-core

TYPO3 CMS Core

3313.6M5.6k](/packages/typo3-cms-core)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

265.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
