Release news ยท 20 September 2026

PHP Ledger 1.1.2: the 1.1.1 record corrected

1.1.2 sets the record straight about what 1.1.1 shipped, counts cash at the point of sale in notes and coins, and brings back signed update metadata so an installation can update itself from /maintenance.php again.

This is a patch release. It carries no migration of its own and no schema change. One rule at the point of sale changes: the cash a cashier records must be a whole number of minor units.

What was wrong in the 1.1.1 record?

1.1.1 was announced with no schema change and no migration. That was wrong. Its package carries migration 034_inventory_locations and the optional Stock locations module: warehouses and vans, transfers at carrying value and stock held per location. The module is off by default and changes nothing until a company enables it under Modules. Its documentation, compatibility matrix and upgrade proof are 1.2 work, so treat it as an early copy of the first 1.2 module.

A fresh 1.1.1 installation applied the migration during setup and needs nothing. An installation upgraded from 1.1.0 by replacing files has it pending: run php www/phpledger/install/migrate.php once, or install 1.1.2 from /maintenance.php, which applies it. The 1.1.1 article and the packaged release notes now say so.

Cash at the point of sale is counted in notes and coins

The showcase accepted a tender such as 1262.2555 against a sale total of 1,262.25 and recorded change of 0.0055 (issue #88). Cash received must now be a whole number of the currency's minor units, so tender, total and change share one precision on the receipt, and the sample catalogue is checked to price goods no more finely. The ledger keeps four decimal places; only the tender is held to two.

Signed update metadata is back

1.1.1 was published without signed metadata, so an installation on 1.1.0 could not reach it through /maintenance.php although its upgrade guide said it could. 1.1.2 carries phpledger-1.1.2.update.json: an installation on 1.1.0 or 1.1.1 with the publisher key pinned installs it from /maintenance.php, and from 1.1.0 that run also applies migration 034. 1.1.1 itself is not signed retroactively.

Documentation and metadata corrected

What is the assurance status?

Unchanged. 1.1.1 recorded 316 tests with no failures on MySQL 8.4 and MariaDB 10.11; the count for 1.1.2 is in its release receipt. 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. The first supervised pilot, on the maintainer's own books, starts on this release on 1 October 2026.

Patch releases ship without a media kit. The public demo still runs 1.1.0.

Upgrading

From 1.1.1 this replaces files only: no migration and no receipt change. From 1.1.0 it also applies migration 034. Either way, install it from /maintenance.php with the pinned publisher key, or replace the files with the manual procedure in the packaged UPGRADE.md and, from 1.1.0, run php www/phpledger/install/migrate.php once. 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.

Known issue, found 20 September 2026 (issue #90), fixed in 1.1.3. The in-app updater could not complete a real update. See the 1.1.3 article for the fix; an installation on 1.1.1 or 1.1.2 with the key pinned now installs 1.1.3 from /maintenance.php; a 1.1.0 installation uses the manual procedure, because its own database helpers predate a function the new migrations call (issue #91).

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.