Open-source ERP for small-scale artisanal manufacturers and craft businesses
Craftplan brings all essential business tools into one platform: catalog management, inventory control, order processing, production planning, purchasing, and CRM, so you can get off the ground quickly without paying for multiple separate platforms.
Catalog & BOM
- Product catalog with photos and labels
- Versioned Bills of Materials — edit latest, older versions read-only
- Automatic cost rollups across nested BOMs
- Labor steps with time and cost tracking
Orders & Invoices
- Customer order processing with calendar-based scheduling
- Invoice generation
- Order item allocation to production batches
Production
- Production batching with automatic material consumption
- Cost snapshots per batch
- Completion workflow with produced quantity tracking
Inventory
- Raw material management with lot traceability
- Stock movements (consume, receive, adjust)
- Allergen and nutritional fact tracking
- Demand forecasting and reorder planning
Purchasing
- Purchase orders and supplier management
- Receiving into stock with lot creation
CRM
- Customer and supplier database
- Order history and statistics
Import / Export
- CSV bulk import for products, materials, and customers
- CSV export
- Transactional email delivery configurable from the UI
- SMTP, SendGrid, Mailgun, Postmark, Brevo, and Amazon SES
- API keys encrypted at rest
Calendar Feed
- iCal (.ics) subscription URL for Google Calendar, Apple Calendar, or any iCal-compatible app
- Includes order deliveries and production batch schedules
- Generate and revoke feeds from Settings
API
- JSON:API and GraphQL endpoints for programmatic access
- API key authentication with encrypted storage
- CORS configuration
Access Control
- Admin and staff roles
- Policy-based authorization on all resources
Global Search
- Command palette (
Cmd+K/Ctrl+K) for instant access to any record - Fuzzy search across products, materials, orders, customers, and batches
![]() |
![]() |
![]() |
![]() |
![]() |
Elixir · Ash Framework · Phoenix LiveView · PostgreSQL · Tailwind CSS
Deploy Craftplan on your own server. No need to clone the repo:
curl -O https://raw.githubusercontent.com/puemos/craftplan/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/puemos/craftplan/main/.env.example
cp .env.example .env # Fill in the required secrets (see .env.example)
docker compose up -dThis starts Craftplan, PostgreSQL, and SeaweedFS with database migrations running automatically.
Upgrading from MinIO? The updated Compose file automatically migrates and verifies existing photos before starting Craftplan. Later SeaweedFS upgrades skip migration. Keep your .env and volumes; see the upgrade guide for disk-space requirements and recovery.
See the self-hosting guide for single-container mode, Railway deployment, reverse proxy setup, and more.
For contributors who want to work on the codebase. Prerequisites: Docker and mise
mise install # Install Elixir, Erlang/OTP, and Node.js versions from mise.toml
mise run services:up # Start PostgreSQL + SeaweedFS + Mailpit
mise run setup # Install deps, migrate, build assets, seed
mise run dev # Start at localhost:4000See the development setup guide for detailed instructions.
- Purpose-built for artisanal manufacturing — not a generic ERP adapted to fit; workflows are designed around small-batch, made-to-order production
- Allergen & nutritional tracking — first-class support for food and beverage producers who need to track ingredients and generate nutrition labels
- BOM versioning with cost rollups — iterate on recipes and formulas while keeping full history and accurate costing
- Self-hosted, no vendor lock-in — your data stays on your infrastructure, backed by PostgreSQL
Contributions are welcome. For major changes, please open an issue first to discuss your proposal.
mise run test # Run the test suite
mise run format # Format code (Styler, Spark, Tailwind, HEEx)
mise run format:check # Check formatting without modifying files
mise run ci # Run the full CI suite locally (requires services:up)Commits follow the convention: type(scope): description (e.g., feat(batching):, fix(orders):, ui(production):).
This project is licensed under the AGPLv3 License. See the LICENSE file for details.





