pictastudio / venditio
ecommerce package
Fund package maintenance!
Picta Studio
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/pictastudio/venditio
Requires
- php: ^8.4
- illuminate/contracts: ^12.8
- maatwebsite/excel: ^3.1
- nevadskiy/laravel-tree: ^0.6.1
- pictastudio/translatable: ^0.1
- spatie/laravel-activitylog: ^4.7
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-sluggable: ^3.7
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- nunomaduro/collision: ^8.9
- orchestra/testbench: ^10.4
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/phpstan: ^2.0
This package is auto-updated.
Last update: 2026-03-03 16:43:22 UTC
README
Venditio is a headless ecommerce package for Laravel. It provides API-only ecommerce primitives while host applications own auth, frontend, and rendering.
Installation
composer require pictastudio/venditio
Install Venditio
php artisan venditio:install
Documentation
- Architecture:
docs/ARCHITECTURE.md - API reference:
docs/API.md - Database schema (DBML):
database.dbml
Product Variants Model
Venditio models variants using a parent/child product strategy:
- A base product is a row in
productswithparent_id = null - Each purchasable variant is another row in
productswithparent_idset to the base product id - Variant axes live in
product_variants(for exampleColor,Size) - Axis values live in
product_variant_options(for exampleRed,M) - Assigned option values for each variant product are stored in
product_configuration
This keeps a single product identity while still allowing independent SKU/inventory/pricing per concrete variant.
Configuration
All behavior is configured through config/venditio.php.
Key sections
routes.api: route enable/prefix/name/middleware/pagination and resource wrappingmodels: model overrides (all package models are replaceable)validations: validation contract to implementation bindingsauthorize_using_policies: optional policy/gate authorizationprice_lists: optional multi-price featurediscounts: discount calculator/bindings/rules configurationproduct: product enums, sku generator and product list variant visibility defaultsproduct_variants: variant naming/copy behavior
User model and auth integration
Authentication is not enforced by default.
If your host app uses Sanctum, add HasApiTokens to your user model and point the package user model config to it:
namespace App\Models; use Laravel\Sanctum\HasApiTokens; use PictaStudio\Venditio\Models\User as VenditioUser; class User extends VenditioUser { use HasApiTokens; }
'models' => [ // ... 'user' => App\Models\User::class, ],
Optional policy integration
Register policies in the host app and keep venditio.authorize_using_policies enabled:
use App\Models\Product; use App\Policies\ProductPolicy; use Illuminate\Support\Facades\Gate; public function boot(): void { Gate::policy(Product::class, ProductPolicy::class); }
Controllers call authorization only when enabled and when a policy/gate definition exists.
Validation customization
Validation rules are resolved from contracts in config('venditio.validations').
Override a resource by rebinding its contract to your implementation.
use App\Validations\AddressValidation; use PictaStudio\Venditio\Validations\Contracts\AddressValidationRules; public function boot(): void { $this->app->singleton(AddressValidationRules::class, AddressValidation::class); }
Identifier generator customization
use PictaStudio\Venditio\Contracts\CartIdentifierGeneratorInterface; use PictaStudio\Venditio\Contracts\OrderIdentifierGeneratorInterface; $this->app->singleton(CartIdentifierGeneratorInterface::class, App\Generators\CartIdentifierGenerator::class); $this->app->singleton(OrderIdentifierGeneratorInterface::class, App\Generators\OrderIdentifierGenerator::class);
Commands
Release stock for abandoned carts
Enabled by default and configurable from:
venditio.commands.release_stock_for_abandoned_carts.enabledvenditio.commands.release_stock_for_abandoned_carts.inactive_for_minutesvenditio.commands.release_stock_for_abandoned_carts.schedule_every_minutes
Publish Bruno collection
php artisan vendor:publish --tag=venditio-bruno
High-level structure
src/
|--- Actions
|--- Contracts
|--- Discounts
|--- Dto
|--- Enums
|--- Http
|--- Models
|--- Pipelines
|--- Pricing
|--- Validations
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.