PHPackages                             aichadigital/larabill - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. aichadigital/larabill

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

aichadigital/larabill
=====================

Professional billing &amp; invoicing package for Laravel with UUID v7, VAT verification, tax calculation for Spain/EU/worldwide, and EU compliance

v6.10.0(3d ago)1518[1 issues](https://github.com/AichaDigital/larabill/issues)[2 PRs](https://github.com/AichaDigital/larabill/pulls)AGPL-3.0-or-laterPHPPHP ^8.3CI passing

Since Oct 12Pushed 3d agoCompare

[ Source](https://github.com/AichaDigital/larabill)[ Packagist](https://packagist.org/packages/aichadigital/larabill)[ Docs](https://github.com/aichadigital/larabill)[ GitHub Sponsors](https://github.com/AichaDigital)[ RSS](/packages/aichadigital-larabill/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (132)Versions (91)Used By (0)

Larabill - Professional Billing &amp; Invoicing for Laravel
===========================================================

[](#larabill---professional-billing--invoicing-for-laravel)

[![Latest Version](https://camo.githubusercontent.com/8f6215871752b03c0aa064345e436ed55e965ebf664713695847f3b0aa9a6692/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f61696368616469676974616c2f6c61726162696c6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/larabill)[![Total Downloads](https://camo.githubusercontent.com/8e53d6b8b88a44deb840542bb9181246115adddb18f16ee31526a6ce491f3ca5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61696368616469676974616c2f6c61726162696c6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/larabill)[![Pipeline](https://camo.githubusercontent.com/51b4a8d40acc16de7e220e23b30688b9adf1f6cff647eb224d21672e701a0bcf/68747470733a2f2f6769746c61622e636173747269732e636f6d2f61696368616469676974616c2f6c61726162696c6c2f6261646765732f6d61696e2f706970656c696e652e7376673f7374796c653d666c61742d737175617265)](https://gitlab.castris.com/aichadigital/larabill/-/pipelines)[![Coverage](https://camo.githubusercontent.com/34be43990f6d2e3222862d5a62eb1ee9478c002a226b97f5650105be1327443e/68747470733a2f2f6769746c61622e636173747269732e636f6d2f61696368616469676974616c2f6c61726162696c6c2f6261646765732f6d61696e2f636f7665726167652e7376673f7374796c653d666c61742d737175617265)](https://gitlab.castris.com/aichadigital/larabill/-/pipelines)[![PHPStan level 8](https://camo.githubusercontent.com/ee72f8a269650133b45ea2894a9006d60f67b5e3ec09114d4d78b850db8b4279/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230382d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://phpstan.org/)[![PHP Version](https://camo.githubusercontent.com/58b0360ae4dd03a266660732626325f74d10db7e3326d9c74c3f4f613c5f37f3/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f61696368616469676974616c2f6c61726162696c6c2e7376673f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://packagist.org/packages/aichadigital/larabill)[![Laravel Version](https://camo.githubusercontent.com/18f881b50e044a91960c1023095094599e65c156497c42fffd139e2e14059fc7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e7825323025374325323031332e782d7265642e7376673f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)](https://laravel.com)[![License](https://camo.githubusercontent.com/23f9090080cee68a9626f36b224e00235585d06fbea2a495eb6e97d8efe77f7a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f61696368616469676974616c2f6c61726162696c6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/aichadigital/larabill)

> Development happens on [gitlab.castris.com](https://gitlab.castris.com/aichadigital/larabill). The GitHub repository is a read-only distribution mirror: issues and pull requests opened there are not seen.

> 🔒 **Stability contract (effective from v6.0.0)** — larabill is a closed, stable product governed by [STABILITY.md](STABILITY.md): breaking changes only enter with a qualified, documented usage imperative; every major is auto-upgradeable from the previous one; deprecations live through at least one full major before removal. As of 6.0 the deprecated backlog is empty and there is **no known future breaking change**.

> ℹ️ **Schema upgrade policy (stable versions = respect for data)** — since 1.0, larabill treats your database as a contract: schema changes ship WITH their upgrade path. Every release that touches tables includes a data-aware migration (existing rows are transformed, never discarded), and breaking majors ship an `UPGRADE-X.md` guide in the dist. To upgrade an existing install: `composer update aichadigital/larabill`, re-run `php artisan larabill:install --no-migrate` (idempotent — it publishes only the NEW migrations, skipping the ones you already have), then `php artisan migrate`. Never use `migrate:fresh` on a database with real data.

> ⚠️ **Upgrading?** Follow the guides sequentially: [UPGRADE-4.0.md](UPGRADE-4.0.md) (3.x → 4.0, VAT verification moves to [`lararoi`](https://github.com/aichadigital/lararoi)), [UPGRADE-5.0.md](UPGRADE-5.0.md) (4.x → 5.0, real fiscal series separated from the fiscal type) and [UPGRADE-6.0.md](UPGRADE-6.0.md) (5.x → 6.0, deprecated surface removed — zero migrations).

Larabill is a professional, **UUID-first** billing and invoicing package for Laravel applications. It provides tax calculation for Spain/EU/worldwide and flexible invoice generation with immutability protection, plus an optional thin bridge to intra-community VAT/NIF verification (delegated to the [`lararoi`](https://github.com/aichadigital/lararoi) package). The consumer app's `users.id` MUST be UUID v7 char(36) — see [`docs/setup-uuid.md`](docs/setup-uuid.md) and [ADR-006](docs/ADR-006-uuid-first-no-agnostic.md).

🎯 Features
----------

[](#-features)

### Core Functionality

[](#core-functionality)

- **Invoice Management**: UUID-based IDs, sequential numbering, proforma invoices, immutable records
- **Tax Calculation**: Spanish (IVA), Canary Islands (IGIC), Ceuta/Melilla (IPSI), EU reverse charge, worldwide
- **VAT/NIF Verification (optional)**: thin bridge that delegates to the `lararoi` package (VIES and other providers). Not wired into invoice issuance — reverse charge is driven by the `is_roi_taxed` flag
- **Fiscal Data Management**: Company and customer fiscal configurations with temporal validity
- **PDF Generation**: Built-in invoice PDF generation using DomPDF
- **EU Compliance**: Full support for EU B2B reverse charge and destination VAT rules

### Technical Excellence

[](#technical-excellence)

- **String UUID v7**: Ordered UUIDs for invoices and the consumer's `users.id` (ADR-006)
- **FixedDecimal money**: Precise monetary value objects backed by base-100 integers (no floating-point errors)
- **Preflight check**: `larabill:install` aborts cleanly when `users.id` is not UUID-compatible
- **Temporal Validity**: Fiscal configurations with `valid_from`/`valid_until` dates
- **Invoice Immutability**: Protection against modifications after issuance
- **Non-overlapping prices**: at most one active price per article and billing frequency on any date, enforced on write (ADR-012)

📦 Requirements
--------------

[](#-requirements)

- PHP ^8.3
- Laravel ^12.0 | ^13.0
- `users.id` UUID v7 char(36) — see [`docs/setup-uuid.md`](docs/setup-uuid.md)

🚀 Installation
--------------

[](#-installation)

### Via Composer

[](#via-composer)

```
composer require aichadigital/larabill
```

### Publish Configuration

[](#publish-configuration)

```
php artisan vendor:publish --tag="larabill-config"
```

### Run the Installer

[](#run-the-installer)

```
php artisan larabill:install
```

This will:

1. Publish migrations
2. Run database migrations
3. Seed default tax categories and rates

### Diagnostic Commands

[](#diagnostic-commands)

```
# List article prices that are active at the same time for the same article
# and billing frequency. Read-only; exits 1 when any pair exists.
php artisan larabill:diagnose-price-overlaps
```

Larabill enforces at most one active price per article and billing frequency on any given date (ADR-012), and rejects writes that would break it. A database written before that invariant may already hold overlapping prices, so run this as a **pre-upgrade gate** and resolve what it reports. It does not repair anything on purpose: deciding which of two prices survives is a pricing decision, and it is yours.

### Manual Installation (if preferred)

[](#manual-installation-if-preferred)

```
# Publish migrations
php artisan vendor:publish --tag="larabill-migrations"

# Run migrations
php artisan migrate

# Seed default data
php artisan db:seed --class="AichaDigital\Larabill\Database\Seeders\TaxRatesSeeder"
```

⚙️ Configuration
----------------

[](#️-configuration)

### Environment Variables

[](#environment-variables)

Add these to your `.env` file:

```
# Invoice Numbering
LARABILL_INVOICE_PREFIX="FAC"
LARABILL_PROFORMA_PREFIX="PRO"

# Optional: override the User model class. Must use UUID v7 char(36) ids.
LARABILL_USER_MODEL="App\\Models\\User"
```

### Model Configuration

[](#model-configuration)

The user model resolves through `user_model` (env `LARABILL_USER_MODEL`) in `config/larabill.php`:

```
'user_model' => env('LARABILL_USER_MODEL', App\Models\User::class),
```

`models.user` is an optional explicit override — when set to an existing class it wins over `user_model`. If neither key points to an existing class, larabill fails loudly (no silent default). Package models can be swapped through the `models` block:

```
'models' => [
    'invoice' => \AichaDigital\Larabill\Models\Invoice::class,
    'invoice_item' => \AichaDigital\Larabill\Models\InvoiceItem::class,
    // ...
],
```

🏗️ Architecture
---------------

[](#️-architecture)

### Fiscal Data Model

[](#fiscal-data-model)

Larabill separates company and customer fiscal data with temporal validity:

```
CompanyFiscalConfig    → Issuer fiscal settings (one active at a time)
UserTaxProfile         → Customer fiscal data, temporally versioned per user
Invoice                → Immutable invoice with fiscal snapshot

```

**Key principles**:

- The customer is a `User` (ADR-003); businesses and sub-accounts are modelled with `parent_user_id`. The legacy `CustomerFiscalData` model was removed.
- Company config changes apply from a specific date forward
- `UserTaxProfile` records are temporally versioned (`valid_from`/`valid_until`) — never modify past records
- Invoices capture a fiscal snapshot at creation time
- Invoices are **absolutely immutable** once issued

### UUID Strategy

[](#uuid-strategy)

Larabill uses **string UUID v7** for invoices:

```
// Model with UUID
use AichaDigital\Larabill\Concerns\HasUuid;

class Invoice extends Model
{
    use HasUuid;
}

// Migration
$table->uuid('id')->primary();
```

### Monetary Values (FixedDecimal)

[](#monetary-values-fixeddecimal)

**Money is stored as base-100 integers and exposed as `FixedDecimal` value objects** (from `lara100`), so there are no floating-point errors. You assign the unscaled base-100 integer; reading the attribute returns a `FixedDecimal`:

```
// Assign the base-100 integer (€12.34 → 1234):
$invoice->total_amount = 1234;

// Reading the attribute returns a FixedDecimal value object
// (base-100 backed, scale 2) — not a raw int:
$money = $invoice->total_amount; // FixedDecimal
```

Invoice and invoice-item money attributes use the `FixedDecimalCast` (scale 2) from the `lara100` package. Note: query-builder access (`->value()`, `->sum()`, `->where()`) returns the raw integer, while Eloquent attribute access returns a `FixedDecimal`.

📖 Usage
-------

[](#-usage)

### Creating an Invoice

[](#creating-an-invoice)

```
use AichaDigital\Larabill\Services\InvoiceService;

$invoiceService = app(InvoiceService::class);

$invoice = $invoiceService->createInvoice([
    'billable_user_id' => $user->id, // UUID v7 of the billed customer (ADR-003)
    'items' => [
        [
            'description'  => 'Professional Service',
            'quantity'     => 100,           // base-100: 100 = 1.0 unit
            'base_price'   => 10000,         // base-100: 10000 = €100.00
            'tax_group_id' => $taxGroup->id, // resolves the applicable VAT/IGIC/IPSI
        ],
    ],
]);
```

Invoice numbers are correlative per series (`invoice_series_control`, EU/RD 1619/2012): `fiscal_number`, `prefix`, `series_number` and `fiscal_year` all derive atomically from `InvoiceNumberingService`. An active `CompanyFiscalConfig` must exist — `createInvoice()` snapshots the issuer's fiscal data and refuses to emit without it.

> **Removed in 6.0:** the former `BillingService` quick-start path is gone — `InvoiceService` is the emission path. See [UPGRADE-6.0.md](UPGRADE-6.0.md) for the 1:1 mapping.

### Tax Calculation

[](#tax-calculation)

```
use AichaDigital\Larabill\Services\TaxCalculationService;

$taxService = app(TaxCalculationService::class);

// Calculate taxes for a single line. Amounts are base-100 integers. The
// applicable rate (Spanish IVA, Canary IGIC, Ceuta/Melilla IPSI, EU reverse
// charge or destination VAT) is resolved from the TaxGroup and the customer's
// fiscal profile — not passed in directly.
$result = $taxService->calculateForInvoiceItem([
    'quantity'         => 100,           // base-100: 1.0 unit
    'base_price'       => 10000,         // base-100: €100.00
    'tax_group_id'     => $taxGroup->id,
    'billable_user_id' => $user->id,     // optional: drives B2B / destination rules
]);

// $result keys (base-100 integers + breakdown):
//   taxable_amount, total_tax_amount, total_amount, tax_group_id, taxes_applied
```

### VAT/NIF Verification (optional bridge to lararoi)

[](#vatnif-verification-optional-bridge-to-lararoi)

Intra-community VAT/NIF verification is owned by the [`lararoi`](https://github.com/aichadigital/lararoi) package. Larabill exposes a single thin bridge action that delegates to lararoi's contract and returns its canonical result unchanged:

```
use AichaDigital\Larabill\Actions\VerifyVatNumber;

// Pass the VAT number WITHOUT the country prefix ("B12345678", not "ESB12345678").
$result = VerifyVatNumber::run('B12345678', 'ES');

if ($result['is_valid']) {
    echo 'Valid VAT for: '.$result['company_name'];
}
```

Providers (VIES, isvat, vatlayer, …), caching and optional tracking are configured in lararoi, not here — publish its config with `php artisan vendor:publish --tag="lararoi-config"`. This bridge is **not** wired into invoice issuance: reverse charge is decided by the invoice's `is_roi_taxed` flag, never by a live lookup.

### Company Fiscal Configuration

[](#company-fiscal-configuration)

```
use AichaDigital\Larabill\Models\CompanyFiscalConfig;

// Get current active config
$config = CompanyFiscalConfig::getActive();

// Create new config (the previous active one is auto-closed)
$newConfig = CompanyFiscalConfig::createNew([
    'tax_id'        => 'ESB12345678',
    'business_name' => 'Your Company S.L.',
    'address'       => 'Calle Test 123',
    'city'          => 'Madrid',
    'zip_code'      => '28001',
    'country_code'  => 'ES',
    'is_oss'        => true,
    'valid_from'    => now(),
]);
```

### User Tax Profile

[](#user-tax-profile)

The customer is a `User` (ADR-003); their fiscal data lives in `UserTaxProfile`, temporally versioned. This replaces the removed `CustomerFiscalData` model.

```
use AichaDigital\Larabill\Models\UserTaxProfile;

// Get the active fiscal profile for a user
$profile = UserTaxProfile::getActiveForOwner($user->id);

// Create a new profile (previous stays as history)
$newProfile = UserTaxProfile::createForOwner($user->id, [
    'fiscal_name'  => 'Client SARL',
    'tax_id'       => 'FR12345678901',
    'country_code' => 'FR',
    'is_company'   => true,
]);
```

🧪 Testing
---------

[](#-testing)

```
# Run all tests
composer test

# Run specific tests
composer test -- --filter=Invoice

# Run with coverage
composer test-coverage

# Static analysis
vendor/bin/phpstan analyse
```

**Current status (v3.1.3)**: 928 tests passing on SQLite, plus MySQL 8 integration tests (real column types and unique constraints) and fork-based concurrency tests. The UUID-first contract is demonstrated on MySQL 8.

📚 Documentation
---------------

[](#-documentation)

DocumentDescription[ARCHITECTURE.md](docs/ARCHITECTURE.md)Core architecture and domain model[setup-uuid.md](docs/setup-uuid.md)UUID-first onboarding for the consumer app[ADR-006](docs/ADR-006-uuid-first-no-agnostic.md)UUID-first decision (supersedes the agnostic id contract)[TAX\_RATES\_MIGRATION\_GUIDE.md](docs/TAX_RATES_MIGRATION_GUIDE.md)Tax rates migration guide[STABILITY.md](STABILITY.md)Stability contract: how larabill evolves from v6.0.0[UPGRADE-4.0.md](UPGRADE-4.0.md)Upgrade guide: larabill 3.x → 4.0 (VAT verification bridge)[UPGRADE-5.0.md](UPGRADE-5.0.md)Upgrade guide: larabill 4.x → 5.0 (fiscal series vs fiscal type)[UPGRADE-6.0.md](UPGRADE-6.0.md)Upgrade guide: larabill 5.x → 6.0 (deprecated surface removed)[CHANGELOG.md](CHANGELOG.md)Version history and breaking changesFor AI agents working with this package, see [.claude/project.md](.claude/project.md).

🗺️ Roadmap
----------

[](#️-roadmap)

### Shipped

[](#shipped)

- ✅ Core invoice management (immutable records, UUID v7, sequential numbering, proforma)
- ✅ Spanish tax system (IVA, IGIC, IPSI)
- ✅ EU reverse charge (B2B) and destination VAT
- ✅ Fiscal data with temporal validity (`CompanyFiscalConfig`, `UserTaxProfile`)
- ✅ `FixedDecimal` money type (base-100, no floating-point errors)
- ✅ VeriFACTU integration (Spain AEAT) via `lara-verifactu`
- ✅ Grouped payments
- ✅ Legal-retention contract (`LegallyRetainable`) for GDPR tooling

### Under consideration

[](#under-consideration)

- Subscription billing
- Payment gateway integration (Stripe, PayPal, Redsys)
- Advanced reporting

See the [CHANGELOG](CHANGELOG.md) for the full release history.

🤝 Contributing
--------------

[](#-contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

🔒 Security
----------

[](#-security)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

📄 License
---------

[](#-license)

GNU Affero General Public License v3.0 (AGPL-3.0-or-later). See [LICENSE.md](LICENSE.md) for details.

This means:

- ✅ You can use, modify, and distribute this software
- ✅ You must share any modifications under the same license
- ⚠️ If you run this as a network service, you must provide the source code to users
- ⚠️ You must preserve copyright and attribution notices

👥 Credits
---------

[](#-credits)

- [AichaDigital](https://aichadigital.es)
- [All Contributors](../../contributors)

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance79

Regular maintenance activity

Popularity19

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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

Total

59

Last Release

3d ago

Major Versions

v0.12.1 → v1.0.02026-06-22

v1.0.0 → v3.0.02026-06-26

v3.1.3 → v4.0.02026-07-03

v4.1.0 → v5.0.02026-07-11

v5.0.0 → v6.0.02026-07-11

### Community

Maintainers

![](https://www.gravatar.com/avatar/0a4694c48c325d3dfbc4c43d97c2617f9317d7a447971750c338f943a88bd164?d=identicon)[abkrim](/maintainers/abkrim)

---

Top Contributors

[![freekmurze](https://avatars.githubusercontent.com/u/483853?v=4)](https://github.com/freekmurze "freekmurze (376 commits)")[![abkrim](https://avatars.githubusercontent.com/u/1238625?v=4)](https://github.com/abkrim "abkrim (366 commits)")[![mvdnbrk](https://avatars.githubusercontent.com/u/802681?v=4)](https://github.com/mvdnbrk "mvdnbrk (46 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (30 commits)")[![Nielsvanpach](https://avatars.githubusercontent.com/u/10651054?v=4)](https://github.com/Nielsvanpach "Nielsvanpach (23 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (19 commits)")[![pforret](https://avatars.githubusercontent.com/u/474312?v=4)](https://github.com/pforret "pforret (16 commits)")[![sebastiandedeyne](https://avatars.githubusercontent.com/u/1561079?v=4)](https://github.com/sebastiandedeyne "sebastiandedeyne (14 commits)")[![AlexVanderbist](https://avatars.githubusercontent.com/u/6287961?v=4)](https://github.com/AlexVanderbist "AlexVanderbist (12 commits)")[![patinthehat](https://avatars.githubusercontent.com/u/5508707?v=4)](https://github.com/patinthehat "patinthehat (10 commits)")[![riasvdv](https://avatars.githubusercontent.com/u/3626559?v=4)](https://github.com/riasvdv "riasvdv (10 commits)")[![crynobone](https://avatars.githubusercontent.com/u/172966?v=4)](https://github.com/crynobone "crynobone (8 commits)")[![AdrianMrn](https://avatars.githubusercontent.com/u/12762044?v=4)](https://github.com/AdrianMrn "AdrianMrn (8 commits)")[![thecaliskan](https://avatars.githubusercontent.com/u/13554944?v=4)](https://github.com/thecaliskan "thecaliskan (5 commits)")[![irfanm96](https://avatars.githubusercontent.com/u/42065936?v=4)](https://github.com/irfanm96 "irfanm96 (5 commits)")[![IGedeon](https://avatars.githubusercontent.com/u/694313?v=4)](https://github.com/IGedeon "IGedeon (4 commits)")[![abenerd](https://avatars.githubusercontent.com/u/7523903?v=4)](https://github.com/abenerd "abenerd (3 commits)")[![jessarcher](https://avatars.githubusercontent.com/u/4977161?v=4)](https://github.com/jessarcher "jessarcher (3 commits)")[![koossaayy](https://avatars.githubusercontent.com/u/6431084?v=4)](https://github.com/koossaayy "koossaayy (3 commits)")[![lloricode](https://avatars.githubusercontent.com/u/8251344?v=4)](https://github.com/lloricode "lloricode (3 commits)")

---

Tags

laravelbillinguuidinvoicingb2bvattaxeuspainAichaDigitalfiscalreverse-chargelarabill

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/aichadigital-larabill/health.svg)

```
[![Health](https://phpackages.com/badges/aichadigital-larabill/health.svg)](https://phpackages.com/packages/aichadigital-larabill)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[spatie/laravel-permission

Permission handling for Laravel 12 and up

13.0k107.5M1.6k](/packages/spatie-laravel-permission)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.6k31.8M158](/packages/laravel-cashier)[api-platform/laravel

API Platform support for Laravel

58190.1k19](/packages/api-platform-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

818355.4k3](/packages/defstudio-telegraph)[masterix21/laravel-licensing

Laravel licensing package with polymorphic assignment to any model, activation keys, expirations/renewals, and seat control via LicenseUsage. Supports offline verification with public-key–signed tokens, a CLI to generate/rotate/revoke keys, and an extensible architecture via config and contracts.

1614.1k4](/packages/masterix21-laravel-licensing)

PHPackages © 2026

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