All notable changes to Cardbox are documented in this file.

The format follows Keep a Changelog, and Cardbox follows Semantic Versioning.

[0.1.0] - 2026-10-25

Added

  • Collections (use Cardbox): records of one kind in your database, on PostgreSQL or SQLite, with an owner of your app's ({type, id}).
  • Versioned tables (Cardbox.Migrations): your migration pins a version (up(version: 1), down(to: 0)), the version a database is at is kept in cardbox_schema, and mix cardbox.gen.migration writes the migration from the version your migrations pin to the latest. check/1 says whether a database is at the latest.
  • mix cardbox.install: your module of Cardbox's and the migration, with Igniter (mix igniter.install cardbox) or without.
  • Fields of fourteen types: text, number (and its format), checkbox, date (and a time), select, multi-select, status (choices in groups), person, URL, email, phone, relation, and who made and changed each record and when. Keys made once from names, so a rename changes no data; choices kept by id, in Erabi's nine colours; a change of type converts the values; a choice removed leaves the records that had it.
  • Relations as rows of cardbox_links, kept whole by the database, with two-way relations whose other side reads the same links.
  • One write path: values checked against their fields, every error at once with what the field takes, allow?/3, a compare-and-swap of the values a writer saw (expect:), the collection's order (Narabe's positions), who changed what, and an event to the collection's topic (Cardbox.Event) and to telemetry.
  • Queries: conditions in groups of and and or, days said in words read when the query runs, "me", status groups, sorts with empty values last, and a search without case or accents in a search text column, on every database; the same answers in Elixir (meets?/4).
  • Saved views of six types (table, board, list, calendar, chart, canvas), shared or someone's own, kept in step when a field is deleted.
  • Cardbox.Masu: a collection as a Masu grid, sorted, filtered and searched in the database, edited through Cardbox, with chips for choices, people by name and relations by title.
  • Cardbox.Narabe: a collection as a Narabe board, a column for each choice, person or tick of the view's field; a card moved to another column takes its value, and its place.
  • Cardbox.Hakushi: a collection as a Hakushi canvas, its edges a relation's links, its places kept in the view.
  • Cardbox.Koyomi: a collection as a Koyomi calendar, each record on the day of the view's date field, toned by its status's group, the days read a month or a few at a time.
  • Cardbox.Fude: a collection as a Fude chart (bar, line, area, pie, donut, a number), grouped and aggregated in the database through the view's query, choices in their order and colours.
  • group/3: records grouped by fields (dates by day, month or year) and counted or aggregated in the database, on PostgreSQL and SQLite.
  • Views of an app's own types (use Cardbox, views: [...]), their options checked by Cardbox.check_view/3.
  • Cardbox.describe/1: a collection as an agent reads it, and Cardbox.json_schema/1: the values of its records as a JSON Schema.
  • The development app (mix dev).