Open-source Order Management System for e-commerce.
OpenOMS is a self-hostable, multi-tenant OMS with 430 API endpoints, 124 dashboard pages, and integrations with 8 marketplaces and 8 carriers. Built with Go and Next.js, designed for teams that need full control over their order operations.
Status: Active Development — Looking for beta testers! Join our Discord
- Custom order statuses, custom fields, and tags
- Order merge and split
- Kanban board view
- Barcode scanning (packing station)
- Automation rules engine (trigger, conditions, actions)
- Print templates (orders, invoices, shipping labels)
- CSV import/export
- Action delays (scheduled automation)
- Product variants and bundles
- B2B pricing tiers
- Multi-warehouse stock management
- Warehouse documents (PZ/WZ/MM)
- Stocktaking (inventory counts)
- Product CSV import with preview
- Product categories with color badges
| Integration | Description | Status |
|---|---|---|
| Allegro | OAuth2, full offer management, listing creation, "Wysylam z Allegro" shipments | Verified |
| Amazon SP-API | Orders and catalog sync | In Development |
| WooCommerce | Bidirectional order and product sync | In Development |
| eBay | Order import and listing management | In Development |
| Kaufland | Marketplace integration | In Development |
| OLX | Listing and order management | In Development |
| Mirakl / Empik | Marketplace connector | In Development |
| Erli | Polish marketplace integration | In Development |
| Integration | Description | Status |
|---|---|---|
| InPost | Paczkomaty (parcel lockers) + courier + webhooks + dispatch orders | Verified |
| DHL | Domestic and international shipping | In Development |
| DPD | Parcel shipping | In Development |
| GLS | Parcel shipping | In Development |
| UPS | Domestic and international shipping | In Development |
| Poczta Polska | National postal service | In Development |
| Orlen Paczka | Parcel lockers | In Development |
| FedEx | International shipping | In Development |
Carrier rate shopping across all providers.
| Integration | Description | Status |
|---|---|---|
| Fakturownia | Invoice generation | In Development |
| KSeF | Polish national e-invoicing system | In Development |
| Mailchimp | Marketing automation | In Development |
| Freshdesk | Helpdesk tickets | In Development |
| SMSAPI / Twilio | SMS notifications | In Development |
| OpenAI | AI product categorization and descriptions | Verified |
| NBP | Exchange rates (multi-currency support) | Verified |
- Multi-tenant SaaS with PostgreSQL Row-Level Security
- 430 REST API endpoints with OpenAPI 3.1 spec (Swagger UI)
- 124 dashboard pages with dark mode, PWA support, keyboard shortcuts
- RBAC with custom roles
- 2FA / TOTP authentication
- WebSocket real-time updates
- Outgoing webhooks (HMAC-SHA256 signed)
- Audit log
- Self-service returns portal
- Multi-currency with NBP exchange rates
- Customer management (CRM)
- Prometheus metrics (Bearer token auth)
- Security headers (CSP, X-Frame-Options, HSTS, Referrer-Policy)
- Kubernetes secrets encryption at rest, audit logging
| Layer | Technology |
|---|---|
| Backend | Go 1.25, chi/v5 router, pgx/v5 |
| Frontend | Next.js 16, React 19, TypeScript |
| Styling | Tailwind CSS v4, shadcn/ui |
| State / Data | Zustand, React Query, Zod v4 |
| Charts | Recharts |
| Database | PostgreSQL 16 (Row-Level Security) |
| Cache / Queue | Redis 7, asynq |
| Auth | Ed25519 JWT, bcrypt, TOTP |
| API Spec | OpenAPI 3.1, Swagger UI |
| E2E Tests | Playwright (21 specs, 119 tests) |
| CI/CD | GitHub Actions (lint, test, security scan, auto-format, Trivy) |
| Deployment | Docker Compose (dev + prod), Helm chart (k3s/k8s) |
| Monitoring | Prometheus metrics (token-protected) |
| Metric | Count |
|---|---|
| Go source files | 536 (81 test files) |
| TypeScript / TSX files | 308 |
| SQL migrations | 64 (128 up/down files) |
| API endpoints | 430 |
| Dashboard pages | 124 |
| React components | 91 |
| Custom hooks | 69 |
| Handlers / Services / Repos | 80 / 57 / 40 |
| Background workers | 19 |
| Middleware | 12 |
| SDK packages | 26 |
Prerequisites: Go 1.25+, Node.js 22+, Docker, Task
# 1. Clone
git clone https://github.com/openoms-org/openoms.git
cd openoms
# 2. Configure environment
cp .env.example .env
# 3. Start infrastructure, run migrations, seed data
task setup
# 4. Start the API server (port 8080)
task run
# 5. In a second terminal -- start the dashboard (port 3000)
task devVerify the API is running:
curl http://localhost:8080/healthtask setup # Full setup: containers + migrations + seed
task up # Start PostgreSQL + Redis containers
task down # Stop containers
task run # Start API server (port 8080)
task dashboard # Start dashboard dev server (port 3000)
task dev # Start API server + dashboard in parallel
task migrate # Run database migrations
task seed # Load test data
task test # Run all tests (race detection + coverage)
task lint # Run golangci-lint on all modules
task fmt # Format all Go source files
task clean # Stop containers and remove volumesopenoms/
├── apps/
│ ├── api-server/ # Go backend (ELv2)
│ │ ├── cmd/server/ # Entrypoint
│ │ ├── internal/ # Handlers, services, repositories, workers
│ │ └── migrations/ # 64 migrations (128 SQL files)
│ └── dashboard/ # Next.js frontend (ELv2)
│ └── src/
├── packages/ # 26 standalone SDK libraries (MIT)
├── deploy/
│ └── helm/openoms/ # Helm chart for k3s/k8s
├── docs/
│ └── system-documentation.md
├── docker-compose.dev.yml
├── docker-compose.prod.yml
├── Taskfile.yml
├── .github/workflows/
│ ├── ci.yml # Lint, test, security scan, auto-format
│ └── release.yml # CI/CD workflow that builds Docker images
└── .env.example
All packages are independently usable Go libraries, licensed under MIT.
| Package | Wraps |
|---|---|
allegro-go-sdk |
Allegro REST API (OAuth2, offers, orders, deliveries) |
amazon-sp-sdk |
Amazon Selling Partner API |
woocommerce-go-sdk |
WooCommerce REST API |
ebay-go-sdk |
eBay Browse / Sell APIs |
kaufland-go-sdk |
Kaufland Marketplace API |
olx-go-sdk |
OLX Partner API |
mirakl-go-sdk |
Mirakl Marketplace Platform API |
erli-go-sdk |
Erli Marketplace API |
inpost-go-sdk |
InPost ShipX API (shipments, points, tracking) |
dhl-go-sdk |
DHL Parcel API |
dpd-go-sdk |
DPD Web Services |
gls-go-sdk |
GLS Web API |
ups-go-sdk |
UPS Shipping / Tracking APIs |
poczta-polska-go-sdk |
Poczta Polska e-Nadawca API |
orlen-paczka-go-sdk |
Orlen Paczka API |
fedex-go-sdk |
FedEx Ship / Track APIs |
fakturownia-go-sdk |
Fakturownia Invoicing API |
ksef-go-sdk |
KSeF (Polish National e-Invoicing System) |
smsapi-go-sdk |
SMSAPI SMS Gateway |
order-engine |
Order state machine and domain events |
iof-parser |
IOF product feed parser |
Full system documentation is available at docs/system-documentation.md.
The API server exposes an interactive OpenAPI 3.1 specification via Swagger UI at /swagger/ when running.
cp .env.example .env
# Edit .env with production values (strong secrets, real credentials)
docker-compose -f docker-compose.prod.yml up -d --buildThe production compose file includes PostgreSQL, Redis, automatic database migrations, the API server, and the Next.js dashboard. All services include health checks and restart policies.
A Helm chart is provided for k3s/k8s deployments:
helm upgrade --install openoms deploy/helm/openoms \
-n openoms \
--set apiServer.image.tag=latest \
--set dashboard.image.tag=latest \
--set migration.image.tag=latestThe CI/CD pipeline (.github/workflows/release.yml) builds Docker images, scans them with Trivy, and deploys to k3s via Helm on push to main.
- PostgreSQL 16+
- Redis 7+
- Reverse proxy (nginx / Caddy / Traefik / ingress-nginx) for TLS termination
The Docker images are stateless and can be deployed behind a load balancer or on single-node setups like k3s.
- Allegro integration (OAuth2, offers, orders, "Wysylam z Allegro" shipments)
- InPost integration (Paczkomaty, courier, label generation, tracking, webhooks)
- Dashboard with Kanban board, dark mode, and PWA support
- Order, product, and customer management
- Automation rules engine (triggers, conditions, actions, delays)
- Packing station with barcode scanner
- Reports and CSV export
- 2FA/TOTP, RBAC with custom roles
- 7 additional carriers (DHL, DPD, GLS, UPS, Poczta Polska, Orlen Paczka, FedEx)
- 10 marketplaces (Amazon, eBay, WooCommerce, Kaufland, OLX, Empik, Erli, Shoper, PrestaShop, Shopify)
- Repricing engine (4 pricing strategies)
- Multi-warehouse with PZ/WZ/MM documents
- Invoicing (Fakturownia, inFakt, wFirma) + KSeF e-invoicing
- Product variants and bundles
- Multi-currency (NBP exchange rates)
- Public SaaS (hosted version)
- Mobile application
- Plugin/extension marketplace
- Customer self-service portal
- Discord: discord.gg/3Z5hzeH5 — ask questions, report bugs, suggest features
- Issues: GitHub Issues
- Website: openoms.org
We're looking for beta testers — Polish e-commerce sellers who want to try OpenOMS on real orders. Join Discord for details.
Contributions are welcome. See CONTRIBUTING.md for full details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Run tests (
task test) and linting (task lint) - Open a pull request against
main
Please open an issue first for large changes or new features.
This project uses a two-repository deployment model:
- Public repo (
openoms-org/openoms): Builds Docker images on every push tomain, pushes to GHCR, runs Trivy security scans - Enterprise repo (private): Deploys to production via Helm with environment-specific values overlay
Docker images are public on GHCR:
ghcr.io/openoms-org/openoms-apighcr.io/openoms-org/openoms-dashboardghcr.io/openoms-org/openoms-migrate
- Core applications (
apps/): Elastic License 2.0 - SDK packages (
packages/): MIT License
Built in Poland. Open by default.