Release news ยท 20 September 2026

PHP Ledger 1.1.1: setup you can watch

Browser setup now runs in six stages you can follow, tells you what it proved on your own server, and treats a missing requirement as something to fix rather than an error page.

This is a patch release with no change to any accounting behaviour. Correction, 20 September 2026 (in 1.1.2): at publication this article said there was no schema change and no migration. That was wrong: the package carries migration 034_inventory_locations and the optional Stock locations module, which is off by default and changes nothing 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.

What changed in setup?

A database on your own computer needs no preparation

On localhost, 127.0.0.1 or ::1, setup accepts the account XAMPP, Laragon and MAMP install, including root with no password, and creates the database itself when it does not exist. Setup also 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.

A database on another server still needs a dedicated account with a password, and is never created. Those credentials cross the network, and holding them is no proof of controlling the website.

Plain HTTP warns instead of refusing

A site without a certificate can now be installed and used. Setup warns on every step, and the installed copy repeats the warning on every screen, naming what stays unavailable: Connections, which cover the API, MCP and app integrations, still require an HTTPS address. Sign-in details and accounting data travel unencrypted until a certificate is in place, so turn on SSL in your hosting panel before keeping real books.

A server that would refuse the schema says so first

MySQL 8 writes a binary log by default and refuses CREATE TRIGGER unless the account is trusted to create one, which used to stop the schema part-way through the first migration. Setup now reads that setting at the connection check and names log_bin_trust_function_creators = 1 before anything is written. A migration interrupted anyway records how far it got and resumes at its first unapplied statement.

What is the assurance status?

Automated suites pass on MySQL 8.4 and MariaDB 10.11: 316 tests with no failures, alongside two end-to-end browser installation fixtures. The package was built twice from the same commit and was byte-identical both times. These are technical checks, not accounting or usability sign-off. 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.

Minor and patch releases ship without a media kit, by the owner's decision of 20 September 2026.

Upgrading

From 1.1.0 this replaces files and then needs one run of php www/phpledger/install/migrate.php, for migration 034 (corrected 20 September 2026; the original text said there was no migration). Follow the packaged UPGRADE.md, keep a backup and rehearse a matched code and database restore first. The download page carries the archive and its checksum, and the versioned GitHub release holds its verification record.

Product screen

Screens show a fictional sample business

Scroll the image to explore it. With a keyboard, focus the image area and use the arrow keys.