🇪🇪 Made in Estonia | Open-source accounting software for modern businesses
⚠️ Development Status This project is under active development and not yet production-ready. APIs may change, and features may be incomplete. Contributions and feedback welcome!
Try Open Accounting without installing anything:
open-accounting.up.railway.app
| Credential | Value |
|---|---|
demo1@example.com |
|
| Password | demo12345 |
Demo data can be reset via API. Feel free to create invoices, contacts, and explore all features!
Open Accounting is a self-hosted, multi-tenant accounting platform designed for small to medium businesses, accountants managing multiple clients, and SaaS builders who need embedded accounting. Built with modern technologies and focused on Estonian/EU compliance, it provides:
- True Double-Entry Bookkeeping — Immutable journal entries with full audit trail
- Multi-Company Support — One installation serves multiple businesses with complete data isolation
- Role-Based Access — Owner, Admin, Accountant, and Viewer roles with granular permissions
- Estonian Tax Compliance — KMD (VAT) declarations with e-MTA XML export
- Modern Stack — Go backend, SvelteKit frontend, PostgreSQL database
| Feature | Description |
|---|---|
| Chart of Accounts | Hierarchical 5-type account structure (Asset, Liability, Equity, Revenue, Expense) |
| Journal Entries | Draft → Posted → Void workflow with reversal entries |
| Multi-Currency | Support for multiple currencies with exchange rate tracking |
| Trial Balance | Real-time balance reports as of any date |
| Balance Sheet | Assets, liabilities, and equity statement |
| Income Statement | Revenue and expense summary (P&L) |
| Report Exports | Export to Excel, CSV, or PDF formats |
| VAT Tracking | Date-aware VAT rates for proper EU compliance |
| Feature | Description |
|---|---|
| Invoicing | Sales and purchase invoices with line items and VAT |
| Quotes | Sales quotes with draft/sent/accepted workflow, conversion to orders |
| Orders | Order management with quote linking and status tracking |
| Contacts | Customer and supplier management |
| Payments | Payment recording with invoice allocation |
| PDF Generation | Professional invoice PDFs with customizable branding |
| Recurring Invoices | Automated invoice generation on schedule |
| Feature | Description |
|---|---|
| Asset Tracking | Register and track fixed assets with serial numbers and locations |
| Asset Categories | IT Equipment, Office Furniture, Vehicles, Software with depreciation settings |
| Depreciation | Straight-line and declining balance methods with configurable useful life |
| Asset Lifecycle | Draft → Active → Disposed/Sold/Scrapped status workflow |
| Depreciation Entries | Automatic depreciation calculations with audit trail |
| Feature | Description |
|---|---|
| Bank Accounts | Track multiple bank accounts per company |
| Transaction Import | CSV import for bank statements |
| Auto-Matching | Intelligent matching of transactions to payments |
| Reconciliation | Full bank reconciliation workflow |
| Feature | Description |
|---|---|
| Tenant Isolation | Schema-per-tenant for complete data separation |
| User Management | Invite users, assign roles, manage permissions |
| JWT Authentication | Secure token-based authentication |
| RBAC | Role-based access control with permission checks |
| API Rate Limiting | Token bucket rate limiting with configurable thresholds |
| Feature | Description |
|---|---|
| Employee Management | Full employee lifecycle with personal codes |
| Estonian Tax Calculations | Income tax, social tax, unemployment insurance |
| Funded Pension (II Pillar) | Configurable pension contribution rates |
| Payroll Runs | Monthly payroll with draft → approved → paid workflow |
| Payslips | Detailed breakdown of earnings and deductions |
| TSD Declaration | Annex 1 generation with XML/CSV export for e-MTA |
| Feature | Description |
|---|---|
| KMD Declaration | Automated VAT declaration generation |
| TSD Declaration | Payroll tax declaration with e-MTA XML export |
| e-MTA Export | XML format compatible with Estonian Tax Board |
| Estonian Defaults | Pre-configured for Estonian accounting standards |
| Feature | Description |
|---|---|
| Plugin Registries | Add custom plugin marketplaces (GitHub/GitLab) |
| Permission System | Fine-grained permissions with risk levels |
| Event Hooks | 27+ events for plugin integration |
| UI Slots | Extend dashboard, invoices, and more |
| Two-Level Control | Instance-wide install, per-tenant enable |
📖 See Plugin Documentation for development guide
| Layer | Technology |
|---|---|
| Backend | Go 1.24+, Chi router, pgx/v5 |
| Frontend | SvelteKit 2, Svelte 5, Vite 7, TypeScript |
| i18n | Paraglide-JS (compile-time translations) |
| Database | PostgreSQL 16+ |
| Auth | JWT with access/refresh tokens |
| API Docs | Swagger/OpenAPI |
| Testing | Go test (90%+ coverage), Vitest (frontend) |
| CI/CD | GitHub Actions, Codecov |
| Container | Docker, Docker Compose |
# Clone and start
git clone https://github.com/HMB-research/open-accounting.git
cd open-accounting
docker-compose up -d
# Run migrations
docker-compose run --rm migrate
# Access the app
# API: http://localhost:8080
# Frontend: http://localhost:5173
# Swagger: http://localhost:8080/swagger/# Prerequisites: Go 1.24+, Node.js 22+, PostgreSQL 16+
# Start database
docker-compose up -d db
# Set environment
export DATABASE_URL="postgres://openaccounting:openaccounting@localhost:5432/openaccounting?sslmode=disable"
# Run migrations
go run ./cmd/migrate -db "$DATABASE_URL" -path migrations -direction up
# Start API (terminal 1)
go run ./cmd/api
# Start frontend (terminal 2)
cd frontend && npm install && npm run devopen-accounting/
├── cmd/
│ ├── api/ # HTTP API server (main application)
│ └── migrate/ # Database migration CLI tool
│
├── internal/
│ ├── accounting/ # Core: accounts, journal entries, reports
│ ├── analytics/ # Dashboard metrics and reporting
│ ├── auth/ # JWT authentication, RBAC, rate limiting
│ ├── banking/ # Bank accounts, transactions, reconciliation
│ ├── contacts/ # Customer and supplier management
│ ├── email/ # Email notifications and templates
│ ├── invoicing/ # Sales and purchase invoices
│ ├── payments/ # Payment recording and allocation
│ ├── payroll/ # Estonian payroll with TSD declarations
│ ├── pdf/ # PDF generation for invoices
│ ├── plugin/ # Plugin marketplace system
│ ├── recurring/ # Recurring invoice automation
│ ├── tax/ # Estonian KMD/VAT compliance
│ └── tenant/ # Multi-tenant management, users, invitations
│
├── migrations/ # SQL database migrations
├── frontend/ # SvelteKit web application
├── docs/ # Documentation (API, Architecture, Deployment)
└── deploy/ # Deployment configurations
| Document | Description |
|---|---|
| API Reference | Complete REST API documentation with examples |
| Architecture | System design, multi-tenancy, authentication flow |
| Deployment | Production deployment guide |
| EMTA Integration | Estonian Tax Board integration guide |
| Plugins | Plugin development and marketplace guide |
| E2E Testing | End-to-end testing architecture |
| Swagger UI | Interactive API explorer (when server is running) |
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | Required |
PORT |
API server port | 8080 |
JWT_SECRET |
JWT signing key | Required in production |
ALLOWED_ORIGINS |
CORS allowed origins | localhost:5173,localhost:3000 |
- Double-entry bookkeeping with journal entries
- Multi-tenant architecture with schema isolation
- User authentication and RBAC
- Invoicing with PDF generation
- Payment recording and allocation
- Bank transaction import and reconciliation
- Estonian KMD/VAT compliance
- User invitation system
- Dashboard analytics with charts
- Email notifications
- Recurring invoice automation
- Balance sheet and income statement reports
- Payroll module with Estonian TSD declarations
- API rate limiting
- Plugin marketplace system
- Internationalization (English/Estonian) with Paraglide-JS
- Mobile-responsive frontend with touch-friendly UI
- Report exports (Excel, CSV, PDF)
- Quotes with quote-to-order conversion
- Order management
- Fixed assets with depreciation tracking
- E-invoice support (Peppol) — requires external Access Point
- Inventory management (stock tracking, warehouses)
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Development workflow
git checkout -b feature/your-feature
make test # Run tests
make lint # Check code style
git commit -m "feat: your feature"
git push origin feature/your-feature
# Open a Pull RequestA huge thank you to our supporters who help make this project possible!
Become the first sponsor! Support us on GitHub Sponsors or Ko-fi
MIT License — see LICENSE for details.
If you find this project useful, consider supporting its development: