Skip to content

Releases: YeOK/Latch

Latch v0.5.2.0

Choose a tag to compare

@YeOK YeOK released this 20 Jul 19:50

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 settings table per request (was one SELECT per get())
  • 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+1 instead of separate existence queries

Details: PERFORMANCE.md

Upgrade

Fedora/RHEL (after COPR rebuild):

sudo dnf upgrade latch
sudo latch doctor

Tarball:

# replace tree, then:
bash scripts/update.sh

Full notes: CHANGELOG.md

Latch v0.5.1.0

Choose a tag to compare

@YeOK YeOK released this 18 Jul 10:44

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.gz
    • core.tar.gzlatch.sqlite + config/local.php
    • plugins.tar.gzstorage/plugins/ (WAL-safe plugin.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 backup

Tarball:

# 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 off

Full notes: CHANGELOG.md

Latch v0.5.0.0

Choose a tag to compare

@YeOK YeOK released this 18 Jul 10:17

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
    • --show for masked status (safe to paste)
    • --section=turnstile,mail for partial runs
    • Optional prompt after interactive install (--no-configure to skip)
    • RPM: latch-setup prints sudo 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 doctor

Deferred (not in 0.5.0)

Docker demo, Packagist, WebAuthn, fediverse-share, phpBB real-dump guide.

Full notes: CHANGELOG.md

Latch v0.4.8.0

Choose a tag to compare

@YeOK YeOK released this 18 Jul 09:48

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 guidedocs/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 COPR dnf upgrade latch after rebuild.

Latch v0.4.7.0

Choose a tag to compare

@YeOK YeOK released this 17 Jul 10:29

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.sh or scripts/update.sh
  • Fedora: dnf upgrade latch after COPR rebuild for this tag

Latch v0.4.6.2

Choose a tag to compare

@YeOK YeOK released this 14 Jul 20:50

Fixed

  • CSP font-src — Content-Security-Policy no longer emits escaped \'self\' for font-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

Choose a tag to compare

@YeOK YeOK released this 13 Jul 21:28

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 testsPrivacyAnalyticsPluginTest for audit, snippet rendering, and host validation.
  • Plugin asset docsdocs/PLUGINS.md documents serving assets via routes, theme.assets / theme.scripts, HTML templates, and client-mode behaviour.

Fixed

  • Client-mode plugin assetstheme.assets and theme.scripts still run for guest_page: client plugins; 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 purgepurgeArchivePost handles orphaned archive rows; maintenance dashboard uses countArchiveQueue().
  • Topic layout — post list separated from header card so replies no longer appear nested inside the topic header.

Changed

  • Latch-plugins cataloggit-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 updatephp bin/latch plugin update <slug> and Admin → Plugins → Installed update action; replaces plugins/{slug}/ from the catalog or a local zip while keeping storage/plugins/{slug}/ and enabled state.
  • home.before_boards hook — home templates render plugin_home_before_boards_html above 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.js play-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 themeasset_version includes 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 off on RPM installs (/usr/bin/latch).
  • DocumentationINSTALL-FEDORA.md disaster-recovery and fail2ban sections use sudo latch; jail documents security.log path.

[0.4.5.1] — 2026-07-12

Fixed

  • Admin log viewer — code-style monospace panel; Details and raw Line on full-width sub-rows below Time/Event/IP/User (no truncated inline JSON).
  • fail2ban latch-login — jail watches security.log for login_fail (real client IPs behind Cloudflare/local proxy); fixed Apache combined failregex; ship latch-remoteip.conf for optional access-log client IPs.

Changed

  • Documentation — fail2ban troubleshooting and server log viewer setup in INSTALL-FEDORA.md and SECURITY.md.

[0.4.5.0] — 2026-07-12

Added

  • Admin log viewer/admin/logs source index and tail viewer for security.log and restore.log; optional Apache/PHP-FPM sources via logs.server_logs_enabled in local.php.
  • Log engine — bounded reverse tail, byte cursors, rotation detection, security JSON filters (event, ip, username, time range), text q search, and secret redaction on all output.
  • Live tail?live=1 polls /admin/logs/feed every 30s with rate limit and debounced logs.feed audit.
  • CLIphp bin/latch logs list|tail with full filter parity and --follow.
  • Doctor — warns when configured server log paths are unreadable (with setfacl hints).
  • Dashboard — login failure count from the last 500 security.log lines (links to filtered viewer).

Security

  • Outbound URL guard — central SSRF checks cover IPv6 literals, .local hosts, redirect targets, and plugin catalog GETs; link-preview delegates to core OutboundUrlGuard and re-validates each redirect hop.

Fixed

  • Showcase + account overlay — restore container on <main> so profile/admin AJAX panels load; account-panel.js also matches main.sc-main.

Documentation

  • Server logsSECURITY.md, INSTALL.md, INSTALL-FEDORA.md, CLI.md, and packaging/README.md updated 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 as active_theme with config fallback.
  • Showcase theme pack — reference implementation with custom layout shell, home/board/topic templates, partials, CSS, and showcase.js (beyond token-only packs like modern).
  • 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; shared partials/brand.html.twig for 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 loaderplugin-clients.js hydrates guest_page: client placeholders; 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.sh gate.

[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 time
    • csp.frame_src, csp.script_src — video embeds and analytics scripts
    • layout.head<head> snippets (privacy analytics)
    • topic.actions — topic header share buttons (fediverse-share)
    • profile.form, profile.before_save — avatar-url and profile extensions
    • post.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.link receives $standalone = true
  • ProfileSaveContext — mutable context for profile.before_save (mirrors PostSaveContext)
  • Docs: PLUGINS.md hook reference updated; MARKUP.md standalone URL note

[0.4.3.1] — 2026-07-12

Added

  • Admin plugins UIInstalled / Catalog tabs with icon actions (install, enable, disable, settings, remove); SPA-friendly ?tab= navigation.
  • fix-perms overhaul — repairs all runtime paths (storage/, plugins/ code, SQLite sidecars, local.php); --web-user / WEB_USER override (default apache).
  • docs/RELEASE.md — full release checklist (VERSION, RPM, tarball, git tag, COPR); scripts/check-versions.sh gate in build-release.sh.

Fixed

  • GitHub release zip download — follow HTTP 302 redirect chain (GitHub → release-assets.githubusercontent.com).
  • Catalog install permissionsplugins/ parent writable by web server; RPM %post sets apache:apache on plugins/.
  • 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 missing query() 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 installAdmin → 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 an encryption_key mismatch (documented in CLI.md, SECURITY.md, INSTALL.md).
  • PluginCatalog / PluginReleaseDownloader — fetches catalog.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...
Read more

Latch v0.4.5.3

Choose a tag to compare

@YeOK YeOK released this 13 Jul 19:23

Weekend patch — plugin updates, home layout hook, admin AJAX fix.

Added

  • Plugin updatesudo 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 / --security
  • php 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 placement

Tarball SHA256: f7ace263e5b4f6517ac02bd4f3c2e169c857935e5f2cf563eebb16cfe2cc3f55

Latch v0.4.5.2

Choose a tag to compare

@YeOK YeOK released this 12 Jul 21:33

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 themeasset_version includes 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 off on RPM installs.
  • INSTALL-FEDORA.md — disaster-recovery uses sudo latch; fail2ban jail documents security.log path.

Upgrade: sudo dnf upgrade latch (COPR) or bash scripts/update.sh from a fresh tarball.

Latch v0.4.5.1

Choose a tag to compare

@YeOK YeOK released this 12 Jul 18:37

Latch v0.4.5.1

Fixed

  • Admin log viewer — code-style monospace panel; Details and raw Line on full-width sub-rows below Time/Event/IP/User (no truncated inline JSON).
  • fail2ban latch-login — jail watches security.log for login_fail (real client IPs behind Cloudflare/local proxy); fixed Apache combined failregex; ship latch-remoteip.conf for optional access-log client IPs.

Changed

  • Documentation — fail2ban troubleshooting and server log viewer setup in INSTALL-FEDORA.md and SECURITY.md.

Upgrade: sudo dnf upgrade latch (COPR) or bash scripts/update.sh from a fresh tarball.

Checksum: see SHA256SUMS in release assets.