PHP Ledger: self-hosted double-entry accounting software
PHP Ledger records invoices, bills, stock movements and bank transactions as balanced journals, then shows the profit and loss, balance sheet and cash position behind them. It is open source under AGPL, installed from your browser on PHP 8.2+ and MySQL 8.4. Version 1.0.0 is the first stable release.
Screens show a fictional sample business, Willow Corner Shop.

Why small businesses choose PHP Ledger
Is the whole accounting core open source?
Yes. Invoices, bills, stock, bank reconciliation and reports ship together in the free core package. The AGPL-3.0-or-later licence lets an accountant or software house inspect how a figure was posted. A separate commercial licence is available for organisations that need different distribution terms.
Can I use my existing PHP hosting?
Yes, if it meets the published requirements: PHP 8.2+, MySQL 8.4, HTTPS, the required extensions and a private application directory. Run the browser installer's checks on the actual host. Signed updates make a matched backup before changing the installation and recover automatically if a migration fails.
Every figure is traceable
Reports drill down to journals and from journals to the source document, so a profit and loss line can be explained to the person who asks. Posted entries are never edited: a correction is a linked reversal with its reason recorded, and a draft never touches the books until someone reviews and posts it.
What is still outside this release?
Regional tax certification, a production shop POS, payroll, automatic exchange rates, revaluation and consolidation are not included. Independent accounting and security reviews remain open commitments. The roadmap distinguishes released workflows from planned features and outstanding review.
A tour of the main screens
How does PHP Ledger track unpaid invoices?
The invoice register shows each invoice's status, due date and remaining balance. Filter by Draft, Unpaid, Overdue, Paid or Reversed, then record a receipt from the list. Customer credits appear in the same register, so you can follow a partly paid invoice and the credit that settles it.
See sales in the product tourHow can I trace a profit and loss figure?
Choose the reporting period, then open an account name to see the entries behind its total. Income, cost of sales, gross profit and expenses appear in one report, with a CSV export for review. The balance sheet, trial balance and ageing reports provide their own dated views.
See the reportsHow do I reconcile a bank statement?
Upload or paste a CSV statement, preview its rows, then confirm matching suggestions one line at a time. Investigate unexplained movements before completing the reconciliation. Each completed statement stays with the account, preserving the history for the next reconciliation.
See banking in the product tourHow does PHP Ledger value stock?
Optional Inventory uses moving weighted-average cost, showing quantity on hand and carrying value together. Stock counts preview their accounting effect before posting. Supported goods receipts, issues and returns flow through the same books, and cost of sales appears on the profit and loss.
See inventory in the product tourWhat does the cash point of sale include?
The optional cash counter lets you build a cart, review cash and change, and print a receipt. Each confirmed sale records one balanced journal through the central posting service. Shared stock deductions, tax integration and card payments at the counter are planned for a later release.
See the point of saleWhat does a worked profit and loss example look like?
The Willow Corner Shop capture above shows USD 4,788.00 income − USD 160.00 cost of sales = USD 4,628.00 gross profit. Gross profit is before the period's other expenses; it is not the cash balance. Open the account statement to trace a reported amount to its posted entries.
Source: PHP Ledger version 1.0.0 sample report capture. These fictional figures illustrate the report; they are not customer results or a claim of business performance. The report walkthrough explains how to explore the same workflow with a sample company.
Try it with a fictional business
Eleven sample business histories and a blank playground are available, from a corner shop to a small workshop. Each visitor gets a private company that resets every hour, so you can post, correct and reconcile without worrying about anyone else's entries. Capacity is limited, and real records should stay out of it: the demo is for seeing how the books behave, not for keeping them.

