This release reduces JavaScript loading and server-side rendering memory retention, and makes custom SEO and link previews available on Pro and higher plans.
Faster public pages and lower SSR memory retention
- Public pages load less JavaScript up front. The homepage demo loads when it becomes visible, optional dialogs and feedback tools load on demand, and links prefetch on interaction. Protected application routes retain their authentication checks. #1363
- Completed server-rendered query caches are cleared instead of being retained for ten minutes. Public SSR form, feature-flag, and plan reads use a separate bounded quota; ordinary browser and external API limits remain in place.
- Added Brotli/gzip asset compression, WOFF2 fonts, lazy-loaded images, and long-lived caching for hashed assets. Product screenshots use lossless WebP; responsive variants retain their intended resizing.
- Fixed delayed authentication errors incorrectly expiring a newer session, and preserved first-use feedback and changelog interactions with lazy-loaded tools.
A production before/after check with the same clean mobile browser, disabled cache, CPU slowdown ×4, and third-party services blocked measured 210 → 57 initial script responses and 8.38 → 0.58 MB of initial first-party resource transfers. This is one controlled comparison, not a Lighthouse score or a guarantee for every visit. TTFB was 160 → 250 ms in that pair, so server response time was not improved in this measurement.
Custom SEO on Pro
Pro and higher plans can now publish a custom page title, description, link preview image, and favicon, on both OpnForm URLs and custom domains. Existing saved settings work without resaving the form. Pricing, editor upgrade messages, and API documentation now reflect this entitlement. Custom CSS and fonts remain Business features. #1362
Upgrade from v2.7.0
There are no new database migrations in this release. Update the API and client together, and restart application workers as part of your normal upgrade procedure.
For source installations, keep using the pinned Node 24.22.1 runtime. The public SSR read quota can be configured with SSR_READS_PER_MINUTE (default: 6000 per renderer IP); only the supported public GET routes authenticated with the frontend secret qualify.
For hosted deployment operators, the release controller includes a frontend allocation of 2 GiB with V8 old-space set to 1536 MiB. These settings require updating the installed controller and applying the deployment configuration; updating application images alone does not apply them. At the production verification for this release, the installed controller still applied the previous 1 GiB / 1024 MiB limits. Do not treat the new allocation as already active.
Docker
The tag pipeline builds linux/amd64 and linux/arm64 images:
jhumanj/opnform-api:2.8.0jhumanj/opnform-client:2.8.0
It also updates latest. Wait for the release workflow to finish before pulling. Publishing a release does not update running containers.
Update your Compose/configuration checkout to this release. For version-pinned installations, update both image references to 2.8.0, then recreate the application services:
docker compose pull api api-worker api-scheduler ui
docker compose up -d api api-worker api-scheduler ui
docker compose restart ingressFull changelog
Compare v2.7.0...v2.8.0 — two merged changes.