-
Notifications
You must be signed in to change notification settings - Fork 35
Release 1.1.1
Published 20 September 2026. A patch release: no schema change, no migration, and no change to any accounting behaviour. Everything in it is browser setup, which an existing installation has already completed.
Correction (20 September 2026, in 1.1.2): this page said "no schema change, no migration". That was wrong. The 1.1.1 package carries migration 034_inventory_locations and the optional Stock locations module, which stays off until a company enables it. A fresh 1.1.1 installation applied the migration during setup; an installation upgraded from 1.1.0 by replacing files has it pending and must run php www/phpledger/install/migrate.php once, or install 1.1.2 from /maintenance.php, which applies it. 1.1.1 also shipped without signed update metadata, so it could not be installed from /maintenance.php; signed updates are restored in 1.1.2.
- Six stages you can see. Start, Database, Build, Checks, Account and Ready, each sized for a laptop screen. The Build stage shows a progress bar naming the step it is on, such as "Building the chart of accounts and journals, step 6 of 35", instead of a button that looks like it is waiting for you.
-
A failed requirement is something to clear, not an error page. A missing PHP extension takes over the screen with the places it is actually fixed: the
php.iniline on XAMPP or Laragon, the package name on Debian, the PHP Selector screen on shared hosting, and a Check again button. - Setup proves what it built. Fourteen checks on your server before you type anything, and six against the finished database afterwards, including the count of protective database rules that keep posted entries immutable. The last screen itemises what exists, read back from the database.
-
A database on your own computer needs no preparation (issue #84). On
localhost,127.0.0.1or::1, setup accepts the account XAMPP, Laragon and MAMP install, includingrootwith no password, and creates the database itself when it does not exist. A database on another server still needs a dedicated account with a password, and is never created. - Setup deduces your environment. It reports the folders it will use and the address it will record, and finds a database server answering on a loopback port to fill in the port.
- Plain HTTP warns instead of refusing. A site without a certificate can be installed and used, with a warning on every setup step and on every screen afterwards naming what stays unavailable. Connections (the API, MCP and app integrations) still require an HTTPS address. Sign-in details travel unencrypted until a certificate is in place, so turn on SSL before keeping real books.
-
A server that would refuse the schema says so first (issue #83). MySQL 8 writes a binary log by default and refuses
CREATE TRIGGERunless the account is trusted, which used to stop the schema part-way through migration001. Setup reads that setting at the connection check and nameslog_bin_trust_function_creators = 1before anything is written. A migration interrupted anyway records how far it got and resumes at its first unapplied statement. -
The schema applies in six requests instead of 35. The chain is about two seconds of work. A host with a short
max_execution_timestill hands control back between steps and resumes from its receipts. - One database account, not two. Browser setup no longer offers an optional second runtime account (issue #87). Restricting the account after installation is documented in INSTALL.md and turns off the automatic update path.
-
Fixes. An empty key folder that an operator created in advance, or pointed
PL_OAUTH_KEY_DIRECTORYat, was treated as an interrupted installation and blocked setup; only a folder holding some of the keys is refused now. The two demo landing labels corrected on 19 September ship here.
Upgrading from 1.1.0 replaces files and then needs php www/phpledger/install/migrate.php once, for migration 034 (corrected in 1.1.2; the original note said there was no migration). See UPGRADE.md.
This release ships without a media kit, by the owner's decision of 20 September 2026: minor and patch releases do not carry one. The assurance limits recorded for 1.1.0 and 1.0.0 still apply, and a real shared host and an unfamiliar operator have still not been observed.
| File | SHA-256 |
|---|---|
phpledger-1.1.1.zip (2,950,729 bytes) |
8c7f8b3236661ff5f3bdacac3cc2db45ca688eccbcc31dcbf07b877f3432aee8 |
Built twice from commit 63658bc and byte-identical both times; 1,502 files verified against PACKAGE-MANIFEST.json. See the release for its published assets.
composer check passes on MySQL 8.4 and MariaDB 10.11: 316 tests, 0 failures, covering lint, static analysis, sample validation and the accounting suites. Two end-to-end browser installation fixtures run the whole flow against disposable databases, including an installation through an account with no password into a database setup creates itself. A complete installation was also driven through a browser at 1280×720.
These are technical checks. Independent accounting review, independent security review, supervised pilots including a real month-end close, and installation observation by an unfamiliar operator remain outstanding, as recorded for 1.0.0.
PHP Ledger · Current status · First package · Roadmap · Contact and contribute
This Wiki describes PHP Ledger 1.1.3, the current release (1.0.0 was the first stable release), and the roadmap beyond it. Feature plans are not release or compliance claims.
PHP Ledger
Install PHP Ledger
The product
- Accounting and reports
- Stock locations
- Users and roles
- POS showcase
- Countries and currencies
- Tax research
Build and participate