Public demo vs. self-hosted PHP Ledger: which should I use?
The demo is quicker to start, but it discards temporary records at each reset. In contrast, a self-hosted installation preserves your records and gives you control over users and recovery. It also makes you responsible for hosting, updates and tested backups.
| Decision | Public demo | Your own installation |
|---|---|---|
| Purpose | Try the accounting workflows with sample data. | Evaluate and operate the supported workflows on infrastructure you control. |
| Records | Fictional data only; a separate temporary company for each visitor. | Your operator manages the database, users and retention. Complete reviewed acceptance before using real books. |
| Reset and backups | Resets at the next scheduled UTC hour. Exporting a report does not preserve the demo company. | No hourly demo reset; you maintain tested backups and a recovery process. |
| Cost and licence | Free to try, with limited capacity. | Core software is free under AGPL-3.0-or-later. Hosting, optional help and commercial licensing have separate costs or terms. |
| Setup | Open the demo in a browser. | Check PHP, MySQL and HTTPS requirements, verify the package and run the browser installer. |
Sources: demo reset and data boundaries, installation requirements and licensing and assistance.
How do I get started with PHP Ledger?
Follow these three steps before relying on the software for your own books.
1. Try a sample workflow
Open a private sample company and follow a sale, a bill and a bank statement through the books. The demo resets every hour.
Try the live demo2. Check your host and install
Verify the release checksum and hosting requirements, upload the package, then open
Read the installation steps/installin your browser. Start with sample records.3. Review before real use
Check your accounting workflows, access controls and backup recovery with the people responsible for them. Arrange help or a commercial licence if needed.
Discuss help and licensing
Built in the open
Ask questions, review the code, report issues or contribute to the accounting work in public. Discussions, issues and releases all live on GitHub, and the project's social channels carry the same announcements, so there is one place to follow and several ways to reach it.
See the community pageWhat has PHP Ledger tested, and what remains unreviewed?
I am Rana Mansoor Akbar Khan, PHP Ledger's project maintainer in Multan. According to the PHP Ledger 1.0.0 validation record, the completed checks cover automated suites, update and recovery fault tests, and exact-package installation and upgrades. The release notes and downloadable package identify the version those checks cover.
Technical validation is not independent accounting or security acceptance. Independent reviews, supervised pilots with a real month-end close and a release-candidate period have not been performed yet. They remain open post-release commitments on the roadmap. Complete your own reviewed acceptance with sample data before relying on the software for a live business.
Questions before you start
Short answers to the questions owners and accountants ask first. Each one links to the page with the detail.
Is PHP Ledger really free?
Yes. The project-owned core is free under AGPL-3.0-or-later, including invoices, bills, stock, bank reconciliation and reports. Hosting, setup help, optional support and a separate commercial licence have their own terms. The 0.1.0 through 0.1.5 previews retain their earlier MIT grants.
What do I need to run it?
PHP Ledger requires PHP 8.2 or newer, MySQL 8.4, HTTPS and the documented PHP extensions. Installation runs in the browser at /install, without Composer, Node or Docker. PHP 8.3 is recommended; signed automatic updates require the PHP zip extension.
Does it work on shared cPanel hosting?
It can, if the actual hosting account meets the requirements. A control panel alone does not prove compatibility. Check PHP extensions, MySQL 8.4, private files and the correct public document root, then run the browser installer checks before committing to a host.
Does PHP Ledger send my data anywhere?
Self-hosted records stay on your operator's infrastructure. This website has no analytics or form submission endpoint. The demo's optional country lookup may send your public IP address to country.is. Following external links or downloading releases contacts those providers. The privacy notice explains the separate website, demo and installation boundaries.
Can it invoice customers and settle supplier bills?
Yes. PHP Ledger 1.0 includes customer invoices, supplier bills, partial and final payments allocated across open items, linked credits, ageing and control-account reconciliation. Accounts receivable and payable are in the core; owners can hide their navigation without disabling the services.
Is it ready for real books?
Version 1.0.0 is the first stable release, with published technical validation for automated tests, update recovery and package installation. Independent accounting review, independent security review and supervised pilots remain open commitments. Complete your own reviewed acceptance with fictional records before using real books.
What if the project stops?
You keep the source and your self-hosted database under the applicable licence. Continued maintenance, recovery and data extraction still need an operator. Keep tested backups and portable report exports; possession of the release ZIP alone does not establish a recovery process.
