v1.0.0 RELEASED — NOV 21, 2025 9.3K GITHUB STARS SCALES PAST 10M PRODUCTS LARAVEL 12 / PHP 8.2+ 10+ AI PROVIDERS — BYOK MIT LICENSE — 100% OPEN SOURCE 1,293+ INSTALLATIONS WORLDWIDE v1.0.0 RELEASED — NOV 21, 2025 9.3K GITHUB STARS SCALES PAST 10M PRODUCTS LARAVEL 12 / PHP 8.2+ 10+ AI PROVIDERS — BYOK MIT LICENSE — 100% OPEN SOURCE 1,293+ INSTALLATIONS WORLDWIDE
A Field Guide · English Edition · 2026

Turn product data
from chaos into capital.

UnoPim is an open-source PIM (Product Information Management) system built on Laravel 12 and shipped under MIT. It pulls product data scattered across spreadsheets, ERPs, and supplier CSVs into one semantic layer, then hands you an AI Agent that compresses jobs like enriching attributes, writing copy, translating, and pushing to channels into plain-language commands. This guide walks you from zero to production.
Repo
unopim/unopim
Latest
v1.0.0
Stack
Laravel 12
License
MIT
9.3KGitHub Stars
10M+Product Ceiling
1,283Commits
32+AI Agent Actions
30+Locales Supported
01 — Why This Repo Earns Your Attention

In the PIM market,
it isn't aiming at the giants.

Akeneo CE stopped getting new features in 2023. Pimcore is powerful but demands a dedicated dev team to keep alive. AtroPIM is fully API-first with a steep learning curve. UnoPim sits in the gap between these four: a sensible choice for brands and merchants whose catalog will grow but whose team isn't enterprise-scale yet. One Composer command and you're running, with an AI Agent already baked in and a published roadmap past 10M products.

Option Best Fit Key Traits Current Status
UnoPim SMB brands, Laravel-native teams Laravel 12AI Agent10M+ scale Actively developed
Akeneo CE Transitional use only (en route to paid edition) SymfonyFrozen 2023 Support sunsetting
Pimcore Enterprises wanting PIM + MDM + CMS + DAM in one SymfonyFull platformHigh config Needs dev team
AtroPIM Manufacturers, distributors, complex data models API-firstNo-code modeling Most configurable
02 — What You Can Actually Ship With It

Twelve capabilities you'll touch in week one.

F·01

Agentic PIM Chat

Operate the whole catalog through natural language: search, create, bulk update, categorize, generate content, export. Supports multi-step tool calling — one command breaks down into multiple ordered steps. Ships with 32+ pre-registered actions.

NEW IN v1.0.0
F·02

Magic AI Content Generation

Connect 10+ AI platforms (OpenAI, Anthropic, Gemini, Mistral, and more). API keys stored encrypted, models switchable per task. Generates descriptions, images, and translations.

F·03

10M+ Scale

Official guide walks through the architecture choices for reaching millions of SKUs.

F·04

Multi-Channel

One SKU pool pushed to many channels, each with its own attribute and content variants.

F·05

Locales & Currencies

30+ locales out of the box. Each locale carries its own translations and content fields, with separate pricing strategies per currency.

F·06

Roles & Approvals

Three layers: users, roles, permissions. Maker-Checker workflow available as an optional module.

F·07

REST API

Official Postman collection plus a PSR-18 compatible PHP API client.

F·08

Webhooks

Product save/update events delivered to subscribers asynchronously, non-blocking.

F·09

Import / Export with Job Tracking

CSV and XLSX supported, with a live job tracker, visual logs, and drag-and-drop ZIP uploads. Completeness score runs as an async queue job, surfacing data quality issues on a "Needs Attention" dashboard so nothing rots silently.

F·10

DAM (Digital Assets)

File and folder management, preview, deletion, metadata tagging, collaboration, and CSV/XLSX asset assignment exports. Wires directly into PIM product records.

EXTENSION
F·11

Version Control

Every product data change is tracked with history. Roll back to any earlier state.

F·12

Light / Dark Themes

Toggleable UI themes, full icon set included.

03 — Under the Hood

Familiar tools, no black magic.

Framework
Laravel
v12
Runtime
PHP
8.2+
Front-end
Vue.js
SPA
Styling
Tailwind
CSS
Database
PostgreSQL
14+ (recommended)
Database (alt)
MySQL
8.0.32+
Cache / Queue
Redis
latest
Search
Elasticsearch
optional
Build
Vite
latest
Package
Composer
2.5+
Node
Node.js
18.17.1 LTS+
Container
Docker
Compose v2+
04 — Getting It Running

Three paths. Pick what fits your stomach.

A · Composer

~ 8 min
# 1. Create the project
composer create-project unopim/unopim
cd unopim

# 2. Run the install wizard
php artisan unopim:install

# 3. Boot the dev server
php artisan serve

# 4. Start the queue worker (required)
php artisan queue:work \
  --queue=webhooks,system,default,completeness
Heads up: the webhooks queue name can't be omitted, or every outgoing webhook will pile up forever unprocessed.

