I built a Web framework that turns MongoDB data into server-rendered HTML

We’ve been working on Facet, which treats HTML as a presentation layer for data you already own.

The philosophy

Most web frameworks assume you start with the UI and add an API later. Facet inverts that.

If your data is already in MongoDB and your API already works, adding HTML output is a presentation concern, not a new application.

Facet treats it that way: a template is a view over data you already own, not a reason to restructure your backend.

How it works

You have MongoDB collections. RESTHeart exposes them as REST endpoints (simple config, zero backend code). Facet lets you decorate these with templates. Drop templates/products/index.html and GET /products serves HTML to browsers, JSON to API clients. Content negotiation handles the rest.

Technical details

  • Convention-based path mapping (template location = API path)

  • Templates use Pebble (Twig-like syntax, popular in PHP world)

  • Developed in Java 25

  • Direct access to JSON documents in templates

  • Hot-reload for templates (edit, refresh, done)

Use case

You have MongoDB collections powering an API. You need admin dashboards, internal tools, or data browsers. Instead of building a separate frontend or writing controllers, you add templates. Collections → API → HTML in one stack.

License: Apache 2.0

Home: getfacet.org

Repo: github.com/SoftInstigate/facet

Curious if anyone else finds this useful.

3 Likes

We are happy to announce Facet 1.0.1, a maintenance release focused on runtime correctness, documentation reorganization, CI updates, and dependency maintenance.

Fixed

  • Bypass HTML interception for Server-Sent Events (text/event-stream) requests.
    This prevents Facet from interfering with SSE responses and fixes issue #8.
  • Improved setversion.sh so it can run correctly from master and release/* branches.

Documentation

  • Reworked and expanded the project documentation.
  • Added OpenWiki-based documentation for:
    • architecture
    • HTMX integration
    • operations
    • quickstart
    • template system
    • testing
  • Updated the main README and examples documentation for clearer positioning and usage guidance.
  • Added the architecture diagram to the README.

Build And Maintenance

  • Added update-dependencies.sh to simplify dependency updates with Maven.
  • Updated project dependencies, including Byte Buddy, JUnit, Maven Surefire, and Maven Dependency Plugin.
  • Updated the RESTHeart dependency version used by the project.

CI

  • Updated GitHub Actions versions for checkout, setup-node, release publishing, and Docker build/push steps.
  • Refined the OpenWiki update workflow to avoid unnecessary workflow file changes in generated PRs.

Notes

This release does not introduce new end-user features. The main functional change is the SSE handling fix, while most other changes improve maintainability, documentation, and release automation.

Facet looks like a useful solution for quickly adding HTML views to existing MongoDB and REST APIs without building a separate frontend. The hot-reload templates and HTML/JSON content negotiation sound especially handy for admin dashboards and internal tools.

thank you @David_Warner3 feel free to add you comments on the Github repo, so far Facet has been mainly an internal experiment but we aim to make it useful for the whole MongoDB community!