alimarchal/laravel-chart-of-accounts
Professional-grade Chart of Accounts and double-entry accounting module for Laravel with one-command install. Supports Jetstream and Breeze, a versioned REST API, 10 financial reports, role-based permissions, and balance enforcement at the database and application layers.
JournalEntry::record(description, debitAccountCode, creditAccountCode, amount, post, reference) is a clean statement of the minimum viable posting API: resolve codes, find base currency, find the open period, write two balanced lines, optionally post, all in a transaction. Even if you don't adopt, use this as the interface your domain services (invoicing, expenses, payroll runs) call into.POST /journal-entries, /post, /reverse, /void, filtered list endpoints) is enough to decide whether postings should be synchronous API calls or queued listeners — and to estimate integration effort per source system.Consider it when:
super-admin to the first user; and requires adding HasRoles to your User model. This is a module, not a library — treat it like a merge, not a dependency.fx_rate_to_base) rather than true multi-currency revaluation.Look elsewhere when:
composer require.ACCOUNTING_UI_DRIVER switch is genuinely nice, but it works by publishing views and bundling jQuery 3.5.1 + Select2 4.1.0 into public/vendor/accounting/. That's a legacy front-end you now maintain, with global asset-name collision risk. If you want a custom UI, consume the REST API and skip the driver entirely.2026-10-24 release date against Packagist before putting either in a plan.To executives: One composer require plus one artisan command gives us a standard, double-entry-correct general ledger with period close, reversals and voids, a full change audit trail, role-based access control, and ten standard financial reports. MIT licensed, no per-seat or per-transaction cost. It removes the most error-prone part of finance software — the part where a bug means the books don't balance — from our backlog. The risk is concentration: one maintainer, minimal adoption. Mitigation is cheap: pin the version, fork it into our org, and wrap it behind our own service interface so replacing it later is a contained job. Recommendation: adopt for the internal finance admin v1, and keep AR/AP, billing, and payroll as our own scoped work — they are not in this package.
To engineering: Service-layer + Actions architecture, balance enforced at both the DB and application layer, versioned REST API with Eloquent resources, Spatie Permission and ActivityLog underneath, feature tests for posting/reversal/void. The cost is coupling: it publishes migrations, views, and assets into our app; it creates DB views, triggers, and stored procedures; it seeds a super-admin role onto user #1 and needs HasRoles on our User model. Budget a day for install review and migration reading, and build a thin adapter around JournalEntryService so our domain code never imports the package's models directly.
How can I help you explore Laravel packages today?