B · Docker

~ 5 min
# 1. Clone
git clone https://github.com/unopim/unopim.git
cd unopim

# 2. Copy env file
cp .env.docker .env

# 3. Bring up the stack
docker compose up -d

# 4. Wait ~90s for migrations / seeders
# Then hit your browser:
# http://localhost:8000/admin
# Email: admin@example.com
# Password: admin123
Port conflict? If MySQL / Redis / Elasticsearch are already running locally, edit the FORWARD_* variables in .env and restart.

C · AWS Marketplace AMI

~ 3 min
# 1. Launch UnoPim AMI from AWS Marketplace
# 2. SSH into your EC2 instance
chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@your-ip

# 3. Run the SSL setup (A record already on IP)
sudo ./ssl-setup.sh

# 4. Visit https://yourdomain.com/
# Click "Continue" through the setup screen
Best for: skipping manual deployment and landing on a live cloud instance. Works for staging or production.
05 — How the AI Agent Actually Works

From suggesting
to executing.

The five-step path from chat to commit

1
Intent Resolution

User types translate every SKU starting with TSH- into Japanese. The LLM parses out entity (product), filter (SKU prefix), action (translate), locale (ja_JP).

2
Tool Call Planning

The agent picks product.search, locale.translate, and product.update from the 32+ registered tools and orders them.

3
Permission Check

Cross-references the current user's role permissions. Missing translate rights? Pauses and asks for confirmation. Has rights? Queues the job.

4
Multi-Step Execution

Dispatched to queue:work async. Each completed item reports progress back to chat. Long-form content jobs route through the "Needs Attention" dashboard for human review.

5
Write-Back + Version Snapshot

On success, writes to version control so older states are rollback-ready. Triggers webhooks to downstream channels (Shopify, Bagisto, and the rest).

10+ AI Platforms Wireable

BYOK · Encrypted · Dynamic Model
OpenAI GPT-4o
Anthropic Claude
Google Gemini
Mistral AI
Cohere Command
Azure OpenAI
Groq
Self-hosted LLM

Credentials live encrypted in the database, per-provider connection testing is built in, and you can swap models mid-task — same prompt drafted on a cheap model, polished on a premium one.

06 — Prompt Design in Practice

A Magic AI task,
turned into a production-grade prompt.

Scenario: bulk-generate multi-channel copy for wireless noise-cancelling headphones

Input: raw supplier spec sheet → Output: structured JSON that writes back into UnoPim attributes, including SEO title, short description, long description, bulleted features, and Schema.org product fields.

[SYSTEM] You are UnoPim's Magic AI content agent. Generate product copy that LLM-powered shopping assistants (ChatGPT, Perplexity, Rufus) can parse with high accuracy. RULES 1. Output ONLY valid JSON. 2. Title ≤ 60 chars, include primary attribute + brand. 3. Short desc ≤ 160 chars, must include 1 use-case phrase. 4. Long desc 120-180 words, 3 paragraphs, no marketing fluff. Lead with the spec that matters most. 5. Bullets: 5-7 items, each starts with the attribute noun, not a verb. 6. Schema.org Product fields required: brand, color, audience, material. 7. Tone: "{{brand_voice}}" 8. Locale: "{{target_locale}}" [USER] {{raw_supplier_data}} [ASSISTANT] Respond with JSON only. No preamble, no code fences.
{ "sku": "WBT-X400-BLK", "locale": "en_US", "title": "Aurora X400 Noise-Cancelling Wireless Headphones — 40hr Battery", "short_description": "Over-ear Bluetooth headphones for commutes and remote calls, with 40 hours of playback per charge.", "long_description": "The Aurora X400 pairs a 40mm dynamic driver with dual ENC microphones...", "bullets": [ "Active noise cancellation rated at 35dB, clear vocals over subway noise", "Battery life 40 hours (28 hours with ANC on)", "Fast charge: 10 minutes for 5 hours of playback", "Bluetooth 5.3 with dual-device pairing", "Memory-foam earcups, no pressure after 2 hours of wear", "Weight 248g, folds into the included hard case" ], "schema": { "brand": "Aurora", "color": "Ink Black", "audience": "Commuters, remote workers", "material": "Aluminum + protein leather" }, "seo": { "meta_title": "Aurora X400 ANC Headphones — 40hr Battery", "meta_description": "40-hour battery, 35dB active noise cancellation..." }, "completeness_score": 0.94 }
Pin Down the Rules

UnoPim attributes are schema, not free-text. Hard-coding word limits and required Schema.org fields into the prompt cuts the percentage that needs human cleanup.

Force JSON Mode

Call models that support JSON mode (GPT-4o, Claude). Belt-and-braces: "Output ONLY valid JSON" in the prompt plus a response_format constraint at the API level. Stops markdown-wrapped code blocks from sneaking through.

Use Variable Templates

Pull {{brand_voice}}, {{target_locale}}, and {{raw_supplier_data}} out as UnoPim prompt template variables. One prompt then works across channels, locales, and SKUs.

07 — Community Notes from the Field

What people are actually saying
on Reddit, HN, and Dev.to.

UnoPim hasn't hit Pimcore's discussion density yet, but the threads around "open-source PIM × AI agents × SMB brands" have settled into clear patterns. Below: a synthesis of recurring takes from r/ecommerce, r/laravel, r/SaaS, HN, Dev.to, and structural advice pulled from competitive comparison pieces. Treat this as your reality check before committing.

UnoPim works fine as a mini-ERP. Products flow from supplier into UnoPim, and UnoPim pushes out to Shopify, Magento, or your point-of-sale. One system carries the master data role.

Practitioner ViewUSE-CASE

Akeneo CE is on a countdown — frozen since 2023, support ending in 2026. Either migrate to the paid edition or jump now.

Competitive ReadSTRATEGY

Get your attribute structure right before installing. Rebuilding families later is brutal.

ArchitectureHACK

Forget the webhook queue and nothing downstream ever fires. Classic first-time bite.

Beginner TrapGOTCHA

When LLMs fill product data, use RAG — feed your brand guidelines into context instead of letting the model improvise. Otherwise 50 SKUs get 50 different voices and brand consistency collapses.

AI WorkflowAI-OPS

GPT-4 hits structured data with about 3× the accuracy of unstructured (16% → 54%). Schema markup isn't an SEO toy anymore, it's the entry ticket to AI commerce.

Research DataDATA

PIM AI splits into Levels 0–4. Most "AI PIMs" on the market are still Level 1 (suggestion-only). The ones that can actually execute (agentic) are where the labor savings live.

Industry TakeFRAMEWORK

BYOK beats vendor lock. Keep AI costs in your own hands.

Cost ControlTIP

Pick PostgreSQL over MySQL. The official recommendation isn't arbitrary — product attributes are EAV-shaped, and PostgreSQL's JSONB plus its index capabilities make a real query-performance difference at scale.

Performance TuningPERF

Multimodal LLMs can read the image and the description at the same time, catching cases where supplier text doesn't match the photo. Last line of defense against bad data uploads.

Quality AssuranceQA

Webkul (the maintainer) is an India-based team. Issue response is steady, PR review is strict.

Maintainer ReadTEAM
08 — Where It Lands in the Real World

Four scenarios that pull most of the deployments.

USE CASE A — Omnichannel Commerce

One SKU pool,
five channels, three locales, two currencies.

UnoPim sits as the master data source. Each SKU has a neutral core record, then per-channel overlays for title length, required fields, and pricing. Japan locale auto-translates into ja_JP, EU markets switch to tax-inclusive pricing.

ChannelsLocalesMulti-currencyShopify Connector
USE CASE B — B2B Distribution / Industrial

SKUs with 200+ attributes
and monthly supplier CSVs.

Furniture, hardware, components, chemicals — each SKU carries hundreds of technical specs. UnoPim's attribute families let you template by product type. Import supplier CSV, then let the AI Agent fill in missing attributes and flag unit-inconsistency errors.

Attribute FamilyBulk ImportAI ValidationCompleteness Score
USE CASE C — Headless / Composable

PIM as a
product-data API source.

Front-end is Next.js or Nuxt, back-office ERP is SAP or Odoo. UnoPim hands product data to the storefront over REST, and webhooks push updates back to the ERP. PHP API client is PSR-18 compatible, drops into any PHP codebase.

REST APIWebhooksPSR-18Headless
USE CASE D — AI Discoverability Prep

Get your products
cited by ChatGPT, Perplexity, and Rufus.

AI search engines don't rank by backlinks — they rank by schema completeness and authoritative list mentions. Fill out Schema.org Product / Offer / FAQPage / BreadcrumbList. UnoPim's Magic AI generates these fields in bulk, and the completeness score tells you which SKUs aren't ready yet.

Schema.orgMagic AISEOCompleteness
09 — Mistakes Worth Avoiding

Six errors almost every new team hits.

!

Skipping the webhooks queue

Downstream channels miss every product update — the most common rookie hit. queue:work must include webhooks.

!

Picking MySQL over PostgreSQL

The official recommendation is PostgreSQL 14+. JSONB indexing handles EAV-shaped product attributes far more efficiently — swapping later, after data has grown, is painful.

!

Building SKUs before attribute families

Jumping straight into SKU creation, then trying to add shared attributes and shared validation later means editing rows one by one. Design families first, apply them in bulk.

!

No prompt template for Magic AI

Every LLM call generates a different voice. Bake brand voice, word limits, and required fields into a reusable system prompt template.

!

Port conflicts left unhandled

MySQL or Redis already running locally when you bring up Docker compose — instant failure. Edit FORWARD_DB_PORT and friends in .env first.

!

Hardcoding AI API keys

UnoPim ships encrypted BYOK storage out of the box. Don't put keys in .env or in the codebase — add them through the AI Platform admin screen.

Open a terminal,
run composer create-project.

01 — REPO GitHub → 02 — DOCS Documentation → 03 — DEMO Live Demo → 04 — API Postman →