Releases: YeOK/Latch
Release list
Latch v0.5.2.0
Latch v0.5.2.0 — hot-path SQL
Fewer SQLite round-trips on everyday pages. Same features and polish.
Changes
- Settings — one load of the
settingstable per request (was oneSELECTperget()) - Auth — memoize
user()for the request; session touch once for members; staff fingerprint/idle still re-checked - Topic view (mods) — batch revision counts (
GROUP BY post_id) - Home (logged-in) — single unread-flags query for all recent topics across boards
- Large topics — cursor/tail pagination uses
LIMIT n+1instead of separate existence queries
Details: PERFORMANCE.md
Upgrade
Fedora/RHEL (after COPR rebuild):
sudo dnf upgrade latch
sudo latch doctorTarball:
# replace tree, then:
bash scripts/update.shFull notes: CHANGELOG.md
Latch v0.5.1.0
Latch v0.5.1.0 — solid backups
Plugin storage is now part of backups, with core and plugins as separate members so you can recover from a bad plugin without replaying plugin state.
Highlights
Split backups
- Outer archive:
latch-backup-YYYYMMDD-HHMMSS-<id>.tar.gzcore.tar.gz—latch.sqlite+config/local.phpplugins.tar.gz—storage/plugins/(WAL-safeplugin.sqlite+ settings)
- Unique filenames (no same-second overwrite)
- Flags:
backup --core-only/--plugins-only - Restore:
--core-only(leave plugins alone) /--plugins-only/ default both - Legacy flat archives still restore as core
Docs
- Full Fedora/RPM backup & restore runbook: INSTALL-FEDORA.md
- CLI, SECURITY, UPGRADE cross-links
Upgrade
Fedora/RHEL (after COPR rebuild):
sudo dnf upgrade latch
sudo latch backup # optional extra; %posttrans already backs up
sudo latch restore list # expect format=split after first new backupTarball:
# replace tree, then:
bash scripts/update.sh
# or: php bin/latch backup && php bin/latch update …Bad plugin escape hatch
sudo latch lock on
sudo latch restore --latest --core-only
sudo latch plugin disable bad-slug
sudo latch lock offFull notes: CHANGELOG.md
Latch v0.5.0.0
Latch v0.5.0.0 — operator security & setup milestone
Secure-by-default operator experience: hardened staff sessions, guided local.php configuration, and first-class support for tier-2 catalog plugins.
Highlights
Security
- Staff session hardening (admin/mod only): IP+UA fingerprint binding, idle timeout (default 30m), step-up TOTP/password for sensitive admin POSTs (
/admin/step-up), email alert on new staff device when mail works - Builds on Security mode (Standard/High) from 0.4.7
Operators
php bin/latch configure— interactive walkthrough for site URL, encryption key, Turnstile, staff session, OIDC, mail, plugin secrets--showfor masked status (safe to paste)--section=turnstile,mailfor partial runs- Optional prompt after interactive
install(--no-configureto skip) - RPM:
latch-setupprintssudo latch configure(does not auto-run)
- Cloudflare Free / Tunnel / Turnstile: CLOUDFLARE.md
Plugins (catalog)
Use Admin → Plugins → Catalog or Latch-plugins v1.0.13:
- avatar-url 1.0.0 (min Latch 0.4.8)
- board-icon-pack 1.0.0
Install / upgrade
# Tarball
tar -xzf latch-0.5.0.0.tar.gz && cd latch-0.5.0.0-stage
bash scripts/install.sh --url=https://forum.example.com
php bin/latch configure # recommended after install
# Fedora/RHEL (after COPR rebuild)
sudo dnf upgrade latch
sudo latch configure --show
sudo latch doctorDeferred (not in 0.5.0)
Docker demo, Packagist, WebAuthn, fediverse-share, phpBB real-dump guide.
Full notes: CHANGELOG.md
Latch v0.4.8.0
Latch 0.4.8.0
Added
- Profile avatar URL hooks — plugins can save custom HTTPS avatars (
users.avatar_url). Pair with catalog avatar-url 1.0.0. - Board icon keywords — plugin packs can register name/slug auto-suggest. Pair with board-icon-pack 1.0.0.
- Cloudflare guide —
docs/CLOUDFLARE.md(Free plan, Tunnel, Turnstile).
Docs
- PLUGINS.md hook updates; CLI catalog install wording; README status.
Latch-plugins
- Catalog v1.0.13 (avatar-url) and v1.0.12 (board-icon-pack).
Upgrade
- Tarball /
scripts/update.sh, or COPRdnf upgrade latchafter rebuild.
Latch v0.4.7.0
Latch 0.4.7.0
Added
- Security mode — Admin → Settings: Standard or High. High enables login Turnstile, registration Turnstile (when keys are configured), and mandatory 2FA for moderators.
- Per-theme branding — theme-color meta from
theme.json; Modern teal favicons via asset fallback.
Changed
- App-icon favicon and header mark (solid accent + white L).
- Default tagline: Run the room — not a datacenter.
Latch-plugins
- Pair with git-release 1.2.1 (catalog v1.0.11) for theme-aware release card icon.
Install / upgrade
- Tarball: extract and run
scripts/install.shorscripts/update.sh - Fedora:
dnf upgrade latchafter COPR rebuild for this tag
Latch v0.4.6.2
Fixed
- CSP
font-src— Content-Security-Policy no longer emits escaped\'self\'forfont-src(Lighthouse console error).
Tests
- SecurityHeadersTest — regression for valid
font-src 'self'token. - GitReleasePluginTest — Keep a Changelog excerpt extraction for git-release widget.
Latch 0.4.6.0
Changelog
All notable changes to Latch are documented here.
Format follows Keep a Changelog.
Versioning follows Semantic Versioning.
[Unreleased]
Work in progress on main — not tagged or released yet. Fold into the next version section before scripts/build-release.sh.
[0.4.6.0] — 2026-07-13
Added
- Forum UI cards — home board panels, board detail view, and topic header use unified card styling with stats where applicable.
- Privacy analytics tests —
PrivacyAnalyticsPluginTestfor audit, snippet rendering, and host validation. - Plugin asset docs —
docs/PLUGINS.mddocuments serving assets via routes,theme.assets/theme.scripts, HTML templates, and client-mode behaviour.
Fixed
- Client-mode plugin assets —
theme.assetsandtheme.scriptsstill run forguest_page: clientplugins; only content hooks (home.before_boards,home.after_boards,layout.head,layout.footer) use browser placeholders (PluginCacheCoordinator). - Admin SPA actions — board create/update, user search validation, and staff trash actions stay in the AJAX admin shell (
finishStaffAction/account-panel.js). - Moderation trash purge —
purgeArchivePosthandles orphaned archive rows; maintenance dashboard usescountArchiveQueue(). - Topic layout — post list separated from header card so replies no longer appear nested inside the topic header.
Changed
- Latch-plugins catalog — git-release 1.1.7 added (public GitHub release card); requires this core version for client-mode
theme.assets.
Tests
- PluginCacheCoordinator — regression test that client-mode plugins still collect
theme.assets. - GitReleasePluginTest — cache, stale fallback, and purge coverage (Latch-plugins catalog).
[0.4.5.3] — 2026-07-12
Added
- Plugin update —
php bin/latch plugin update <slug>and Admin → Plugins → Installed update action; replacesplugins/{slug}/from the catalog or a local zip while keepingstorage/plugins/{slug}/and enabled state. home.before_boardshook — home templates renderplugin_home_before_boards_htmlabove the board list (use with updated git-release for showcase layout).
Fixed
- Admin settings — saving site theme and other settings stays in the AJAX account panel / in-place admin shell instead of redirecting to the full admin layout.
Tests
- Link preview — regression test for
embed.jsplay-button binding (pair with link-preview 1.0.3 from Latch-plugins).
[0.4.5.2] — 2026-07-12
Fixed
- Admin log viewer — filter grid spacing; Apply/Clear on their own row below the filter panel.
- Admin audit log — code-view layout (summary row, Record/Details sub-rows) matching the log viewer.
- Modern theme —
asset_versionincludes active pack id so Cloudflare/CDN does not serve stale CSS when switching from Default.
Changed
- Maintenance / site lock — unlock CLI hint uses
sudo latch lock offon RPM installs (/usr/bin/latch). - Documentation —
INSTALL-FEDORA.mddisaster-recovery and fail2ban sections usesudo latch; jail documentssecurity.logpath.
[0.4.5.1] — 2026-07-12
Fixed
- Admin log viewer — code-style monospace panel;
Detailsand rawLineon full-width sub-rows below Time/Event/IP/User (no truncated inline JSON). - fail2ban
latch-login— jail watchessecurity.logforlogin_fail(real client IPs behind Cloudflare/local proxy); fixed Apache combinedfailregex; shiplatch-remoteip.conffor optional access-log client IPs.
Changed
- Documentation — fail2ban troubleshooting and server log viewer setup in
INSTALL-FEDORA.mdandSECURITY.md.
[0.4.5.0] — 2026-07-12
Added
- Admin log viewer —
/admin/logssource index and tail viewer forsecurity.logandrestore.log; optional Apache/PHP-FPM sources vialogs.server_logs_enabledinlocal.php. - Log engine — bounded reverse tail, byte cursors, rotation detection, security JSON filters (
event,ip,username, time range), textqsearch, and secret redaction on all output. - Live tail —
?live=1polls/admin/logs/feedevery 30s with rate limit and debouncedlogs.feedaudit. - CLI —
php bin/latch logs list|tailwith full filter parity and--follow. - Doctor — warns when configured server log paths are unreadable (with
setfaclhints). - Dashboard — login failure count from the last 500
security.loglines (links to filtered viewer).
Security
- Outbound URL guard — central SSRF checks cover IPv6 literals,
.localhosts, redirect targets, and plugin catalog GETs; link-preview delegates to coreOutboundUrlGuardand re-validates each redirect hop.
Fixed
- Showcase + account overlay — restore
containeron<main>so profile/admin AJAX panels load; account-panel.js also matchesmain.sc-main.
Documentation
- Server logs —
SECURITY.md,INSTALL.md,INSTALL-FEDORA.md,CLI.md, andpackaging/README.mdupdated for admin viewer setup and COPR log paths.
[0.4.4.4] — 2026-07-12
Added
- Branding v2 — favicon, Open Graph image, and optional dark-mode logo uploads (
/branding/favicon,/branding/og,/branding/logo-dark). - Admin site theme — choose the active visual theme pack from installed directories under
themes/(default,modern,showcase, …); stored asactive_themewithconfigfallback. - Showcase theme pack — reference implementation with custom layout shell, home/board/topic templates, partials, CSS, and
showcase.js(beyond token-only packs likemodern). - Profile color theme — instant-apply selector on the profile Appearance section (light / dark / system).
Fixed
- Custom logo in dark mode — single uploaded logo stays visible when no dark variant is configured.
[0.4.4.3] — 2026-07-12
Added
- Operator site branding — Admin → Settings → Branding: upload SVG/PNG logo (max 512 KB), choose Latch built-in mark / custom image / text-only; served at
/branding/logo; sharedpartials/brand.html.twigfor default and modern themes.
Changed
- Admin settings — Branding section in a highlighted panel; Settings opens full page for reliable logo upload.
[0.4.4.2] — 2026-07-12
Added
- Plugin client loader —
plugin-clients.jshydratesguest_page: clientplaceholders; loaded when any enabled plugin uses client cache mode.
Changed
- New topic form — removed markup hint text below the compose title.
Documentation
- Release — catalog publish checklist references Latch-plugins
check-release.shgate.
[0.4.4.1] — 2026-07-12
Fixed
- Composer live preview — skips plugin link cards (link-preview) and inline images (image-upload); markdown images show a compact
[image]placeholder; smileys, spoilers, code, and other markup still render.
Changed
- Composer toolbar — grouped segmented buttons with icons, hover/focus states, and utility controls aligned to the right.
- Documentation — README, INSTALL, MARKUP, PLUGINS, and THEMING updated for v0.4.x (catalog admin UI, live preview, COPR).
[0.4.4.0] — 2026-07-12
Added
- Plugin hook expansion (28 hooks total) — 11 new hooks for tier-1/2 plugins:
post.format.link,post.format.after— link preview / onebox at render timecsp.frame_src,csp.script_src— video embeds and analytics scriptslayout.head—<head>snippets (privacy analytics)topic.actions— topic header share buttons (fediverse-share)profile.form,profile.before_save— avatar-url and profile extensionspost.delete,topic.delete,post.vote— lifecycle hooks for plugin cleanup and reactions
- Standalone bare
https://URLs — auto-linked when alone on a line;post.format.linkreceives$standalone = true ProfileSaveContext— mutable context forprofile.before_save(mirrorsPostSaveContext)- Docs:
PLUGINS.mdhook reference updated;MARKUP.mdstandalone URL note
[0.4.3.1] — 2026-07-12
Added
- Admin plugins UI — Installed / Catalog tabs with icon actions (install, enable, disable, settings, remove); SPA-friendly
?tab=navigation. fix-permsoverhaul — repairs all runtime paths (storage/,plugins/code, SQLite sidecars,local.php);--web-user/WEB_USERoverride (defaultapache).docs/RELEASE.md— full release checklist (VERSION, RPM, tarball, git tag, COPR);scripts/check-versions.shgate inbuild-release.sh.
Fixed
- GitHub release zip download — follow HTTP 302 redirect chain (GitHub →
release-assets.githubusercontent.com). - Catalog install permissions —
plugins/parent writable by web server; RPM%postsetsapache:apacheonplugins/. sudo latch fix-perms/plugin remove— wrapper stays root for chown and code deletion under/usr/share/latch/.- Admin plugins 500 — tab query uses
Request::input()(not missingquery()method).
Changed
- Remove control — trash icon beside plugin title; catalog install stays in-panel AJAX (no full-page bypass).
[0.4.3.0] — 2026-07-12
Added
- Admin catalog plugin install — Admin → Plugins lists the Latch-plugins catalog and installs release zips with the same audit gate as
plugin install(plugin stays disabled until you enable it). php bin/latch totp reset <username> --confirm— operator recovery when 2FA codes fail after anencryption_keymismatch (documented inCLI.md,SECURITY.md,INSTALL.md).PluginCatalog/PluginReleaseDownloader— fetchescatalog.json, caches it, downloads GitHub release assets (API fallback when the direct zip URL 404s).
Fixed
- Admin SPA plugin actions — error flashes from catalog install are no longer wiped by an...
Latch v0.4.5.3
Weekend patch — plugin updates, home layout hook, admin AJAX fix.
Added
- Plugin update —
sudo latch plugin update <slug>and Admin → Plugins → Installed ↑ button; keeps settings/DB and enabled state home.before_boards— git-release (and other plugins) can render above the board list on showcase/default home
Fixed
- Admin settings — theme and settings save stay in the AJAX panel instead of jumping to full-page admin
Pre-release gates
- PHPUnit 538 tests
php bin/latch test --smoke/--securityphp bin/latch audit
After upgrade
sudo dnf upgrade latch # COPR
# or scripts/update.sh on tarball installs
sudo latch plugin update link-preview # embed play fix (Latch-plugins 1.0.3)
sudo latch plugin update git-release # home.before_boards placementTarball SHA256: f7ace263e5b4f6517ac02bd4f3c2e169c857935e5f2cf563eebb16cfe2cc3f55
Latch v0.4.5.2
Latch v0.4.5.2
Weekend patch — UI polish, theme CDN fix, operator docs.
Fixed
- Admin log viewer — filter grid spacing; Apply/Clear on their own row below the filter panel.
- Admin audit log — code-view layout matching the log viewer (summary row, Record/Details sub-rows).
- Modern theme —
asset_versionincludes active pack id so CDN does not serve stale CSS when switching from Default.
Changed
- Maintenance / site lock — unlock CLI hint uses
sudo latch lock offon RPM installs. - INSTALL-FEDORA.md — disaster-recovery uses
sudo latch; fail2ban jail documentssecurity.logpath.
Upgrade: sudo dnf upgrade latch (COPR) or bash scripts/update.sh from a fresh tarball.
Latch v0.4.5.1
Latch v0.4.5.1
Fixed
- Admin log viewer — code-style monospace panel;
Detailsand rawLineon full-width sub-rows below Time/Event/IP/User (no truncated inline JSON). - fail2ban
latch-login— jail watchessecurity.logforlogin_fail(real client IPs behind Cloudflare/local proxy); fixed Apache combinedfailregex; shiplatch-remoteip.conffor optional access-log client IPs.
Changed
- Documentation — fail2ban troubleshooting and server log viewer setup in
INSTALL-FEDORA.mdandSECURITY.md.
Upgrade: sudo dnf upgrade latch (COPR) or bash scripts/update.sh from a fresh tarball.
Checksum: see SHA256SUMS in release assets.