Facet Changelog - Version History

Release notes and version history

All notable changes to this project are documented here.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.


[1.0.2] — 2026-08-11

Added

  • JavaScript server-side plugins — Custom backend logic in JavaScript (or TypeScript) via GraalVM.
    Add computed endpoints, data aggregations, and request/response interceptors without Java.
    Hot-reload on next request. See the JavaScript Plugins guide.

  • JavaScript plugin integration testsJsPluginsIT validates JS plugin loading and
    request-logger interceptor with HTMX-driven verification.

Changed

  • RESTHeart commons updated from 9.5.2 to 9.7.2 (compatible with RESTHeart 9.7).
  • Pebble updated from 4.1.1 to 4.1.2.
  • Maven plugin versions now managed as properties in the parent POM:
    maven-compiler-plugin 3.15.0, maven-surefire-plugin 3.5.6, maven-failsafe-plugin 3.5.6,
    maven-dependency-plugin 3.11.0, maven-assembly-plugin 3.8.0, versions-maven-plugin 2.21.0.
  • Dockerfile base image updated to RESTHeart 9.7.

Fixed

  • update-dependencies.sh improved with better version control logic.

[1.0.1] — 2026-03-19

Fixed

  • Bypass HTML interception for SSE event-stream requests (#8).
  • Allow setversion.sh to run from master and release/* branches.
  • Update restheart.version to 9.2.0 in POM.

Added

  • OpenWiki documentation — Architecture, HTMX integration, operations, quickstart, template
    system, and testing guides now live in the repository under openwiki/.
  • update-dependencies.sh — Script to update project dependencies using Maven Versions Plugin.
  • Polyglot extensibility documented in README (GraalVM support).

Changed

  • README rewritten for clarity on Facet as a RESTHeart plugin with server-rendered HTML.
  • CI workflows updated to latest GitHub Actions versions.
  • Documentation consolidated: detailed guides moved to OpenWiki and the project website.

[1.0.0] — 2026-03-13

First stable release. The core API and template conventions are now considered stable.

Added

  • requestMethod template variable — All templates now receive the HTTP method of the current
    request (GET, POST, PATCH, DELETE, PUT, HEAD, OPTIONS, OTHER). Enables
    conditional rendering for post-mutation feedback (e.g., showing "Created successfully!" after POST).

  • Per-status-code error templatesHtmlResponseHelper.renderErrorPage() now looks for
    templates/errors/{statusCode}.html before falling back to the generic templates/error.html.
    Example 404 page added to the product-catalog example at templates/errors/404.html.

  • MongoDB count caching — Count results for estimatedDocumentCount(), countDocuments(),
    listDatabaseNames(), and listCollectionNames() are cached with a 5-second TTL.
    Eliminates extra MongoDB round-trips per rendered page.

  • JUnit 5 test suite — 67 tests covering template resolution, HTMX header parsing,
    authentication context building, and HTMX response helpers.

  • "Handling Mutations" section in Developer's Guide — Documents three patterns for
    responding to form submissions and API mutations: HTMX Fragment Swap (recommended),
    Post-Redirect-Get, and inline response with requestMethod.

Changed

  • Version bumped from 0.2.0-SNAPSHOT to 1.0.0 in pom.xml and core/pom.xml.
  • requestMethod variable documented in Template Context Reference.

[0.2.0] — 2026-01

Added

  • Parametric mongo-mount support and multi-tenant context (tenantId, isMultiTenant, hostParams)
  • Custom Pebble filters: stripTrailingSlash, buildPath, parentPath, toJson
  • HTMX strict mode: missing fragment template returns 500 to surface errors early
  • CRUD example in product-catalog with HTMX-powered edit forms
  • HX-Reselect gap documented as known limitation

Changed

  • Template resolver refactored to PathBasedTemplateResolver with full hierarchical fallback
  • MongoHtmlResponseHandler enriches documents with _id metadata for URL generation

[0.1.0] — 2025

Initial release.

Added

  • Core interceptor architecture (HtmlResponseInterceptor, HtmlErrorResponseInterceptor, HtmlAuthRedirectInterceptor)
  • Path-based template resolution with hierarchical fallback
  • Pebble template engine integration
  • HTMX fragment resolution via HX-Target header
  • MongoDB response handler with pagination
  • ETag-based response caching
  • Product-catalog example with Pico CSS

Known Limitations (Future Work)

These issues exist but are not blocking for 1.0.0:

  • HX-Reselect response header not implemented (minor HTMX gap)
  • JsonHtmlResponseHandler loads full response into memory (no streaming)
  • MongoDB operation timeout handling not configurable
  • Thread pool size not configurable in PebbleTemplateProcessor
  • Redirect query param name (?redirect=) not configurable
  • Count cache TTL is hardcoded at 5 seconds (not runtime-configurable per handler)