Release Notes
This page tracks what ships in the current Reepolee release line. Reepolee is pre-1.0, so documentation describes the current code. When you adopt changes from a newer version, use Reesync to review and select the files that belong in your project.
Reepolee uses calendar versioning, Ubuntu-style. A release is YY.MM.N - two-digit year, two-digit month, and the release number within that month. 26.07.1 is the first release shipped in July 2026. The version tells you when a release shipped, not what kind of change it carries; there is no semver-style major/minor/patch signal. The shape:
- Month releases (
26.07.1→26.08.1) - the first release of a new month is a feature release. - Point releases (
26.07.1→26.07.2) - later releases within the same month may contain fixes or documentation updates.
Each entry below records what shipped in that release.
Versioning and Distribution
Reepolee isn't published to a package registry. There's no npm install reepolee. Clone the public repository and use its tagged releases to identify the version you are working with. package.json tracks the version for diagnostic purposes (it appears in props.version and on the production logs); bun pm version patch --no-git-tag-version bumps the YY.MM.N version in package.json.
During beta, tagged GitHub releases identify snapshots of the code documented here.
How to Stay Informed
Three ways to know when a new release ships:
- GitHub releases - every release tag publishes notes on
github.com/reepolee/reepolee/releases. Watching the repository (with the "Releases only" option) sends an email per release. - The
productionbranch on this docs repo - when these release notes are updated, that's a release. Subscribing to the RSS feed of the docs site changelog covers it. - Following @reepolee on Twitter - release announcements with one-paragraph summaries, no other noise.
For deeper "what's about to ship" visibility, the Roadmap tracks larger initiatives in flight.
26.08 - Current
The 26.08 line is the current release. Highlights:
- Server-rendered Ree templating with layouts, partials, and components (ReeTags). See ReeTags.
- Bun's native SQL for SQLite and MySQL with a single
dbinstance imported fromconfig/db.ts. The driver is a one-line file copy. See Database. - A complete CRUD generator that introspects your database and produces routes, queries, validation, templates, and translations from the schema alone. See Generators.
- Invite-only authentication with sessions in the database, a small KV abstraction so the session store is swappable, and tags for authorization. See Authentication.
- Tailwind v4 styling with design tokens in
@theme, semantic utilities (primary/secondary/tertiary), and form-control defaults that mean templates rarely need per-input class lists. See Styling. - Full internationalisation - database-backed translations and localised URLs generated automatically from
route_nametranslation keys. See Internationalization. - Optional client-side enhancements - fine-grained reactivity with the vendored
alien-deepsignalsbundle, native<details>and<dialog>patterns, focused form and dialog scripts, and a small set of shipped web components. See Client-Side UI Patterns. - Production-ready deployment with a systemd unit and Nginx configuration documented end-to-end. See Deployment.
Everything in the documentation reflects what the current 26.08 release ships.
Also included
The rest of what this release ships:
- 26.08.24 generator workflow - schema metadata is now a fresh in-memory snapshot for each generator entry point. The previous on-disk DDL cache and its manual rescan commands have been removed, so schema, CRUD, bulk, refresh, and MCP generator operations read the current database before they generate. Reeman also offers an index-grid column multi-select for single-table schema and CRUD generation, with the same explicit choice available as
--grid-columns <a,b,c>. See Generators. - 26.08.24 safer CRUD refresh - fields refresh reuses the existing schema while full refresh re-introspects, rewrites
table.generated.ts, and merges added database columns into the project-ownedtable.tsmap without replacing its existing customizations. See Generators. - 26.08.24 installation reporting - first-run bootstrap and
bun get:prenow report each prerequisite and setup step clearly, keep successful child output quiet, and accept--verbosewhen full command output is needed for diagnosis. - 26.07.75 display-column contract - every generated table and view now requires a string
displaycolumn; an optionaloption_displaysupplies richer FK-select and autocomplete labels. Views that expand a foreign key use the exact<relationship>_displayalias, so generated grids hide raw IDs and label/sort the resolved relationship consistently. Generated writes omit display columns. See Schema & Initialization and Generators. - 26.07.75 Reeman refinements -
crud allis the all-table command, Quick Start takes reviewed admin defaults from.env, and changing database type updates bothCONNECTION_STRINGandTEST_CONNECTION_STRING. The bundled SQLite and MySQL schemas, plus the cooking-blog demo, now use the display-column contract. - Redis-backed SQL cache - opt-in caching of generated
search_recordsqueries with automatic dependency-set invalidation and a/system/cacheadmin view. Enable withCACHE_ENABLED=true+REDIS_URL. See Caching. - Rate limiting - sliding-window request limiting as the first global middleware, with per-scope tiers in
config/rate_limit.ts. Enable withRATE_LIMITING=true+REDIS_URL. See Rate Limiting. - CSRF protection - always-on double-submit-cookie protection on state-changing requests; generated forms already include the token. See CSRF Protection.
- DB-first translations - the
translationstable is the source of truth, edited live through the/system/translationsadmin module and seeded per-locale fromsql/<dialect>/02-init-translations-<locale>.sql.bun reeman sync-translations --translateAI-fills gaps directly in the DB; the Prune unused / Sync missing reeman tools keep the table aligned with templates. Missing keys render as their braced key path. See Translations. - Pluralization -
plural()selects CLDR plural forms viaIntl.PluralRulesfrom pipe-separated translation strings. - More AI translation providers - Ollama (local, highest priority) and Hugging Face Inference join OpenRouter. See Dynamic Translations.
- Global (row-level) scopes - admin-defined, named
WHEREfilters per table via/system/global_scopes, folded into list queries and the cache key. See Authorization. - Nested CRUD (master-detail) -
--parent <table>generates parent-scoped child resources with inline child lists on the parent's edit form. A parent can have multiple children. See Generators. - Generator improvements -
ICU/CUcolumn-visibility flags, plain-word and JSON column-comment field types,refresh-crud --mode fieldsto regenerate field sections only, sort options from indexed columns, fulltext search vialib/sql_dialect.ts, and thecrud-ignoretable tag. - Pagination strategies & streaming - generated list views choose offset (default) or cursor pagination via
--pagination/ thepagination_strategyschema export, and can stream records as Declarative Partial Updates (DPU) viarender_strategy: "stream". See Pagination and Streaming. - Domain types - a canonical column-type vocabulary in
config/domain_types/{mysql,sqlite}.ts, with a Check domain compliance reeman tool that audits a schema against it. See Schema & Initialization. - Agent mode -
--agentruns the dev server headless, impersonating a user via theX-Agent-User-Usernameheader orAGENT_USER_USERNAME(dev + localhost only). See Authentication. - CSS design system - the
@themeblock expands into a full token set (brand/surface/primary/semantic colours, typography, radii), and generated list views gain a right slide-in filter panel (css/filters.css). See Theming & Tokens. - Add/remove locale - both are one-step reeman actions that seed or strip a locale's rows directly in the
translationstable. See Adding a New Locale. - SQL layout & dialect isolation - schema/seed SQL moved to per-dialect folders (
sql/sqlite/,sql/mysql/) with numbered files; engine-specific SQL is isolated inlib/sql_dialect.ts. {#with}template directive - scopes bare variable names against a nested object, used widely in generated templates. See Displaying Data.- Translation-lookup tags
{_ }/{- }/{@ }- read strings fromprops.translationsby dotted key path (escaped, raw, and rendered through markdown), rendering a{last_segment}marker on a missing key instead of a crash or a silent blank.{@ }runs the resolved value throughBun.markdown.html, for a translation authored as markdown source.create_ctx()now resolvesctx.translationsonce per request - replacing the standalonetranslated_from_request()helper - andrender()exposes it to templates asprops.translations. Existing{= props.labels.x }-style reads become{_ labels.x }. See Translation Lookups. - libvips installer -
bun scripts/cli.ts vipsfetches a prebuilt libvips for the image-processing pipeline. See Installation. - Editor LSP - a Language Server Protocol server at
ree-lsp.cjsgives VS Code (via the Ree Templates extension) and any stdio-LSP editor autocompletion for.reetags, helpers, and translation keys, plus hover info and go-to-definition for includes, components, and translation lookups. The LSP discovers your project structure through the newreesection inpackage.json. - Publisher signal -
lib/publisher_signal/middleware fires a fire-and-forget HTTP signal to a ReeWeb Publisher after every successful mutation (POST/PUT/PATCH/DELETE→201/204/3xx). SetREEWEB_PUBLISHER_URLin.envto auto-trigger a static-site rebuild whenever content changes in the admin panel. - Read API column blocklist -
config/api_blocklist.tsdefines columns (hashed_password,invitation_code,search_text, etc.) that are stripped from JSON Read API responses regardless of table, as a safety net whenapi: trueis set on a table withSELECT *. - Database structure conventions -
config/db_structure.tsdefines the column naming conventions that drive CRUD generation: date/datetime suffix detection (_on,_by,_at), image/file upload suffixes (_image,_file), boolean prefixes (is_,has_,can_), index/list field filters, localization eligibility rules, and grid column-width defaults.
Reporting Issues
Found something broken? Open an issue at github.com/reepolee/reepolee/issues. Include the Reepolee version (the version field in package.json), the Bun version (bun --version), and the smallest reproduction you can manage.
For security issues, email security@reepolee.com directly rather than opening a public issue.