Files
deckcraft/docs/gaps.md
T
Brandon Thomas 70a9a5b1cd Merge PR #513 from NikitkaRa: Pictures: compress pictures to a target resolution
# Conflicts:
#	crates/engine/src/cmd/mod.rs
#	crates/pptx/tests/roundtrip.rs
#	crates/ui-egui/src/ribbon.rs
2026-10-14 15:36:54 -04:00

49 KiB
Raw Blame History

Where DeckCraft falls short of PowerPoint

Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (interactive-deck clicks in the slide show; previous: minor (3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101; previous: minor, core-workflow alpha gate added; stage stays alpha; before that: major, first itemized gap list; full re-measure against PowerPoint for Mac 16.113.4 and the open GitHub issues)) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (gap 3 shrinks to media options and rewind: comment threads round-trip now, #70; 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101; previous: minor, core-workflow alpha gate added; stage stays alpha; before that: major, first itemized gap list; full re-measure against PowerPoint for Mac 16.113.4 and the open GitHub issues) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (EMF/WMF rectangle clip regions; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (embedded fonts are read, written and drawn, except MicroType Express subsets; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (WordArt Transform gallery applies a text warp; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (owned PPTX corpus round-trip; notes-master header and footer kept; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (owned PPTX corpus for comments, links, custom shows, groups and inherited placeholders; paragraph defaults and action sounds kept; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (owned PPTX corpus for text effects, body layout, theme effects, fills, bevels and connectors; run effect lists and bevel presets kept; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (owned corpus corpus_media.rs: 3-D model parts and animation bounce end round-trip; the real-deck corpus and #70/#74/#77 stay open) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (chart trendlines round-trip; previous: minor, 3-D bevel, camera and face lighting rendered; IME composition and CJK interface text landed, #101; core-workflow alpha gate added; stage stays alpha; full re-measure against PowerPoint for Mac 16.113.4 and the open GitHub issues) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Insert › Icons places a Lucide stroke set; 3-D models and stock content remain; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Size and Position dialog; previous: minor, 3-D bevel, camera and face lighting) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-14 · Change: minor (six original starter decks on File › New; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (IME composition in a table cell is underlined; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: trivial (Photo Album is one of 28 dialogs; Font, Bullets, Find, Replace Fonts, Action Settings, Print and Insert Object remain; previous: minor, 3-D bevel, camera and face lighting) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: trivial (Edit Photo Album reuses the Photo Album dialog, still 28; Font, Bullets, Find, Replace Fonts, Action Settings, Print and Insert Object remain; previous: trivial, Photo Album counted) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Create New Theme Colors; dialogs 27 → 28; previous: 3-D bevel, camera and face lighting) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Create New Theme Fonts; dialogs 27 → 28; previous: 3-D bevel, camera and face lighting) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Date and Time dialog; 28 dialogs; previous: 3-D bevel, camera and face lighting) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (owned PPTX corpus for more deck kinds; handout-master text kept; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (laser pointer in the slide show; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: trivial (command palette no longer offers Export without a path, #79; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Design ▸ Effects; checklist row stays P so breadth stays 79%; previous: 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Slide Master Preserve and Title/Footers placeholders; checklist letters unchanged, breadth stays 79%, dialogs stay 27; previous: 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (chart trendlines are drawn; previous: minor, chart trendlines round-trip; 3-D bevel, camera and face lighting rendered; IME composition and CJK interface text landed, #101; core-workflow alpha gate added; stage stays alpha; full re-measure against PowerPoint for Mac 16.113.4 and the open GitHub issues) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (animation preview plays on the editor canvas; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (a two-finger twist rotates the selection; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (a trackpad swipe turns the page in the editor and the show; pinch-zoom remains; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Font dialog; previous: minor, 3-D bevel, camera and face lighting rendered) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (Paragraph dialog; previous: minor, Font dialog) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-13 · Last updated: 2026-10-13 · Change: minor (Grid Options dialog; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: minor (WordArt adjust handles drag; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-14 · Last updated: 2026-10-14 · Change: minor (pen pressure scales ink width; tilt, pinch and trackpad gestures remain; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101) · Target: Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Last reviewed: 2026-10-10 · Last updated: 2026-10-13 · Change: trivial (unchanged chart workbooks round-trip, #335; previous: minor, 3-D bevel, camera and face lighting rendered; previous: minor, IME composition and CJK interface text landed, #101; previous: minor, core-workflow alpha gate added; stage stays alpha; before that: major, first itemized gap list; full re-measure against PowerPoint for Mac 16.113.4 and the open GitHub issues) · Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365)

Every known shortfall, one entry each, ranked by how much it stops someone who presents with PowerPoint from switching. This is the work list: pick from the top. Numbers are summarized in target-app-parity.md; the feature-by-feature scores are in parity-checklist.md. Hours are Opus 5.5 agent wall-clock hours including tests (calibration in target-app-parity.md). B marks a gap that blocks beta. None blocks alpha: all six core workflows pass the alpha gate.

When a gap closes, delete its entry, update the parity doc it points to, and add a line to the revision history.

Ranked: the top 15

# Gap Category Beta Hours Doc
1 PPTX corpus is only decks we author (no PowerPoint reference renders) File format B 20–35 file-format-parity.md
2 Data loss and crashes on common paths (#60, #40, #59) Stability B 6–12 this file
3 PPTX round trip drops media options and rewind (#74, #77) File format B 2–4 file-format-parity.md
4 SVG pictures don't render (EMF/WMF do) File format B 6–12 file-format-parity.md
3 PPTX round trip drops comment threads, media options, rewind (#70, #74, #77) File format B 3–6 file-format-parity.md
4 SVG pictures don't render (EMF/WMF do) File format B 4–8 file-format-parity.md
5 No localization: English only Localization B (infra + 5 languages) 55–90 localization-parity.md
6 No printing Feature B 5–8 file-format-parity.md
7 Fonts: only Regular, Bold and Italic faces (#69) Feature B 3–5 ui-parity.md
8 Image paste fails on Windows and Linux (#53) Feature B 2–4 ui-parity.md
9 Presenter view isn't placed on the second display Hardware B 3–5 slideshow-parity.md
10 Animation Pane: thin preview (timeline done); 64 of ~190 effects Feature B (pane) 8–14 animation-parity.md
10 Animation Pane: no timeline; preview is the whole slide, not from the selected effect; 64 of ~190 effects Feature B (pane) 10–16 animation-parity.md
11 Charts: data grid editing, elements, chartex types Feature B (data, elements) 12–20 parity-checklist.md
12 Format Shape pane thinner than PowerPoint's UI/UX B 6–10 ui-parity.md
13 No native macOS menu bar UI/UX B 3–5 ui-parity.md
14 PDF export rasterizes slide artwork File format B 5–8 file-format-parity.md
15 Slides rasterize on the CPU; no performance baseline Performance / hardware 15–30 hardware-parity.md

Stability

Close discards an edited presentation without asking (#60)

  • Evidence: issue #60; quitting prompts, file.close doesn't. PR #75 is open.
  • Impact: silent data loss on a common path. The worst kind of bug for a presentation app.
  • Estimate: 0.5–1 h (land and test #75). Beta blocker.

Startup crashes on some Windows GPUs (#40, #59)

  • Evidence: #59 (Intel UHD, access violation in igvk64.dll during Vulkan enumeration), #40 (WordCraft, GridCraft and DeckCraft all fail on one Windows 11 PC). The DX12 default (#16) fixed AMD's atio6axx.dll crash only.
  • Impact: the app never opens for those users.
  • Estimate: 4–8 h (backend probing outside the process or a safe-mode fallback, a software renderer path). Needs a tester with the hardware. Beta blocker.

Soak testing is engine-only

  • Evidence: crates/engine/src/soak_tests.rs runs seeded random command sequences over a ~100-slide deck (validity, selection, undo/redo exactness, bounded undo, save/reopen in both formats every 100 steps); DECKCRAFT_SOAK_STEPS runs it long. It found a chart clamp panic that blanked whole slides. Still missing: UI-level (kittest) soak, memory and timing budgets.
  • Impact: long-session crash rate is now sampled in CI; slowdowns are not measured.
  • Estimate: 2–4 h left.

Soak testing is new

  • Evidence: crates/ui-egui/src/ui_soak_tests.rs drives the whole window with seeded random clicks, drags, keys (plain, Ctrl, Shift), typing and scrolling over the sample deck, checking document validity, bounded undo/journal/thumbnail/texture caches, zero caught command and render panics (Session::panics_caught, deckcraft_render::panics_caught) and a mean frame under 250 ms; 4 × 3000-action runs are clean. Engine-level command soak: PR #502.
  • Impact: long-session crash rate is sampled in CI; RSS is not measured directly.
  • Estimate: 1–2 h (RSS sampling per platform).

File formats

Detail in file-format-parity.md.

PPTX corpus is only decks we author

  • Evidence: crates/pptx/tests/corpus.rs builds decks in this repo and checks open → save → reopen (package parts and text): a talk with a table, chart, picture, link and comment, and a notes master with a header and footer. Saving used to replace that notes master with an empty one, so "Acme review" and "Do not circulate" disappeared; they are kept now. There is still no larger corpus and no reference render from PowerPoint.

PPTX has never met a corpus of real decks

  • Evidence: PPTX tests use decks DeckCraft generates. An owned check (crates/pptx/tests/corpus_elements.rs) now opens, saves and reopens comments, hyperlinks and actions, custom shows, grouped rotated objects, and placeholders that inherit position, geometry and text from the layout. That check found paragraph default run properties (defRPr, including a link) and action sounds (the sound itself, stop-previous, and a custom show's "Show and return") were dropped on save; they are kept now. Embedded fonts, comment threads (#70), media options (#74) and animation rewind (#77) are still open, and there is no corpus of decks from outside this repo. No reference renders from PowerPoint exist to compare against.
  • Evidence: PPTX tests use decks DeckCraft generates. An owned check (crates/pptx/tests/corpus_style.rs) now opens, saves and reopens text effects (gradient, outline, shadow, glow, inner shadow, reflection and soft edge), autofit, columns, vertical and RTL text, tab stops, line spacing, theme effects, gradient and pattern fills, 3-D bevels and connectors. That check found a run's inner shadow, reflection and soft edge were dropped, and a bevel preset with no kept sp3d was not written back; both are kept now. Comment threads (#70), media options (#74), animation rewind (#77) and embedded fonts are still open, and there is no corpus of decks from outside this repo. No reference renders from PowerPoint exist to compare against.
  • Evidence: every PPTX test (crates/pptx/tests, 30 tests, plus corpus_media.rs) uses decks DeckCraft generates; the 2026-10-07 alpha checklist already listed this as open. No reference renders from PowerPoint exist to compare against. corpus_media.rs opens, saves and reopens SmartArt and OLE kept as XML (no diagram or embedding parts; those stay with #203), audio and video bookmarks and trims, a section holding a hidden slide, slide-number and date fields, ink (saved as freeform lines), .glb 3-D models, and animation repeat, bounce end and triggers. Playback options (#74) and rewind (#77) are still lost.
  • Evidence: every PPTX test (crates/pptx/tests, 30 tests) uses decks DeckCraft generates;
  • Evidence: every PPTX test (crates/pptx/tests) uses decks DeckCraft generates; the 2026-10-07 alpha checklist already listed this as open. No reference renders from PowerPoint exist to compare against. crates/pptx/tests/corpus_themes.rs starts on PowerPoint-shaped XML: themes and two masters with their layouts, shadow/glow/soft-edge/reflection effects, and text and shape hyperlinks and actions (text Mouse Over actions were dropped; now kept). exist to compare against. corpus_charts.rs round-trips one owned slice (a combo chart with data labels and trendlines, a merged table with diagonal borders, text columns, autofit, vertical text and a WordArt warp). That is still a generated deck, not a corpus of real ones.
  • Evidence: crates/pptx/tests/corpus_kinds.rs builds decks in this repo and checks open → save → reopen (package parts and text): tables, charts, animations, media, sections, and several masters and layouts. A handout master with a header, footer, date and slide number used to disappear on save; that text is kept now. There is still no larger corpus and no reference render from PowerPoint.
  • Impact: the main reason to switch is "open my PowerPoint decks". Fidelity on real decks (corporate templates, SmartArt, chartex charts, embedded fonts, EMF) is still mostly unknown.
  • Estimate: 20–35 h: grow the owned corpus in storytold/photocraft-corpus style (craftrules standards/test-corpora.md), add render checks, have the owner open outputs in PowerPoint, fix what breaks. Beta blocker.

Round trip loses media playback options and animation rewind (#74, #77)

  • Evidence: issues filed 2026-10-10 by an automated reviewer; media playback options and the animation rewind flag aren't written back. Comment threads left with #70: the writer now emits the p188 modern part next to the legacy one.
  • Impact: a deck opened and saved silently loses show behaviour.
  • Estimate: 2–4 h. Beta blocker.

SVG pictures don't render

  • Evidence: crates/render/src/images.rs decodes through image 0.25 (PNG, JPEG, WebP, GIF, TIFF, BMP), and EMF/WMF through deckcraft-metafile (ported from WordCraft: paths, fills, pens, pattern and hatch brushes, bitmaps and text; rectangle clip regions are applied, EMF+ only pictures play their EMF+ records). Nothing reads SVG; PowerPoint's Insert Icons stores SVG with a PNG fallback.
  • Impact: SVG icons show only their raster fallback, and SVG files can't be inserted.
  • Estimate: 4–8 h (an SVG renderer through resvg-style crates).

Template, slide-show and macro variants are saved as plain .pptx

  • Evidence: crates/pptx/src/write/mod.rs always writes the presentationml.presentation.main+xml content type; .potx/.ppsx open, .pptm/.potm/.ppsm aren't recognised.
  • Impact: a template saved as .potx isn't a template to PowerPoint; macro decks can't be opened even to view.
  • Estimate: 2–4 h (content types; keep vbaProject.bin untouched without running it).

No legacy .ppt/.pot/.pps import

  • Evidence: PowerPoint for Mac still opens and saves the 97–2003 binary formats (CFBundleDocumentTypes); DeckCraft doesn't read them.
  • Impact: archives of older decks don't open.
  • Estimate: 20–35 h (import only, from the public [MS-PPT] spec). Owner decision whether it's worth it.

No OpenDocument .odp

  • Evidence: PowerPoint opens and saves .odp.
  • Impact: LibreOffice users and public-sector exchange.
  • Estimate: 12–20 h (read and write the common subset).

PDF export rasterizes slide artwork

  • Evidence: crates/pdf places each slide as an image under a selectable text layer, links and bookmarks.
  • Impact: large PDFs; blurry when zoomed or printed.
  • Estimate: 5–8 h (vector paths, fills and text through the PDF writer). Beta blocker.

No printing

  • Evidence: checklist row "Print" is missing; PR #66 (browser print) is open.
  • Impact: handouts and speaker notes are printed in many workplaces.
  • Estimate: 5–8 h (print through the PDF path and each OS's print dialog). Beta blocker.

No video or animated GIF export

  • Evidence: checklist row missing; PowerPoint exports MP4/MOV and animated GIF.
  • Impact: sharing a talk as a video is a common request.
  • Estimate: 10–16 h (render the timeline frame by frame; an H.264 encoder is the hard part, FilmCraft has one to copy).

Embedded MicroType Express font subsets aren't drawn

  • Evidence: p:embeddedFontLst is read and written. A raw TrueType/OpenType face, or one inside an Embedded OpenType wrapper, is loaded and used to draw. A MicroType Express subset (application/x-fontdata with neither form) is kept and written back, and the text still uses a stand-in.
  • Impact: decks that embed a MicroType subset reflow until that face is installed.
  • Estimate: 3–5 h.

Features

Font weights beyond Regular, Bold and Italic (#69)

  • Evidence: #69; the font database maps a family to four faces.
  • Impact: Light, Medium and Semibold headings (common in modern templates) render wrong.
  • Estimate: 3–5 h. Beta blocker.

Image paste fails on Windows and Linux (#53)

  • Evidence: #53 (v0.3.0, Fedora AppImage and Windows).
  • Impact: copy-paste of screenshots is a core workflow.
  • Estimate: 2–4 h. Beta blocker.

Tab inside a text box ends text entry (#78)

  • Evidence: #78.
  • Impact: tab stops and indented lists can't be typed.
  • Estimate: 1–2 h.

Charts: data grid, elements and the newer chart types

  • Evidence: checklist rows "Edit chart data" (P0, partial), "Chart elements" (partial), "Other chart types" (partial); chartex parts (waterfall, funnel, treemap, sunburst, histogram, Pareto, box & whisker) are read, drawn, inserted, edited and saved as chartEx (kept unchanged, else written from the model, with a plain chart fallback). Waterfalls float and total, funnels, treemaps (squarified, nested by level with group banners) and sunbursts (one ring per level) have their own layouts, histograms and Paretos bin their data (count, width or Scott's rule), and box & whisker charts use exclusive or inclusive quartiles with 1.5 IQR whiskers. Region maps are kept (their cached geography too, also through edits) and drawn as value-coloured tiles with a colour scale, since DeckCraft ships no map boundaries. Radar charts are drawn polar (filled or lines), stock charts as high-low lines with close dashes or up/down bars and saved as c:stockChart, and combo charts start as columns with a line. Trendlines round-trip (corpus_charts.rs) and are drawn: linear, exponential, logarithmic, polynomial, power and moving average, with forecast and the equation and R² label. A moving average is drawn with neither label. A combo chart's secondary value axis is read (y2_*, Series.secondary_axis) and is not written back when the chart is rebuilt. An unchanged chart's embedded workbook now survives save (#335); editing the chart still drops it rather than writing a stale spreadsheet.
  • Impact: most business decks have charts; editing their data is routine.
  • Estimate: 12–20 h. Data and elements are beta blockers (6–10 h).

SmartArt editing is shallow

  • Evidence: a SmartArt graphic keeps its outline (Shape.diagram) and has a Text Pane, Add Shape, Promote, Demote, Remove and layout switching (crates/engine/src/cmd/smartart.rs). On .pptx the outline is written as a real diagram (data, layout, quick style, colours and the cached drawing; crates/pptx/src/dgm.rs), and PowerPoint diagrams read their outline from the data model, so they get the Text Pane too. 15 layouts (bullet and block lists, five process, two cycle and a radial, hierarchy, two pyramids, two matrices), four SmartArt Styles and Change Colors (colourful or one accent). Still missing: DeckCraft's own layout definitions are simple (not yet checked in PowerPoint itself); PowerPoint has ~200 layouts, picture layouts and 3-D styles; editing an imported diagram's outline redraws it with DeckCraft's layout; a diagram with no cached drawing isn't drawn.
  • Impact: a PowerPoint diagram edited in DeckCraft changes look.
  • Estimate: 6–10 h.

Animation Pane, effect count and preview

Animations ▸ Preview and the pane's Play All play the current slide's animations on the editor canvas (Escape or a click stops them). Still open: the advanced timeline, starting from the selected effect, and most of the effect gallery. Detail in animation-parity.md. 10–16 h; the pane's timeline is a beta blocker.

  • Evidence: the slide show plays click-triggered animations, keeps each slide's state across visits and ignores shapes an animation has hidden (crates/anim/src/interact.rs). Still open, found by running three classroom game decks (Jeopardy-style boards, hide-and-reveal, score counters): a click on a shape whose action is "play sound" (ppaction://media, 126 and 486 shapes in two decks) does nothing; triggers that start on onStopAudio or begin conditions are not read as triggers; click boxes are the shape's bounding box (a hexagon's corners count) and do not follow a shape that a motion path has moved; the PPTX writer turns every "on click" after the first effect of a trigger into "after previous", so a trigger with several click steps saved from DeckCraft plays all of them at once.
  • Impact: games built around sound effects on buttons, or around a button that counts up with repeated clicks, lose that part when they are saved from DeckCraft or played in it.
  • Estimate: 4–8 h.

Notes and Handout masters

  • Evidence: View ▸ Handout Master and View ▸ Notes Master edit both masters (placeholders, background, a slides-per-page preview for handouts) and PPTX keeps them. Notes pages (view and PDF) place the slide and notes where the notes master does and print its header, date, footer and page number in their own fonts, sizes and colours; PDF handouts print the handout master's. Notes Master view previews the slide in its slide-image placeholder. PDF pages lay master text out with the text engine (wrapping, mixed formatting), and the Notes Page view draws the same layout. Left: the view draws it in the interface font (sizes, colours and weights kept).
  • Estimate: done for beta.

Edit points, text warp, 3-D

  • Evidence: checklist rows "Edit points" (P1 missing), "Text warp transforms" (partial: all 40 prstTxWarp presets render, their adjusts round-trip, and Shape Format ▸ Text Effects ▸ Transform applies one with format.textWarp; still open are adjust handles, and arc/circle placement can differ from PowerPoint by 1–3 % of the path length), "Bevel and 3-D rotation" (partial: bevels, camera presets and rotations and face lighting render as approximations and scene3d/sp3d round-trip as raw XML; no extrusion or side faces, only the three-point rig, and no command or pane to apply 3-D).
  • Estimate: 4–6 h (edit points), 1–2 h (warp adjust handles), 6–10 h (3-D extrusion,
  • Evidence: checklist rows "Edit points" (P1 partial: Edit Points converts a shape to a freeform, vertices drag, Ctrl/Cmd-click adds or deletes; no point types or Bézier control handles), "Text warp transforms" (partial: all 40
  • Evidence: checklist rows "Edit points" (P1 partial: Edit Points converts a shape to a freeform, vertices drag, Ctrl/Cmd-click adds or deletes, smooth/straight/corner points and Bézier handles; no Straight/Curved Segment or Open/Close Path), "Text warp transforms" (partial: all 40 prstTxWarp presets render and their adjusts round-trip, but there is no Transform gallery or command to apply one, no adjust handles, and arc/circle placement can differ from PowerPoint by 1–3 % of the path length), "Bevel and 3-D rotation" (partial: bevels, camera presets and rotations and face lighting render as approximations and scene3d/sp3d round-trip as raw XML; no extrusion or side faces, only the three-point rig, and no command or pane to apply 3-D).
  • Estimate: 1 h (edit points: segment types, open/close path), 2–4 h (warp gallery, command and handles), 6–10 h (3-D extrusion, render as approximations and scene3d/sp3d round-trip as raw XML; extrusions draw their sides under turned cameras, each lit for its own normal; the preset light rigs, rig directions and materials shade bevels and sides approximately (fitted to PowerPoint for three-point/matte only); contours draw as a band round the face outline (not round the extruded silhouette); no command or pane to apply 3-D).
  • Estimate: 4–6 h (edit points), 2–4 h (warp gallery, command and handles), 1–2 h (fitting the other rigs and materials to PowerPoint renders), plus the Format Shape page. prstTxWarp presets render, their adjusts round-trip, and a selected warp shows a yellow handle per adjust that dragging sets; still no Transform gallery or command to apply one, and arc/circle placement can differ from PowerPoint by 1–3 % of the path length), "Bevel and 3-D rotation" (partial: bevels, camera presets and rotations and face lighting render as approximations and scene3d/sp3d round-trip as raw XML; no extrusion or side faces, only the three-point rig, and no command or pane to apply 3-D).
  • Estimate: 4–6 h (edit points), 1–2 h (Transform gallery and command), 6–10 h (3-D extrusion, rigs and materials, Format Shape page).

Proofing: spelling, thesaurus, AutoCorrect

  • Evidence: review.spelling checks a small built-in list of frequent misspellings (crates/engine/src/cmd/review.rs); no dictionaries, no thesaurus. AutoCorrect has PowerPoint's options (two initial capitals, sentence and day capitals, caps lock, fractions, an editable replace list); no AutoFormat of ordinals or automatic bulleted lists, no undo of a single correction.
  • Estimate: 8–14 h (Hunspell-format dictionaries under an open licence per language).
  • Evidence: review.spelling checks with Hunspell-format dictionaries the system already has (crates/engine/src/spell.rs: affixes, cross products, one level of continuation, compounds, case rules, suggestions), each run in its own language (lang from PPTX), with a user dictionary for Add to Dictionary. Red squiggles on the current slide come from a worker thread, with a context menu to correct, ignore or add; table cells and speaker notes are squiggled too, each with a right-click menu; repeated words (the the) are flagged with Delete Repeated Word; Review › Language marks the selection's proofing language or Do Not Check Spelling (lang/noProof round-trip in PPTX). No grammar checking. The web build checks on the UI thread a few milliseconds per frame. None ship with DeckCraft, so without one installed (always on Windows and the web) only a short list of common misspellings is found. Thesaurus (#549) and AutoCorrect (#521) have open PRs.
  • Estimate: 1–2 h (bundle openly licensed dictionaries).

Equations

  • Evidence: checklist row missing; PR #55 (OMML editor, +10.5k lines) is open.
  • Estimate: 3–6 h to review, land and round-trip.

Smaller missing rows

Zoom (summary/section/slide, 6–10 h), reuse slides pane with thumbnails (1–2 h; slide.reuse inserts from a file), laser pointer (1–2 h), transition sounds (1–2 h), artistic effects (3–6 h for the other 15 of 22; 7 approximated and round-tripped), remove background (6–10 h; needs a model or a classical matte), insert screenshot (2–3 h), record audio/screen and record slide show (8–12 h), compare presentations beyond slide-level accept (reject, per-object accept, markers on the slide: 3–5 h), password protection (4–6 h, ECMA-376 agile encryption), ink to shape/text (6–10 h), 3-D models and stock content (6–10 h; Insert › Icons places a Lucide stroke set).

UI/UX

Detail in ui-parity.md.

  • No native macOS menu bar. menus::menu_tree() exists but nothing installs it. 3–5 h. Beta blocker.
  • Format Shape pane thinner than PowerPoint's (Fill/Line/Effects/Size/Text Box pages, picture and texture options, 3-D). 6–10 h. Beta blocker.
  • File tab depth (#76 landed the Backstage): no online templates, cloud places, printer choice, video/GIF/CD exports or document protection. 4–8 h for the parts that need no cloud.
  • Window chrome (#71 macOS controls misaligned, #26 GNOME title bar, #41 system light/dark). 2–4 h.
  • Icon consistency across Craft apps (#73, #56). 2–4 h; coordinate in craftrules.
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Font, Find/Replace dialog,
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Font, Bullets and Numbering, Find/Replace dialog, Replace Fonts, Action Settings, Print, Insert Object…). 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Font, Bullets and Numbering, Find/Replace dialog, Replace Fonts, Action Settings, Print, Insert Object…). Size and Position is one of the 28. 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Photo Album is one of them). Still missing Font,
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Photo Album is one of them; Edit Photo Album reopens it). Still missing Font, Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print, Insert Object…. 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60. Create New Theme Colors (Design › Colors › Customize Colors…) edits the open master's twelve theme colours, not a saved library of named schemes. Still missing: Font, Bullets and Numbering, Find/Replace dialog, Replace Fonts, Action Settings, Print, Insert Object. 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60. Create New Theme Fonts (Design › Fonts › Customize Fonts…) edits the open master's heading and body latin faces and the scheme name. It is not a saved library of theme fonts, and it does not pick East Asian or complex-script faces. Still missing: Font, Bullets and Numbering, Find/Replace dialog, Replace Fonts, Action Settings, Print, Insert Object. 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60 (Font, Bullets and Numbering, Find/Replace dialog, Action Settings, Print, Insert Object…). 8–14 h.
  • Dialogs: 30 dialogs vs PowerPoint's ~60 (Font, Find/Replace dialog, Replace Fonts, Print, Insert Object…). Size and Position, Bullets and Numbering, Action Settings and Date and Time are in. 8–14 h.
  • Dialogs: 28 dialogs vs PowerPoint's ~60. The Font dialog is in (family, size, style, underline, colour, strikethrough, baseline, caps, character spacing, one undo step). Still missing: Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print, Insert Object…. 6–12 h.
  • Dialogs: 29 dialogs vs PowerPoint's ~60. The Font dialog and the Paragraph dialog are in (Paragraph: alignment, first-line and hanging indents, spacing before/after, line spacing, and a Tabs dialog, each OK one undo step). Still missing: Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print, Insert Object…. 4–8 h.
  • Command palette defaults to an Export entry that fails (#79). 0.5 h.

Hardware

Detail in hardware-parity.md.

  • Presenter view isn't placed on the second display; the show doesn't pick the projector. 3–5 h. Beta blocker.
  • CPU slide rasterization (vello_cpu); PowerPoint renders on the GPU. 12–20 h (vello hybrid or wgpu path).
  • Software-only video decode; PowerPoint uses VideoToolbox/Media Foundation. 8–14 h (copy FilmCraft's hardware decode).
  • No pen pressure or tilt for ink; no pinch-zoom (it does not keep the point under the pointer). A two-finger twist does rotate the selected shapes. 3–6 h.
  • No pen pressure or tilt for ink; no pinch-zoom. A trackpad swipe turns the page when the slide fits the window, and during the show. 2–4 h for pinch-zoom.
  • Pen pressure scales ink width when the pointer reports it (a mouse or a missing reading stays at the pen width; a stroke saved as a flat 0.5 still draws at the pen width). Tilt is not read. No pinch-zoom or other trackpad gestures. 2–4 h.

Localization

Detail in localization-parity.md.

  • English only, no string catalog (#15, #30; Ukrainian PR #34 open). PowerPoint for Mac ships 26 languages. Infrastructure 8–14 h, then 3–16 h per language plus native review. Beta needs the infrastructure and at least Simplified Chinese, Spanish, French, German and Japanese (~30–45 h).
  • Hangul in the interface needs an installed Korean font (#101). craft-fonts has no Korean face (Noto CJK is excluded by the asset policy), so the web build draws Korean file names, notes and outline text as boxes; desktop borrows Malgun Gothic, Apple SD Gothic Neo or Noto Sans CJK. Adding an openly licensed Korean face (e.g. Nanum Gothic, OFL) to craft-fonts: 1–2 h.
  • UI isn't mirrored for right-to-left languages. 6–10 h.
  • Browser build draws Arabic and Hebrew as missing-glyph boxes in exports (#81). 1–2 h.

Performance

  • Baseline measured, not compared. cargo xtask bench (and deckcraft-cli bench FILE) times open, per-slide render, save, PPTX round trip and PDF export, and peak memory, against a saved baseline; show frame rate isn't measured and there are no PowerPoint numbers to set beside it. 2–4 h.
  • Morph aligns outlines every frame (#67, PR open). 1 h.

Ecosystem

  • Six original starter decks; PowerPoint's large template gallery remains. File › New and the start screen offer Briefing, Lesson, Pitch, Field Notes, Quarterly and Evening Talk (file.new {template}), each a few slides on one of our themes. Dozens of further offline designs, and any online gallery, are still absent. 4–8 h for a larger original set (asset policy: our own designs only).
  • No add-ins or VBA. Out of scope by policy; MCP/CLI automation is the alternative.

AI features

  • No Designer, Copilot, Speaker Coach, live subtitles or Translate. All are Microsoft cloud services; an offline rule-based Designer is in the catalogue (P2). Local models (speech-to-text for subtitles, translation) need an owner decision on licensed models. 20–40 h.

Revision history

Date Change Summary
2026-10-13 minor EMF/WMF rectangle clip regions (INTERSECTCLIPRECT, EXCLUDECLIPRECT, EXTSELECTCLIPRGN) limit later drawing. EMF+ records remain
2026-10-13 minor Embedded fonts are read, written and drawn (TrueType, OpenType, Embedded OpenType). The gap is now MicroType Express subsets, which are kept but not drawn
2026-10-13 minor WordArt Transform gallery: Shape Format ▸ Text Effects lists the 40 presets and No Transform; format.textWarp applies one (adjust handles still open)
2026-10-13 minor Edit Points: smooth/straight/corner point types, Bézier handle dragging, right-click point menu, no selection box while editing
2026-10-13 minor Edit Points: convert to freeform, drag, add and delete vertices (shape.editPoints, shape.movePoint, shape.addPoint, shape.deletePoint); left: point types and control handles
2026-10-13 minor Owned PPTX corpus round-trip (parts and text). Notes-master header and footer text is kept; the corpus gap is now a larger set and PowerPoint reference renders
2026-10-13 minor Owned PPTX corpus for comments, links and actions, custom shows, rotated groups and inherited placeholders. Paragraph defRPr and action sounds kept. Embedded fonts and #70/#74/#77 stay open
2026-10-13 minor Owned PPTX corpus for text effects, body layout, theme effects, fills, bevels and connectors. A run's inner shadow, reflection and soft edge, and a bevel preset with no kept 3-D XML, are kept. #70, #74, #77 and embedded fonts stay open
2026-10-13 minor Benchmark suite (cargo xtask bench, deckcraft-cli bench): the performance gap is now frame rate and a PowerPoint comparison
2026-10-14 minor Owned corpus corpus_media.rs: 3-D model parts and animation bounce end now round-trip. The real-deck corpus and #70/#74/#77 stay open
2026-10-14 trivial Corpus slice: themes, masters, effects and links; text Mouse Over actions round-trip
2026-10-14 trivial A moving average trendline is drawn without an equation or an R² label
2026-10-14 minor Chart trendlines are drawn (six types, forecast, equation and R²). The charts gap stays open for the data grid, chartex and secondary-axis export; the real-deck corpus gap stays open
2026-10-14 minor Chart trendlines round-trip. The real-deck corpus gap stays open; secondary-axis export and drawing trendlines stay in the charts gap
2026-10-14 trivial 3-D contours
2026-10-14 trivial 3-D light rigs and materials; extrusion sides lit per side
2026-10-14 trivial 3-D extrusions draw their sides under turned cameras
2026-10-14 minor Insert › Icons places Lucide 1.56.0 stroke icons as custom shapes. The checklist row stays missing until 3-D models and stock content exist
2026-10-14 minor Size and Position dialog landed (position, size, rotation, scale, lock aspect, one undo). The dialog gap remains Font, Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print, Insert Object and the rest of the ~60
2026-10-14 minor File › New has six original starter decks; a large template gallery is still open
2026-10-14 minor An IME composition in a table cell is underlined in place, and the caret and candidate window sit in that cell
2026-10-14 trivial Photo Album dialog counted (28 vs ~60). Font, Bullets, Find, Replace Fonts, Action Settings, Print and Insert Object remain
2026-10-14 trivial Edit Photo Album reuses the Photo Album dialog (still 28 vs ~60). Font, Bullets, Find, Replace Fonts, Action Settings, Print and Insert Object remain
2026-10-14 minor Create New Theme Colors is in (dialogs 27 → 28). Font, Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print and Insert Object stay open
2026-10-14 minor Create New Theme Fonts is in (dialogs 27 → 28): heading and body latin on the open master. Font, Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print and Insert Object stay open
2026-10-14 minor Insert › Date and Time dialog. Dialog count 27 → 28; Font, Bullets and Numbering, Find/Replace, Replace Fonts, Action Settings, Print and Insert Object are still missing
2026-10-13 minor Artistic effects: 7 of 22 (blur, pencil grayscale, line drawing, film grain, cutout, glow edges, photocopy) applied, removed and round-tripped (a14:imgLayer)
2026-10-14 trivial Notes Page view draws master text wrapped, as the PDF does
2026-10-14 trivial PDF master header/footer text wraps and keeps mixed formatting
2026-10-14 trivial Notes Master slide preview; master header/footer text keeps its formatting
2026-10-14 minor Notes pages and PDF handouts follow the notes and handout masters
2026-10-14 minor Notes Master view: the masters gap is now notes pages and PDF handouts following the masters
2026-10-14 minor Handout Master view: the masters gap is now the Notes Master view and handout text in PDF
2026-10-13 minor Owned PPTX corpus for tables, charts, animations, media, sections and masters. Handout-master text is kept; the corpus gap is now a larger set and PowerPoint reference renders
2026-10-13 minor Laser pointer in the slide show (checklist row Partial). Highlighter, eraser and a laser driven from presenter view remain
2026-10-13 trivial Command palette skips commands that need a value, so Export opens the dialog (#79)
2026-10-14 minor Design ▸ Effects applies a named effect scheme. The checklist row stays P, so breadth stays 79%. Dialogs stay 27
2026-10-14 minor Slide Master Preserve and Title/Footers placeholders. Checklist letters unchanged (breadth stays 79%); dialogs stay 27
2026-10-13 minor AutoCorrect options: case rules, fractions, ellipsis, a larger built-in list and your own entries (text.autocorrect, Tools ▸ AutoCorrect)
2026-10-14 trivial Notes spelling menu, Review › Language with Do Not Check Spelling, repeated words
2026-10-14 trivial Spelling squiggles in table cells and notes, and on the web
2026-10-14 minor Spelling squiggles while typing, Add to Dictionary, per-run languages and compounds
2026-10-14 minor Spelling checks with installed Hunspell dictionaries and suggests corrections
2026-10-13 minor Animation preview plays the current slide on the editor canvas; the pane gap keeps the timeline, preview from the selected effect, and the remaining effects
2026-10-14 minor A two-finger twist rotates the selected shapes. Pinch-zoom is still open
2026-10-14 minor A trackpad swipe (and the mouse wheel, in the show) turns the page. Pinch-zoom remains
2026-10-14 minor Paragraph dialog sets alignment, indentation, spacing and line spacing in one step; its Tabs… button opens a standalone Tabs dialog
2026-10-14 minor Font dialog sets typeface, size, style, underline, colour, strikethrough, baseline, caps and character spacing in one step
2026-10-13 minor Grid Options dialog sets spacing, snap and whether gridlines and guides show; the on-screen grid follows that spacing
2026-10-13 minor WordArt adjust handles: a selected text warp shows one yellow handle per adjust, and dragging it sets that guide value (gallery and command still open)
2026-10-14 minor Pen pressure scales ink width when the pointer reports it; tilt, pinch-zoom and other trackpad gestures remain
2026-10-13 trivial Chart workbook round-trip (#335) noted under the charts gap; editing chart data is still open
2026-10-13 minor Shape, picture and table rendering checked against PowerPoint on ~150 synthetic edge-case slides; 3-D bevels, cameras and face lighting now render approximately (gap narrowed to extrusion, rigs and the 3-D pane)
2026-10-13 minor Interactive decks: triggers, return-to-slide state and click rules landed in the slide show; the remaining pieces are one new entry under Features
2026-10-12 minor IME composition in slide text and notes, and CJK interface text with real glyphs (#101): the IME gap is now Korean on the web and table-cell underlines
2026-10-12 minor EMF/WMF text, pattern and hatch brushes drawn; legacy OLE and ActiveX previews shown; the SVG gap keeps only EMF clip regions
2026-10-12 minor Text warps render (all 40 presets, adjusts round-trip); the warp gap is now the gallery, command and handles
2026-10-10 minor Noted that no gap blocks alpha (core-workflow gate passes)
2026-10-10 major Created: every gap from the 2026-10-10 re-measure and the 16 open GitHub issues, ranked, with beta blockers marked