Skip to content

PHP Ledger 1.1.1: setup you can watch, and a local database

Choose a tag to compare

@rmak78 rmak78 released this 20 Sep 16:43
· 322 commits to master since this release

Correction, 20 September 2026. This release does contain one schema migration. The package includes 034_inventory_locations, which creates the stock-locations tables and adds the optional Stock locations module; the module is off by default and does not change accounting behaviour until enabled. A fresh 1.1.1 installation applies it during setup. An installation upgraded from 1.1.0 by replacing files must run php www/phpledger/install/migrate.php once, or the maintenance page reports a pending migration; installing 1.1.2 from /maintenance.php also applies it. This release also shipped without signed update metadata, so the /maintenance.php path named below did not work from 1.1.0; 1.1.2 restores it. The statement that 1.1.1 carries no migration was wrong; we apologise for the confusion.

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.

Setup you can watch

  • 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 — "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.ini line 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.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. A database on another server still needs a dedicated account with a password, and is never created.

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.

Plain HTTP warns instead of refusing

A site without a certificate can now 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 TRIGGER unless the account is trusted, which used to stop the schema part-way through migration 001. 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.

Also in this release

  • The schema applies in six requests instead of 35. The chain is about two seconds of work; pl_migrate() takes a time budget as well as a batch size, and a host with a short max_execution_time still hands control back between steps.
  • Browser setup no longer offers an optional second runtime database account (decision B24, issue #87). Restricting the account after installation is documented in INSTALL.md and turns off the automatic update path.
  • Fix: an empty key folder created in advance, or pointed at by PL_OAUTH_KEY_DIRECTORY, 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 this replaces files only; there is no migration. See UPGRADE.md.

Verify the download

sha256  8c7f8b3236661ff5f3bdacac3cc2db45ca688eccbcc31dcbf07b877f3432aee8

Built twice from 63658bc and byte-identical both times; 1,502 files verified against PACKAGE-MANIFEST.json.

Assurance

composer check passes on MySQL 8.4 and MariaDB 10.11: 316 tests, 0 failures, plus two end-to-end browser installation fixtures. A real shared host and an unfamiliar operator have still not been observed.

This release ships without a media kit, at the owner's decision of 20 September 2026: minor and patch releases do not carry one.