Releases
v1.1.0
Compare
Sorry, something went wrong.
No results found
1.1.0 (2026-07-24)
Added
a11y/seo: HTML semantics audit — landmarks, native lists, RTL, meta/JSON-LD (#247 ) (46d018f )
a11y: nested document heading outline for visual export/embed (tier 3) (#251 ) (4b2760f )
activity: a bundled slide.added feed event (#84 ) (b6b79c5 )
activity: slide-preview thumb next to comments in the "from others" rail (#86 ) (2f8ffa0 )
ai-review: click-to-preview grid, hover-select, peek nav (#115 ) (b6ccee2 )
api,mcp: comments via public API v1 + MCP write tools (6b96292 )
auth: self-hosted single-IdP SSO via OIDC (Track 1) (#280 ) (780c074 )
branding: configurable app name (APP_NAME) + help/docs link (HELP_URL) (#58 ) (1234f7f )
builds: typewriter-per-bullet reveal style (build-animations phase 1) (#263 ) (f92049a )
capture: deterministic docs screenshot factory (Phase 0) (#324 ) (499e568 )
chart: chart-data editing moves to a bottom-panel "Data" tab (f2573db )
chart: chart-data editor as a roomy modal with live preview (#210 ) (2776dd7 )
chart: spreadsheet keyboard-nav + smarter header-cell paste (#127 ) (b765edb )
chart: spreadsheet-style data grid editor with raw-CSV toggle (#121 ) (868eb94 )
collab: deck ⇄ Y.Doc codec — CRDT schema + serializer (fase 2, stap 1) (#7 ) (ca1a69b )
collab: editor live-doc binder - Y.Doc as write target (fase 2, stap 3) (#9 ) (38b0946 )
collab: presence round 2 - notes co-typing, presence on all edit surfaces, robust focus state (#14 ) (a491b4a )
collab: presence round 3 — gliding slide-list labels + fallback focus chip (#17 ) (0730cf3 )
collab: server-as-collaborator - facade writes reach the live doc (fase 2, stap 4) (#10 ) (332e53a )
collab: step-5 finish - conflict-semantics tests, lock retirement, revision hygiene (fase 2, stap 5) (#11 ) (af6cc6c )
collab: Y.Doc persistence — storage adapters + Hocuspocus hooks (fase 2, stap 2) (#8 ) (bd18db9 )
comments: @mentions met autocomplete + toegangs-prompt (fase 3) (da04498 )
comments: @mentions met inline autocomplete, toegangs-prompt en comment_mention-notificatie (0dec0b6 )
comments: comment-activiteit voedt de notificatie-bel, bel ook in de editor (04aa0a2 )
comments: comments voeden de bel + bel in de editor-topbar (fase 1) (628c7f0 )
comments: link button in the composer (#167 ) (c054a5c )
comments: per-user leesstatus + 'wacht op mij'-filter (fase 2) (c2324ee )
comments: per-user leesstatus met unread-dots en 'wacht op mij'-filter (170c6fe )
comments: render @mention markers as inline chips everywhere (#105 ) (66fe50d )
comments: show mentions as chips while typing (#163 ) (baccbf9 )
comments: subscriptions + voorkeuren (fase 4) (e6cb5cf )
comments: subscriptions à la GitHub - participating default, per-deck override, voorkeuren (9cc9f21 )
content-columns: col{n}* image keys → ImageRef (datamodel step 4, laatste stap) (89641b4 )
content-columns: resolve col{n}* image keys into the ImageRef (datamodel step 4) (678760c )
create: creation view + reuse consolidation (create-flow track, Slices 1-4) (#76 ) (78d9439 )
data-model: .deck bundle import / re-hydrate (PR 5b) (#219 ) (02786e8 )
data-model: declare field-type vocabulary as single source (move 1a) (ad32de7 )
data-model: field-type vocabulary as single source (move 1a) (2a59898 )
data-model: generate + serve the deck JSON Schema (move 1c) (#213 ) (a3f1e21 )
data-model: pull markdown dialect toward CommonMark (PR 9) (#215 ) (6e7fbe2 )
data-model: schemaVersion stamp + single migration runner (move 1b) (#212 ) (7a8e444 )
data-model: self-contained .deck bundle export (PR 5a) (#218 ) (f049699 )
data-model: semantic reflowable HTML reader export (PR 7) (#217 ) (af81b14 )
data-model: slide-type identity, namespaces + collision detection (PR 6) (#216 ) (e6704b6 )
editor: "Settings" chip on images opens the inspector to their section (#173 ) (beeac1f )
editor: clickable empty image slots - add a first image from the slide (#24 ) (03a0ac0 )
editor: comments-pane krijgt scope-switch, filters worden één dropdown (4a870e4 )
editor: Cover/Contain fit toggle on images (wysiwyg) (#172 ) (42cf3b3 )
editor: drag & drop image files onto empty canvas placeholders (cac98c4 )
editor: drag & drop image files onto empty canvas placeholders (a1ebe4d )
editor: draggable focal point on cropped images (#171 ) (39525eb )
editor: finish selection-aware inspector — image-text per-image focus + content-columns element tab (55a4c22 )
editor: finish selection-aware inspector (image-text focus + content-columns element tab) (2b3a730 )
editor: flag empty required fields in the form, not just on save (00d78fc )
editor: focal point + fit on per-item images (gallery, team-cards, content-columns) (#176 ) (eb55c2e )
editor: icon-cards krijgen een inline icon-picker op de canvas (63239d8 )
editor: images single-source in the inspector (retire pill/chip/popover) (ef4dd9b )
editor: inline card reorder via overlay grip handles (#23 ) (d26ef3a )
editor: inspector leidt met settings, grote per-type blokken inklapbaar (d280a63 )
editor: keyboard-operable focal point (arrow keys + Home) (d44f4eb )
editor: keyboard-operable focal point (arrow keys + Home) (5cc226b )
editor: loading skeleton + faster deck open (#19 ) (7bb3e82 )
editor: notes under the slide, discoverable comment placement (#64 ) (402a169 )
editor: Option A — full-width slide bar with labeled Inspector/Comments openers (#149 ) (72d014d )
editor: presenter notes worden de derde inspector-pane (fc0e872 )
editor: reflect the selected slide in the URL (?slideId=) (726fd7f )
editor: retire the 3x3 cover-focus grid from the inspector (aa9c3e2 )
editor: retire the 3x3 cover-focus grid from the inspector (4d6c2f8 )
editor: selection-aware inspector with [This element | Slide] tabs (#175 ) (0868d2f )
editor: show personal + team slides in insert-slide library strip (008b1b9 )
editor: topbar in zones, gelabelde pane-switcher, slide-toolbar boven de canvas (18f9c87 )
editor: topbar wordt deck-only, pane-tabs verhuizen naar de slide-toolbar (a4da34b )
editor: unified Background section + logo-wall 30-cap and colour (#20 ) (14a5314 )
editor: unify Share into one tabbed dialog; polish Export rows (#164 ) (27db530 )
export: compress images before embedding in server-side PDF (f4bcd5d )
export: unified export modal with colour-coded formats and one PDF entry (#131 ) (32917c9 )
follow: collapsible Q&A so the slide fills a landscape phone (#264 ) (67953aa )
home: building-blocks shelf replaces the theme-picker create zone (#78 ) (1a18ad0 )
home: coherent, content-first dashboard layout (#63 ) (f5d4fd1 )
home: per-user reuse tracking + "New to you" badge on the blocks shelf (#81 ) (d2b34fa )
home: show comment text in the from-others rail; drop Popular's 0-count badge (#80 ) (3a15ee4 )
home: single /api/home aggregation replacing the client fan-out (#83 ) (75d9c11 )
home: two-column canvas with a from-others activity rail (#77 ) (2b234fa )
i18n: honor ?lang=/?locale= URL param for initial UI locale (#317 ) (b94793c )
image-blocks: justified rows for imageAspect: original (#59 ) (f61299b )
image-slide: split conflated layout into ImageRef fit + bleed (datamodel step 3) (ce57bdd )
image-slide: split layout into ImageRef fit + bleed (datamodel step 3) (940308c )
image-text: datamodel step 2 - fold focus + alt into the canonical ImageRef (#182 follow-up) (#183 ) (a12abb8 )
image-text: fit becomes an ImageRef property (datamodel step 2b) (3d3b667 )
image-text: layout-catalogus fase 1 - breedtereeks (1/3-2/3), hoekbeeld, layout-switcher (bf9fdf5 )
image-text: layout-catalogus fase 1 - breedtereeks, hoekbeeld, layout-switcher (d3de142 )
image-text: layout-catalogus fase 2 - beeldrijen, duo en de images[]-migratie (c75ba88 )
image-text: layout-catalogus fase 2 - beeldrijen, duo en de images[]-migratie (a1e4593 )
image-text: layout-catalogus fase 3 - cross-type tegels, spiegel-toggle en polish (1d8813a )
image-text: layout-catalogus fase 3 - cross-type tegels, spiegel-toggle en polish (bb5de58 )
image-text: optionele twee tekstkolommen bij beeldrij en duo (2824349 )
image-text: optionele twee tekstkolommen bij beeldrij en duo (35ae672 )
image-text: unify fit CSS + move fit onto the ImageRef (datamodel step 2b) (45b0c0b )
inline-edit: block-level text alignment & colour ('This text' tab) (d9be868 )
inline-edit: block-level text alignment & colour ('This text' tab) (5e7f116 )
inline-edit: edit markdown fields in place on the canvas (editing-surfaces text phase 1) (b4e673e )
inline-edit: floating selection toolbar for rich edits (c9b9560 )
inline-edit: floating selection toolbar for rich edits (editing-surfaces text, step 2) (113900f )
inline-edit: image-picker parity for logo-wall, image-blocks, quote (#148 ) (adfe3b2 )
inline-edit: text-size scale (S/M/L) on the 'This text' tab (#194 ) (2f52f83 )
inline-edit: theme text swatches on the 'This text' colour control (#199 ) (4f499cd )
inspector: enforce the element/slide split for image-text and image-slide (e31d2a4 )
inspector: honest accessibility status chip + collapsible/flat rule (#200 ) (a6f025d )
install: agent-native install flow + non-interactive setup flags (#284 ) (c248d14 )
install: one-command installer + interactive .env setup wizard (#281 ) (2ad0a07 )
mcp: read comments across decks (list_comments, list_recent_comments) (#5 ) (4e04c86 )
nav: consolidate 9 sidebar items to 6 with a unified Presentations view (#79 ) (328e612 )
notifications: bundled "someone worked on your deck" notification (#106 ) (1108d32 )
notifications: events-inbox + auto-archive bij eigen reply (fase 5) (c16886a )
notifications: events-inbox met archiveren, filters en auto-archive bij eigen reply (8b4608a )
pdf: video slides export as 'watch online' placeholder (#104 ) (24cf8de )
picker: schematic slide-type view + shared schematic renderer (#134 ) (44156bb )
quote-slide: canvas add/remove for 2nd/3rd quote + content-aware sizing (#206 ) (0a75f15 )
quote-slide: edit-mode fixes, centre-align block, 2 portraits on extras (#208 ) (0e9232a )
quote: optional round portrait photos (1-2) next to the attribution (#26 ) (c83dc8a )
quote: support up to 3 quotes with alternating alignment (03fbbd1 )
real-time collaboration — presence + live CRDT edits (ADR 001) (#12 ) (1c2860a )
sandbox: example decks + focused Home, conditional ImageKit source (4c265f4 )
sandbox: explain agent-native instead of a dead 'connect an agent' CTA (65101ce )
sandbox: grey out irrelevant settings (export, notifications, digest) (ea85c20 )
sandbox: library explainer page + theme-picker production hint (c5897ef )
sandbox: public-playground guards (publish off, banner, stock media) (#290 ) (ba4f3a9 )
sandbox: sample media + logos in the image library, greyed source hint (742ac4e )
security: fail closed on multi-workspace over a non-org-isolating backend (#286 ) (04c711e )
self-install: UX round 3 (cleaner Home, agent onboarding, MCP id alias, quiet locks) (#291 ) (8343ccd )
settings: redesign the settings page as a real settings UI (#147 ) (2432f35 )
slide-types: archive split-partner-title-slide (#197 ) (e5f78b8 )
slide-types: count-aware semantic projection + url field type (2a substrate) (#254 ) (c2b6868 )
slide-types: drag-to-reorder custom types in settings (4467c85 )
slide-types: full template syntax reference in the type editor (86e6b0c )
slide-types: import/export custom slide-type definitions (#124 ) (77d034b )
slide-types: migrate text-blocks to the nested rows model + relation-aware projection (PR B) (#257 ) (99946ae )
slide-types: park lead-capture pending cookie-consent wiring (#318 ) (21b0ced )
slide-types: roll out text-role vocabulary, retire quote hardcode (PR 2) (#226 ) (7b5d2c6 )
slide-types: text-role affordance model, kill centered-bullet bug (PR 1) (#225 ) (f615cf0 )
slides: layout setting + optional subheading on section title slide (53e5f58 )
theme: edit surfaces, heading treatment and locks in the theme editor (#136 ) (a2f19c4 )
theme: enforce override locks at edit- and render-time (#130 ) (a529292 )
theme: name background options in the theme editor (#141 ) (c99454e )
theme: name the two built-in backgrounds (#142 ) (a5dc830 )
theme: preview real slides in the theme editor (#133 ) (26824e5 )
themes: replace sandbox base themes with sharp archetype set (#152 ) (778cfbd )
theme: store a rich config on database themes (#120 ) (c69bb6e )
theme: the theme owns its background presets (#119 ) (7355401 )
theme: upload background images to a theme from the editor (#137 ) (553afb7 )
theme: wire theme surface tokens into the slide design system (#129 ) (b985c5f )
title-slide: theme-driven layout (bottom/center/top) (f864405 )
title-slide: theme-driven layout (bottom/center/top) (4bd9c63 )
title-slide: title/subtitle/meta field model + subtitle render fix (349c73c )
title-slide: title/subtitle/meta field model + subtitle render fix (116e036 )
title-slide: unify background onto shared slideBgImage (#196 ) (228c4c3 )
ui: Inter as the app-chrome sans, self-hosted with system fallback (#135 ) (b1ee8c8 )
ultrawide: let a wide screen actually buy width (#155 ) (5b98e84 )
wysiwyg: afbeelding toevoegen/verwijderen als directe intentie (type-wissel text ↔ image-text) (928de2e )
Fixed
ai-catalog: expose image-grid slide types to the AI (9bd9b3d )
ai-catalog: expose image-grid slide types to the AI (233f416 )
ai-prompts: stop advertising buildThemeContextSection as overridable (#203 ) (57e8182 )
ai: stop the catalog offering the deprecated content-columns-slide (F6) (#323 ) (f2127f8 )
analytics: store slide IDs as text, not uuid (7f8f833 )
analytics: store slide IDs as text, not uuid (4727739 )
api: layoutVariants meesturen in /api/slide-types (867f281 )
api: require If-Match for admins too on presentation writes (#262 ) (fc7deeb )
api: unify the internal error envelope on a machine-code contract (#261 ) (34daeb0 )
authz: per-deck authorization for MCP tools and public API (#6 ) (9a29feb )
authz: stop leaking decks without view access on Home/overviews (fb78386 )
chart: route canvas chart click to the Data tab; tighten grid in panel (d30362d )
collab: presence label polish + clipping fix + stale slide-dot (#15 ) (f8d3cba )
collab: review blockers - traversal, custom-html gate, load race, store consistency (#13 ) (6fcb513 )
comments: drop href on composer link nodes; document paren-URL limit (#169 ) (ba0bc8b )
comments: let presentation owner delete any comment on their deck (#1 ) (bee5661 )
comments: review-fixes op de notificatie-stack (3c88c00 )
create: active-tab highlight, optional theme in library, language up top (#138 ) (3ddc54d )
css: map analytics dashboard onto --app-* tokens (was undefined --ps-*) (#316 ) (d6e613f )
css: map auto-advance bar onto --app-* tokens (was undefined --ps-*) (#314 ) (032f5fa )
css: use the accent tokens that exist (#146 ) (3f50024 )
data-model: stop leaking owner email into public surfaces (move 3, narrow) (#214 ) (5b5b058 )
editor: clickable comment markers, whole-thread jump, dropdown factory (#61 ) (5945e5e )
editor: close two low-frequency edge cases in cards and comments (6810ccd )
editor: grab-bag polish — search-focus, notes close, presence dot, card titles (#60 ) (f686743 )
editor: keep the slide preview fully in view, no vertical scrollbar (#66 ) (660d8b8 )
editor: preview-collapse-val weg, icon-cards remove-fix, bredere bulk-modal, hint-regel weg (7a1560b )
editor: rebuild element tab on image fit change so the cover-only focus grid toggles with the mode (63b6bcc )
editor: reserve "Layout" for the toolbar chip, dedup the naming (#151 ) (425e005 )
editor: stop insert-row + button flickering on edge hover (#65 ) (bad18d4 )
editor: unify empty-image placeholders and gate the alt field (#166 ) (c59065a )
editor: WYSIWYG card add/remove + per-item affordance reveal + column-major 5-card grid (#258 ) (684ff0a )
export: embed local fonts in standalone HTML for offline rendering (#108 ) (60acae3 )
hardening: prune rate-limit map + weak-config startup warnings (#117 ) (c422e57 )
i18n: complete NL/EN coverage and make strings translatable (#174 ) (043cfae )
icon-card-grid: make the tiles layout fill its grid, drop numbering (1a98973 )
icon-card-grid: tint icons via CSS mask, not <img> currentColor (#3 ) (8639fcc )
image-text: per-beeld cover-override wint ook van de multi-contain frame-regel (f93bce6 )
inline-edit: band-aware muted colour + drop the inverse token (rollout QA) (#195 ) (f3e248c )
inline-edit: de-collide affordance chips across anchors (#315 ) (978296a )
inline-edit: don't live-truncate rich edits via textContent (37290ea )
inline-edit: keep the + Subheading ghost chip off the first body line (#114 ) (faacd48 ), closes #113
inspector: a11y heading proxy mirrors export's heading fields (#202 ) (f194be3 )
inspector: per-type coverage audit — no config field is bulk-only (#192 ) (c48ac43 )
inspector: surface video source and embed URL in the inspector (098ab6e )
inspector: surface video source and embed URL in the inspector (0f33b2e )
install: make the default file-storage install actually usable end-to-end (#285 ) (7a37b97 )
layout-switcher: set van cross-type tegels na conversie echt toepassen (a718862 )
list: stop the deck-card menu leaking a document click listener (F7) (#322 ) (d5e83da )
llm: stop sending temperature to OpenAI models that reject it (#85 ) (e712222 )
markdown: stop infinite loop on unsupported heading lines (# / ###) (2f6356c )
mcp: pass acting owner to updatePresentation so author-locked slides stay editable for the author (#30 ) (91d714d )
mobile: shorten the long-press compat-click guard to 350ms (#158 ) (3acdf6a )
new-deck: put the deck's own name on the opening title slide (#112 ) (0c94758 )
notifications: give the bell dropdown a real row design (#111 ) (6c0dafb )
notifications: guard fire-and-forget comment email against unhandled rejection (#328 ) (d0d5166 )
partner-split: readable subheading, and no hardcoded demo photo (#126 ) (34a742a )
pdf-export: configurable timeout for server-rendered PDF (#4 ) (c389b9d )
picker: make "Content columns" the explicit two-column choice (#143 ) (c116af8 )
picker: polish add-slide schematics (#140 ) (12ada28 )
quote: don't render an empty portrait circle - portraits are fully optional (#28 ) (e4844e2 )
rate-limit: await allowRequest so the limiter trips under Redis (#229 ) (5cd280a )
sandbox: fill theme picker, drop library/AI, breathe under topbar (#293 ) (8ae9adc )
sandbox: keep the examples shelf on Home after the first deck (83b857d )
save: stale-tab follow-ups - wake-up refresh, volgorde-behoud en merge-audit (5a13125 )
save: staleness-cap + per-slide conflictdetectie op de slide-level merge (8951677 )
save: staleness-cap + per-slide conflictdetectie op de slide-level merge (d9f1b64 )
security: cap public SSE connections (MH3) + clear prod-tree advisories (M4) (cluster 5) (#240 ) (a465958 )
security: cap publish/follow-codes body + CSRF-check sandbox cookie (#123 ) (043cab2 )
security: close file-read + IDOR holes in export/api-keys/jobs (cluster 1) (#231 ) (1c0e088 )
security: LOW-batch hardening — SSRF, CSS filter, error/log leaks (cluster 7, L2/L4/L5/L6/L7/L8) (#248 ) (2655cab )
security: per-resource authz on present-sessions + csv-url SSRF + share-link IDOR (cluster 4, H4/MH1/MH2) (#235 ) (70807ed )
security: stop stack-trace leaks + add framing/security headers (cluster 3) (#233 ) (ddbd1a3 )
security: trust rightmost XFF hop + CSPRNG follow codes (cluster 6, M2/M3) (#246 ) (ce87a8f )
security: versioned scrypt cost + AUTH_SECRET boot floor (cluster 8, L1/L3) (#250 ) (285c9c5 )
server: guard fire-and-forget email/notify tasks against unhandled rejection (F8) (#321 ) (75ea614 )
settings: hide Fonts/Slide Types panels when leaving their tab (#150 ) (a87e370 )
share: guard presenter-control link, inline created link, drop dead edit perm (#110 ) (1ef7104 )
share: persist isViewOnly on Postgres so workspace pills survive reload (#165 ) (8da7b6a )
slide-library: persist i18n per-language content on both backends (#107 ) (7466e94 )
slides: background-aware link colour token for slide-body links (#222 ) (4fd1ae9 )
slides: use shadow tokens so print drops elevation (no grey blocks) (#230 ) (636f5e7 )
storage: route version history through the storage adapter + import migration (#237 ) (df7c5c8 )
theme-editor: keep Save reachable, and stop shadowing it (#139 ) (d52fe2a )
theme: let /change-theme switch the theme via a gated escape hatch (#236 ) (5f03a8e )
theme: load database themes in the client, and invalidate on save (#132 ) (845445f )
theme: one shared normalizeTheme, and emit the legacy alias tokens (#116 ) (c5b6c99 )
theme: pin accent-contrast token in the config back-compat fixture (#122 ) (43a12f4 )
theme: readable quote author/byline on deckyard's dark quote slide (#16 ) (8ee2f7c )
timeline: keep cards readable on every background (92bc5c1 )
timeline: keep cards readable on every background (a6dd602 )
title-slide: apply muted caption colour on dark-text canonical backgrounds (43f8aa6 )
validate: accept the '' cleared-value convention for optional enum fields (e0ffd1f )
Security
auth: brute-force throttle on password login (918d5c2 )
auth: gate AUTH_DEV_BYPASS on NODE_ENV=development (1471e1b )
auth: hard-fail instead of failing open to anonymous admin (9fc371d )
container: run as non-root, gate Chromium sandbox behind env (7b8ef4a )
csrf: origin-check on cookie-authed state-changing requests (18e5710 )
export: SSRF guard for remote images in render/export (1f91de2 )
http: cap request-body size to prevent memory DoS (898606e )
media: confine LocalProvider keys to uploadsDir (6953fb2 )
ssrf: block IPv4-mapped/compatible IPv6 in hex-group form (91b22b2 )
uploads: serve user-uploaded SVG inert (stored-XSS fix) (a7b09f2 )
Changed
export: embed images in parallel with a per-run dedupe cache (#223 ) (3bca65a )
list: downscale ImageKit thumbnail images to card size (Fase A, rest) (#289 ) (b1463c2 )
list: front-page-perf follow-ups — slim payload, themed placeholder, warm-on-publish (58fa1f9 )
list: front-page-perf follow-ups — slim payload, themed placeholder, warm-on-publish (5ca30f3 )
list: lazy-render deck thumbnails with skeletons (front-page phase 1) (#287 ) (34da75d )
list: serve resized variants for local-upload thumbnails (Fase A deel 3) (39777a1 )
list: serve resized variants for local-upload thumbnails (Fase A deel 3) (#292 ) (5b5f2f9 )
list: server-rasterized PNG thumbnails for the deck grid (Fase B) (29ae4e2 )
list: server-rasterized PNG thumbnails for the deck grid (Fase B) (2c72007 )
You can’t perform that action at this time.