Skip to content

Releases: xmit-dev/flower

Flower v0.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 01:11
v0.2.0
90e619a

Flower 0.2.0 adds continuous backups with point-in-time restores, and foreign keys that the server enforces.

Get started: Run Flower in five minutes downloads the server below and installs the SDK:

npm install @flower-js/sdk@0.2.0

New

  • Backups and point-in-time restores. Set FLOWER_BACKUP_URL to s3://BUCKET/PREFIX (AWS S3 or any S3-compatible store; FLOWER_BACKUP_S3_* sets the endpoint and credentials) or file:///PATH. The leader then ships every entry it applies, stamped with the time it was applied, and now and then writes a compressed base of the whole state (zstd). Retention keeps 30 days by default. flower backup restore --data DIR --id N --advertise HOST:PORT --at TIME (or --index N) rebuilds the state as of any moment in that window, offline, into the data directory of a new single-node cluster. flower backup list shows what each generation can restore, and GET /admin/backup shows what a node's backup is doing. Guide: Backups & restores.
  • Foreign keys. collection.references(target, on, { onDelete }) declares that each row holds the key of one of target's rows: in a field, in several fields that make up a tuple key, or in its own key. At the end of every mutation, the server checks that each row written refers only to rows that exist, and that no deleted row is still referred to. Otherwise the mutation fails with FOREIGN_KEY_VIOLATION. onDelete is restrict (the default), cascade or setNull. Reference: References.

Upgrading from 0.1.0

Upgrade every node of a cluster together: stop them all, replace the binary, then start them again. Foreign keys add a replicated command, so the compatibility contract's state machine version goes from 17 to 18, and 0.1.0 and 0.2.0 nodes refuse to talk to each other. Data directories written by 0.1.0 open as they are. They can't be downgraded afterwards.

Also

  • The handbook no longer calls Flower unreleased, and its backups page uses the release's ./flower.
  • The SDK is published to npm by the release workflow itself, through npm trusted publishing, with a provenance statement.

Downloads

Archive Runs on
flower-0.2.0-x86_64-unknown-linux-gnu.tar.gz Linux x86-64, glibc 2.35+
flower-0.2.0-aarch64-unknown-linux-gnu.tar.gz Linux Arm64, glibc 2.35+
flower-0.2.0-x86_64-apple-darwin.tar.gz macOS 15+, Intel
flower-0.2.0-aarch64-apple-darwin.tar.gz macOS 15+, Apple silicon

Each archive holds the standalone flower server, its MIT license and third-party notices. The .sha256 files verify the archives. macOS builds are not notarized. flower-js-sdk-0.2.0.tgz is the tested SDK package, as published to npm.

Full Changelog: v0.1.0...v0.2.0

Flower v0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 23:05
v0.1.0
ebd0f00

Flower's first release: a database you program in TypeScript. You write the methods and the values derived from your data; Flower keeps those values up to date in the same commit and replicates every change with Raft.

Get started: Run Flower in five minutes downloads the server below, installs the SDK, deploys an app and calls it. The handbook covers the rest.

npm install @flower-js/sdk

What's in 0.1.0

  • Your code is the API. Collections of JSON records with schemas, derived values Flower recomputes when what they read changes (materialized per row when you ask), aggregates maintained from row deltas, and queries, mutations and cross-group transactions. Only the methods you list in http are callable.
  • Reactive reads. Live queries over SSE from any replica, fresh by default or replica-local when you opt in; a typed FlowerClient checks every alias and argument against your app's types.
  • Replicated. Three nodes tolerate one failure; a write is acknowledged once a majority has it on disk. Named partitions spread tenants across several Raft groups, move between them, and retire when a tenant leaves.
  • Components. Durable timers (scheduler), work queues with leases and fencing, expiring records, and external values kept current by ordinary worker processes (runQueueWorker, reconcile).
  • Access and crypto. Authenticate callers once and give each method an access rule; NaCl, JWT and WebAuthn passkeys inside callbacks, with managed keys that never enter application memory.
  • Operations. Staged deployments, TLS and HTTP/2, OpenTelemetry traces and metrics, capacity budgets, a NixOS module (services.flower.instances), and a Rust guest SDK (flower-sdk) for apps compiled to WebAssembly.

Flower is a working prototype and its API may still change before 1.0: current boundaries lists what it does today and the limits to plan around.

Downloads

Archive Runs on
flower-0.1.0-x86_64-unknown-linux-gnu.tar.gz Linux x86-64, glibc 2.35+
flower-0.1.0-aarch64-unknown-linux-gnu.tar.gz Linux Arm64, glibc 2.35+
flower-0.1.0-x86_64-apple-darwin.tar.gz macOS 15+, Intel
flower-0.1.0-aarch64-apple-darwin.tar.gz macOS 15+, Apple silicon

Each archive holds the standalone flower server (QuickJS/Wasm embedded; no Node needed), its MIT license and third-party notices; the .sha256 files verify them. macOS builds are not notarized. flower-js-sdk-0.1.0.tgz is the tested SDK package, as published to npm.

Full Changelog: https://github.com/xmit-dev/flower/commits/v0.1.0