RaxBoard Core — Core
A new release is now available on the RaxBoard Marketplace.
Version: 1.9.0 (build 20260917)
Compatibility: RaxBoard >=1.0.0
What's new
# RaxBoard 1.9.0 (build 20260917)
24 new migrations (1089–1112) over 1.8.9. No schema breaks; the upgrade is an overlay plus `migrate:run`.
## Editor
- **Pressing Enter no longer stutters.** Each Enter ran the editor's whole input pipeline **twice**: `execCommand` fires its own `input` event and the code dispatched a second one by hand, so every new line serialised the entire post, rewrote the textarea, recounted the words and re-probed for mentions two times over. Measured on identical content, the Enter-to-keystroke cost ratio fell from 2.3–2.75× to 1.3–1.8×.
- **Holding Enter no longer drops frames.** The remaining per-keystroke work was O(document): converting the editor to BBCode alone was ~60% of the handler and grew with the post — 3.1 ms at 10 lines, 12.7 ms at 500, most of a 60 fps frame before the browser had laid anything out. That serialisation is now coalesced to once per frame, so a burst of Enters costs what one costs. Measured 5.0 / 8.7 / 12.7 ms → 0.5 / 0.6 / 0.7 ms at 100 / 300 / 500 lines. The textarea is still flushed on submit, on draft save, on undo and when switching to BBCode source, so nothing is ever read stale.
- Smilie preview map completed, code-block phrases translated, the image-width field is focusable again, and the toolbar reports its state to assistive tech.
## Overlays and layering
- **The emoji and smilie panels no longer open behind a modal.** This was never a z-index value: the smilie panel is rendered inside the sticky toolbar, which forms its own stacking context, so its z-index of 100060 was spent competing inside the toolbar while the page saw the toolbar's 51. Popovers now escape to the document root when they are trapped, and return when they close.
- **One stacking scale for every overlay** (`--rb-z-*` in tokens.css). Seven overlays sat below the modal backdrop and vanished whenever a modal was open: toasts, the lightbox, the multi-language composer, the reaction picker and the floating notice stack among them. Core now also reclaims the popover layer from themes that hardcoded their own value.
## Advertising
- **New side-rail ad zones, left and right** (`ad_side_left`, `ad_side_right`), with a label bar and a dismiss button that is remembered for 24 hours. The rails measure the content column and only appear when there is genuinely room beside it, so they never cover the page on a narrow window, and they are not rendered at all for a mobile user agent — no wasted download, no impression the advertiser was never shown. Group, theme, forum, page, device and schedule targeting all apply, as does click tracking.
## Admin panel on mobile
- **Data tables are usable again.** The previous responsive rule turned tables into block boxes, which made them stop sizing from their columns: the overflow never scrolled and the action column was clipped off-screen, so an operator could not edit or ban anyone from a phone. Tables stay tables, the wrapper scrolls, and the action column is pinned to the right edge.
- Page gutter halved (content 322 → 351 px on a 375 px screen), header aligned with it and reduced from 111 px to 57 px on one row, every control given a 40 px touch target, checkboxes 24 px, and form fields 16 px so iOS stops zooming on focus and leaving the page zoomed.
- Marketplace cards fill the width instead of stopping at 260 px with a dead strip beside them; the update banner and card footers stack rather than squeezing a sentence into a sliver.
- The sidebar drawer now closes on Escape, locks the page behind it and returns focus to the button that opened it.
## Marketplace
- Buy and install flows reachable from the product modal, a scheduled refresh for the update notice, bulk update for installed items, accessible toolbar controls and correct card semantics.
## Feeds, widgets, themes
- Feed entries show real avatars and no longer link to removed content.
- New full-width `page_top` widget zone, rendered above both columns.
- Widget containers can opt out of popover clipping, and that opt-out now wins over a theme's own rule.
- Header search closes when you click outside it.
- Clear Blue style tweaks and the Kalium footer RSS link corrected.
## Correctness and portability
- Collations and timestamp nullability are now stated explicitly, so a database built on MariaDB and one built on MySQL agree. This release is verified installing and serving on both engines.
- Breadcrumb navigation announces itself in the reader's own language instead of always English, without breaking the CSS hook that colours it.
- Contact form validation and its messages are translatable.
- Orphaned gallery alerts are purged.
- The shipped `htaccess.dist` template is comment-free like every other shipped file, and carries no third-party product name.
Get it
View on the Marketplace
— Posted automatically by the RaxBoard Marketplace.