THE ATOMIC
LOGIC FOR
MODERN ERPs
The pure, telemetry-free engine for PIM, WMS, and OMS.
Build for Laravel without the bloat.
<?php
use Obelaw\Ium\Pim\Data\ProductDTO;
// 1. Create a Category
$category = ium()->pim()->categories()->create([
'name' => 'Tech Gadgets',
'slug' => 'tech-gadgets',
'is_active' => true,
]);
// 2. Create a Product
$productData = new ProductDTO(
sku: 'SMART-WATCH-X1',
name: 'Smart Watch X1',
productType: 'simple',
price: 199.99,
description: 'The latest smart watch...',
categories: [$category->id]
);
$product = ium()->pim()->products()->create($productData);
Why Obelawium?
Built different. On purpose.
Pure Logic
Decoupled from UI. Just business logic.
Telemetry-Free
No tracking. Your data is yours.
Zero Deps
No external services required.
IUM-PIM
Product Information Management
composer require obelaw/ium-pim IUM-WMS
Warehouse Management System
composer require obelaw/ium-wms IUM-OMS
Order Management System
composer require obelaw/ium-oms
Speak Business,
Write Code
Obelawium's Fluent API turns complex ERP operations into readable, chainable method calls. Your code reads like a sentence.
ium()->pim()
->products()
->structure()
->add($component); Compose product structures with a fluent chain — BOM, variants, and bundles in one call.
ium()->wms()
->inventory()
->reserve('SKU-001', 5)
->fromWarehouse('main'); Reserve, transfer, and audit stock with intent-revealing methods — no raw queries needed.
ium()->oms()
->orders()
->create($orderDTO)
->fulfill(); Create, process, and fulfill orders through a single expressive pipeline.
One Entry Point. Infinite Domains.
Every module is accessed through ium() — a single global helper that routes into any domain. No service container lookups, no boilerplate.
Full Control.
Zero Magic.
We don't believe in black boxes. Every line of code is accessible, type-safe, and designed for extension.
- Strict Types
- 100% Test Coverage
- PSR-12 Compliant
- No hidden API calls
namespace Obelaw\IUM\WMS; class InventoryManager { /** * Reserve stock for an order * @param string $sku * @param int $qty */ public function reserve(string $sku, int $qty): void { // Your custom logic here... $this->stock->decrement($sku, $qty); Event::dispatch(new StockReserved($sku)); } }