CRM Β· ERP Β· Custom Workflows β 10x Faster Than Traditional Frameworks
Building custom business applications is expensive and slow:
- Traditional development: 6-12 months for a basic CRM/ERP
- Commercial solutions (Odoo, SAP): β¬20K-100K/year + vendor lock-in
- Customizing platforms: Expensive and complex
- No-code tools: Limited power for complex business logic
Define your business app declaratively in YAML/XML. SaltOS 4 automatically generates:
- β Full REST API with authentication
- β Responsive web UI (desktop + mobile)
- β Complete audit trail with blockchain integrity
- β Multi-language support (EN/ES/CA)
- β Offline-first Progressive Web App
- β PDF generation from templates
- β Full-text search indexing
# apps/crm/xml/customers.yaml
app: customers
template: apps/common/xml/default.xml
list:
- [name, text, Name]
- [code, text, Tax ID]
- [city, text, City]
- [active, boolean, Active]
form:
- [name, text, Name]
- [code, text, Tax ID]
- [email, text, Email]
- [phone, text, Phone]
- [notes, textarea, Notes]
- [type_id, select, Type]
select:
- [type_id, app_customers_types]
attr:
name:
required: true
notes:
height: 5emPlus database schema (dbschema.xml) and app manifest (manifest.xml). π See complete CRM example
You automatically get:
- β
Full REST API (
GET/POST/PUT/DELETE /api/app/customers) - β Responsive web UI with search/filter/pagination
- β Create/Edit/Delete forms with validation
- β Blockchain-verified version history
- β File attachments & notes system
- β User/group permission system
- β Full-text search indexing
Every SaltOS app is defined by 3 declarative files:
|
1. UI Definition
app: customers
list:
- [name, text, Name]
- [email, text, Email]
form:
- [name, text, Name]
- [email, text, Email]Defines list views, forms, and field types. |
2. Database Schema
<table name="app_customers">
<field name="id"
type="INTEGER"
pkey="true"/>
<field name="name"
type="VARCHAR(255)"/>
<field name="email"
type="VARCHAR(255)"/>
</table>Defines tables, fields, and relationships. |
3. App Manifest
<app id="50"
code="customers"
name="Customers"
table="app_customers"
has_version="1"
has_files="1"
has_notes="1"/>Registers the app with metadata and features. |
From these definitions, SaltOS automatically creates:
| Component | Generated From | Example |
|---|---|---|
| REST API | YAML + Schema | GET /api/app/customers/list |
| Web UI | YAML fields | Responsive list + modal forms |
| SQL Migrations | Schema changes | ALTER TABLE app_customers ADD COLUMN... |
| Search Index | Text fields | Full-text search on name, email, notes |
| Version Tracking | manifest has_version="1" |
Blockchain-verified history |
| File Uploads | manifest has_files="1" |
Attachment management |
| Permissions | manifest perms |
User/group access control |
π Learn more in the Developer Guide
- π 10x Faster Development: Define apps declaratively, not imperatively
- ποΈ Automatic Schema Migrations: Edit XML β Database updates automatically
- π Blockchain-Verified Versioning: Every change tracked with cryptographic integrity
- π± PWA-Ready: Works offline with service workers
- π§ͺ Fully Tested: PHPUnit + Jest with comprehensive coverage
- π Multi-Database: MySQL, PostgreSQL, SQLite, MSSQL
- π° Zero Licensing Costs: GPL-3.0 open source
- π Self-Hosted: Your data stays on your servers
- π Audit Compliance: Every action logged with user/timestamp
- π Multilingual: Built-in i18n (YAML-based translations)
- π PDF Generation: Custom templates for invoices/reports
- π Import/Export: CSV, Excel, SQL
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
π https://demos.saltos.org/
- Username:
admin - Password:
admin
Each visitor gets an isolated demo instance (SQLite-based).
# 1. Clone repository
git clone https://github.com/josepsanzcamp/SaltOS4.git
cd SaltOS4
# 2. Create instance (symlinks code/ to instance directory)
mkdir my-instance
cd my-instance
bash ../scripts/make_instance.sh
# 3. Configure database (SQLite or MySQL)
# Edit code/api/data/config.xml
# 4. Run setup (creates tables + sample data)
php api/index.php setup
user=admin php api/index.php setup/certs
user=admin php api/index.php setup/company
user=admin php api/index.php setup/emails
user=admin php api/index.php setup/crm
user=admin php api/index.php setup/hr
user=admin php api/index.php setup/purchases
user=admin php api/index.php setup/sales
# 5. Start web server
cd web
ln -s index.htm index.php
php -S localhost:8000
# 6. Open browser
open http://localhost:8000Docker Compose coming soon!
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Web Browser (PWA) β
β TypeScript Β· Bootstrap 5 Β· Service Worker β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β REST/JSON
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β PHP API Layer β
β Router Β· Auth Β· Permissions Β· Versioning β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β YAML/XML App Definitions β
β Declarative schemas β Auto-generated CRUD β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββββββββββββββββββββ
β MySQL Β· PostgreSQL Β· SQLite Β· MSSQL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Backend: PHP 7.0-8.3 (strict types, tested)
- Frontend: TypeScript, Bootstrap 5, TomSelect, CKEditor, Chart.js
- Storage: Multi-database abstraction layer (PDO)
- Testing: PHPUnit (backend) + Jest (frontend)
- i18n: YAML-based translations
- PDFs: TCPDF with XML templates
- Excel: PHPSpreadsheet (import/export)
SaltOS 4 ships with production-ready apps:
| App | Description |
|---|---|
| CRM | Customers, Leads, Quotes, Meetings |
| Sales | Products, Invoices, Orders, Taxes |
| Purchases | Suppliers, Purchase Orders |
| HR | Employees, Departments |
| Emails | POP3/SMTP integration, inbox management |
| Company | Company profile, settings |
| Users | User & group management, permissions |
Every change is stored with cryptographic chain-of-custody:
// Version 1 (created)
{
"ver_id": 1,
"user_id": 1,
"datetime": "2025-01-01 10:00:00",
"data": {"app_customers": {"123": {"name": "Acme Corp", ...}}},
"hash": "" // First version
}
// Version 2 (updated - only deltas)
{
"ver_id": 2,
"user_id": 2,
"datetime": "2025-01-05 14:30:00",
"data": {"app_customers": {"123": {"email": "new@acme.com"}}},
"hash": "abc123..." // Hash of version 1
}Tamper-proof: Any modification to historical data breaks the chain.
Comprehensive docs in 3 languages (English, Spanish, Catalan):
- π User Manual β End-user guide English Spanish Catalan
- π§ Developer Guide β Architecture & customization
- π API Reference β REST endpoints
- π» Web Client β Frontend architecture
- π¦ Apps Guide β Building custom apps
- π§ͺ Testing β PHPUnit & Jest guides
| Feature | SaltOS 4 | Odoo | ERPNext | Bubble.io |
|---|---|---|---|---|
| Open Source | β GPL-3.0 | β LGPL (CE) / Proprietary (EE) | β GPL-3.0 | β Proprietary |
| Self-Hosted | β Yes | β Yes | β Yes | β Cloud-only |
| No Vendor Lock-in | β Yes | β Yes | β No | |
| Declarative Apps (YAML) | β Yes | β Python/XML | β Python | β Visual |
| Blockchain Versioning | β Yes | β No | β No | β No |
| PWA Offline Support | β Yes | β No | β No | |
| Learning Curve | π’ Low | π΄ High | π‘ Medium | π’ Low |
| Customization | π’ Easy | π‘ Complex | π‘ Medium | π΄ Limited |
| Cost (self-hosted) | β¬0 | β¬0 (CE) / β¬β¬β¬ (EE) | β¬0 | N/A |
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Run code quality and tests
make test # Linting (phpcs + phpstan + jscs)
make utest # PHPUnit (backend tests)
make ujest # Jest (frontend tests)GPL-3.0 β Free as in freedom.
SaltOS: Framework to develop Rich Internet Applications
Copyright (C) 2007-2025 by Josep Sanz CampderrΓ³s
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
- π Website: saltos.org
- π¬ Discussions: GitHub Discussions
- π Issues: GitHub Issues
- π§ Email: info@saltos.org
SaltOS 4 is built on top of excellent open source projects:
Backend:
- TCPDF β PDF generation
- PHPSpreadsheet β Excel import/export
- PHP EDIFACT β EDI message parsing
- PHPMailer β Email sending
- Symfony YAML β YAML parser
- FPDI β PDF manipulation
Frontend:
- Bootstrap β UI framework
- CKEditor β Rich text editor
- Chart.js β Data visualization
- PDF.js β PDF viewer (Mozilla)
- CodeMirror β Code editor
- TomSelect β Enhanced select boxes
- Interact.js β Drag and drop
Testing:
Full list: View all 30+ dependencies in checklibs.txt
Built with β€οΈ by Josep Sanz CampderrΓ³s
β Star this repo if you find it useful!







