Download Latest Version restheart-windows-amd64.exe (171.6 MB)
Email in envelope

Get an email when there's a new version of RESTHeart

Home / 9.8.0
Name Modified Size InfoDownloads / Week
Parent folder
restheart-windows-amd64.exe 2026-08-31 171.6 MB
restheart-linux-amd64 2026-08-31 167.9 MB
restheart-darwin-arm64 2026-08-31 166.8 MB
restheart.tar.gz 2026-08-31 72.2 MB
restheart.zip 2026-08-31 72.2 MB
9.8.0 source code.tar.gz 2026-08-31 7.2 MB
9.8.0 source code.zip 2026-08-31 8.3 MB
README.md 2026-08-31 4.4 kB
Totals: 8 Items   666.2 MB 2

Release 9.8.0

New Features

restheart-stripe: Stripe billing and e-commerce, out of the box

A new bundled module adding two independent, opt-in modes on top of Stripe — enable one, both, or neither.

Subscriptions mode — SaaS billing for any entity (team, account, tenant):

  • Stripe Checkout and Customer Portal integration, with a Customer lifecycle tied to your existing entities
  • Plan catalog (GET /stripe/plans) sourced from Stripe Products/Prices, with a local config layer for what RESTHeart must enforce (default plan, trial days, seat limits)
  • Seat licensing with three modes (capped, per-seat, unlimited), enforced directly in ACL predicates
  • New @subscription ACL variable for writing plan-aware access rules
  • Webhook-driven subscription state sync (created/updated/deleted/trial-will-end/invoice payment succeeded or failed), with a staleness guard so out-of-order webhook delivery can't roll back a newer state
  • Billing notification emails (trial ending, payment failed, subscription canceled, over-limit) with overridable templates

Products mode — cart-to-order e-commerce:

  • Checkout session creation from a cart, validated against a catalog read from Stripe Products/Prices
  • Order lifecycle as an explicit state machine (pending_paymentpaid/failed/expired), enforced with monotonic transitions so a delayed or replayed webhook can never move an order backwards
  • A money ledger tracking payments, refunds, and disputes per order, idempotent against redelivered Stripe events
  • Order and transaction JSON Schema validation, order confirmation/refund notification emails, and optional stock checks against an inventory collection

Multi-tenancy: on-demand per-database initialization, request-level and tenant-level kill switches, so a single deployment can serve tenants with different Stripe configurations or none at all.

GraalVM native image support (#679): restheart-stripe now builds and runs correctly as a native executable. stripe-java deserializes Stripe API objects reflectively via Gson, which native-image doesn't support without explicit configuration — this is now in place, and the full webhook-driven test suite (subscriptions and products, every handled event type) passes against the native binary.

API key authentication (#699, #700)

New apiKeyAuthMechanism and mongoApiKeyAuthenticator, for authenticating requests with a long-lived API key instead of username/password or a JWT.

Optional plugin dependencies (#698)

@Inject now accepts required=false, so a plugin can declare a dependency on a provider that may not be present (e.g. an optional module) without failing to load when it isn't.

New ACL predicate variables

  • @roles — lets a predicate distinguish an anonymous caller from an authenticated one by role
  • @authenticated — a boolean shorthand for "is this request authenticated at all"

Improvements

  • Native image build workflow: builds trigger asynchronously in CI, with improved artifact handling
  • Plugin initialization failures are now reported for what they are ("plugin failed to initialize"), rather than the previous message implying a compilation problem
  • A refused deployment (e.g. an email that fails validation) now says why, instead of failing silently further down the pipeline

Bug Fixes

  • Restricted temp directory permissions and removed a pointless temporary file
  • Fixed a request being re-validated against its JSON Schema after it had already been refused
  • Fixed numeric comparison predicates after a refactor to array-based parameters

Known Limitations

  • restheart-stripe's native-image verification is webhook-driven end to end, but does not exercise the code paths that make live Stripe API calls (Customer creation, Checkout Session creation, Billing Portal Session creation) — those require a real Stripe test-mode key and aren't covered by the current test suite. Tracked as a follow-up; the reflection config for these paths is in place but unverified under native-image.

Dependencies

  • GraalVM: 25.1.3
  • Java: 25+
  • stripe-java: 33.3.0
Source: README.md, updated 2026-08-31