Repository navigation
Releases: tracyapps/EXP-design
Release list
EXP [design] v2.7 —Gradients, color matrix, patterns, accessibility improvements, and introducing user accounts
EXP [design] v2.7
Version 2.7 / build 18 · October 20, 2026.
More control over color, with handles that stay out of the way
- Mesh fills combine a base color with editable color points. Select a point on
the artwork, move it, change its color and opacity, and shape its spread. - Radial gradients and Mesh points have matching ellipse controls: drag the main
radius to turn and lengthen it, and the second radius to narrow or widen it.
Exact Radius X, Radius Y, and Angle fields support numeric editing. - The paint editor stays open while you work on the canvas. Selected points and
stops keep their color controls in sync, including when palettes are spread
across multiple monitors. - Duotone and Color Matrix effects offer simple color choices plus all twenty
matrix coefficients for fine control over image color and opacity.
Everyday editing refinements
- Editable polygon corner radii and a cleaner path-point context menu.
- Pattern fills repeat seamlessly at fractional positions, with independent
per-fill scale and SVG export. - Pattern fills keep their anchoring through canvas movement and anchor changes;
changing one fill's anchoring no longer changes every use of its shared tile. - Horizontal and Vertical Flip follow canvas axes on rotated artwork, including
triangles and converted paths. - Artboard notes support headings, emphasis and links. Notes Undo works reliably,
and tooltips display their intended text. - Pattern and component source dimensions can be edited directly; detached
windows and reveal commands support a workspace spread across displays.
Export and compatibility limits
Mesh is a base plus layered radial colors, rather than a Bézier patch mesh.
Native and EXP-authored export/re-import paths have focused checks; this does not
promise editable third-party meshes. Rotated gradient HTML uses a scalable,
self-contained SVG image when CSS cannot represent the authored ellipse angle.
External nonuniform CSS resizing can change that angle. Legacy imported Shape
patterns retain their original sizing until explicitly changed to fixed tile size.
Interface and accessibility
- Settings → General links to your optional free EXP account for your profile,
email preferences and beta/feedback choices. Account preferences apply to the
website; app settings and design files are not synced. - Settings → Accessibility offers independent interface text size, larger click
targets and panel help choices. These settings leave document artwork intact. - Layer names use clear, standard macOS system typography. Small interface labels
have stronger contrast, and panel instructions wrap and scroll within their space. - Detached panels have named Collapse/Expand buttons. Artboard and document
controls have clearer names, and hover help preserves VoiceOver navigation.
Extensive automated and owner accessibility testing has been completed, including
VoiceOver, contrast, interface text size, click areas, and save/open. Full Keyboard
Access remains unverified because it could not be enabled on the test Mac.
Accessibility work continues; confirmed barriers reported by users will receive
high-priority investigation and hotfix treatment.
Existing export limits remain: SVG inner-shadow spread can differ from the
canvas, and unsupported imported clipping/effects may need adjustment. Review
exports before delivery; use a raster export where exact rendered appearance is
required. This release does not claim complete fidelity for every external file.
EXP remains usable without an account or paid entitlement. Optional website
accounts, Pro offers and usage collection have separate rollout requirements;
this native update does not announce paid features or enable usage collection.
EXP [design] v2.6 — A smoother canvas, and everyday tools.
EXP [design] v2.6
A smoother canvas, and tools for the everyday work.
This small update focuses on busy design documents: the versions, inspiration
images, complex vectors and walls of icon possibilities you keep around while
working. It also adds a Knife that follows your hand, nested-folder Unite, and
three ways to copy just the appearance you need.
Faster large documents
- Selecting, moving and recoloring large batches avoids repeated layer-tree
searches and individual updates for every icon. - Panning and zooming complex vector walls do less work. Dense path-based pattern
fills use a cached canvas preview while the editable vectors and export remain
intact. - Ruler pointer markers move independently of the artwork, so moving the pointer
with rulers visible no longer redraws the entire canvas.
A Knife that follows your stroke
- Press K, click to select artwork, then draw the cut you want. The cut follows
the path you draw, including bends and closed loops. - Choose what to cut: shapes, lines, paths and images. Choose the layer scope:
top layer, within the group, or all layers/groups. - Mask shapes can be cut too. Image cuts keep the original image and use editable
masks rather than discarding pixels. - Object → Path → Cut with Line keeps straight cuts precise, with a movable,
rotatable preview and keyboard stepping for measurements and angle. - Unite can collect compatible vector shapes from nested folders, so you no
longer have to select every shape individually. Mixed folders stay intact.
Copy exactly the style you need
| Copy / Paste | Shortcut | Includes |
|---|---|---|
| Effects | ⇧⌘C / ⇧⌘V | Effects, opacity and blending |
| Style | ⌥⌘C / ⌥⌘V | Fill, gradients/patterns, stroke and corners |
| Style & Effects | ⌥⇧⌘C / ⌥⇧⌘V | Both together |
Each command keeps its own clipboard. Paint can reach compatible artwork in
nested folders; pasting appearance remains one Undo step.
Small conveniences
- Save a named type style directly from Properties into Design Language.
- Checked and unchecked artboard notes export as proper GitHub-flavored Markdown
task lists in the Handoff Package.
Limits worth knowing
- A cut must cross the artwork or form a closed loop to split a filled shape.
Locked and hidden layers are protected. - Paint attributes apply where the target supports them. Live text supports solid
color and outlines; images and component instances receive whole-layer effects. - Appearance clipboards stay within the current editing window/session.
- Complex pattern previews are a canvas optimization; SVG/export fidelity and
editable pattern sources are preserved.
EXP [design] 2.6 is build 17 and requires macOS 26.2 or later.
EXP [design] v2.5 — Paint, everywhere.
EXP [design] v2.5
Paint, everywhere—and a Sanaa that does the busywork.
EXP [design] 2.5 finishes the paint model: any paint—solid, gradient, or
vector pattern—can now be a fill or a stroke, patterns import from SVG as
live editable tiles, and mask groups export correctly to every surface. Sanaa
learns the cleanup work it was always meant for: bulk restyles, renames,
token application, and spacing normalization as consented, undoable batches.
Patterns, as a first-class paint
- SVG
<pattern>fills import as real, editable pattern paints—the generated
background files designers actually meet round-trip as patterns, not
flattened images or a single flat color. Percentage lengths (width="100%")
and gradienthrefstop inheritance that used to blank these files now
import correctly. - Any shape's fill or stroke can be a pattern (or gradient) from the
inspector's paint editor, and it renders identically on canvas, in SVG, in
the Handoff Package, and in raster export. - Each pattern anchors its own way: artwork-anchored patterns ride the layer
they paint, while imported shape-anchored (objectBoundingBox) patterns
keep their authored behavior—and the choice is per pattern, in the
inspector. - Patterns save into the Design Language, apply from it, and import across
documents. - A vector pattern survives SVG export as a true
<pattern>definition that
browsers and Preview render live—where most professional tools rasterize
pattern swatches on SVG export or drop them entirely.
Strokes are paints now
- Gradient and pattern strokes, on every shape, authored from the same paint
editor fills use—on canvas, in SVG, and through the path geometry of the
Handoff Package. - Documents from every earlier version open unchanged; solid strokes keep
their exact rendering, and Outline Stroke converts a gradient-stroked shape
into an outline carrying the same paint.
Mask groups export as masks
- A masked group now exports masked: SVG gains a real
<clipPath>built from
the authored silhouette, and the semantic HTML handoff clips through the
same silhouette via CSSclip-path—one definition shared by every export
surface. - The shape that defines a mask no longer appears as a real filled shape over
the content in exports. Its fidelity row states whether the clip used its
exact outline or its bounds rectangle.
Sanaa: cleanup and repetitive work
- New consented, undoable batch operations for the tedious parts: restyle
every layer matching a predicate (restyleNodes), apply a Design Language
token by value (applyToken), snap spacing to a scale
(normalizeSpacing), and rename by rule—find/replace, prefix, suffix, or
sequence (renameNodes). - The permission sheet now shows what a batch will do before you allow it:
how many layers change, what scope the request covers, and a plain warning
when a change reaches a component source ("every placement of it updates"). - Every batch reports exactly what it did—matched, changed, skipped, with
sample layer names—and remains one named Undo step. Token application sets
values without creating links, and says so.
Export and workflow fixes
- The export panel remembers format and size separately, with an explicit
scale control (0.5×–4×). - Vector paths with a gradient or pattern stroke export to CodePen and the
Handoff Package with the paint intact.
Honest limits
- An exported mask renders correctly in browsers and Preview, but re-imports
into EXP unclipped until SVGclip-pathimport lands (tracked). - Sanaa bulk operations edit document layers and component sources; the
internals of a placed component instance are never edited by a bulk op—an
instance changes as a whole layer or through its source. - Design tokens omit patterns rather than mislabel them: the W3C token format
has no pattern concept, and extending it would break the format's promise. - Browser rendering remains the SVG conformance target.
EXP [design] 2.5 is build 16 and requires macOS 26.2 or later.
EXP [design] v2.4 — Meet Sanaa.
EXP [design] v2.4
Meet Sanaa—and a vector toolset that grew up.
EXP [design] 2.4 introduces Sanaa, an optional design companion that works from
the live canvas while leaving the designer in control. It also completes the
deferred vector-tool queue, closes several export-fidelity gaps, and smooths out
daily canvas, Layers, and multi-window work.
Meet Sanaa
- Ask Sanaa for a critique, design directions, variations, repetitive work, or
help completing a design directly from the canvas context menu. - Sanaa can inspect the frontmost document and draw editable pages, artboards,
and layers. New work remains ordinary EXP content that can be selected,
changed, saved, reopened, and exported normally. - Existing work is protected by explicit permission. Sanaa asks before changing
it, applies small transactional batches, and leaves each batch as one clearly
named Undo step. - A dedicated panel streams the conversation and activity, identifies connected
agents, highlights affected canvas objects, and provides Select and Go actions.
The full response reader renders selectable Markdown in a normal resizable
window. - Structured critique reports organize findings in a numbered rail. Show on
canvas jumps to the exact layer; Explore places the finding back into the
composer for review without sending or changing anything automatically. - Critiques can use measured document facts for contrast—including bounded
sampling over gradients—text size, target size, spacing, fonts, component
roles, relationships, and instance overrides. Sanaa distinguishes measured
facts, estimates, and items EXP cannot assess rather than claiming blanket
compliance. - A bundled, versioned design-knowledge pack grounds critiques and directions in
the document's own visual language. A separate etiquette guide teaches any
connected agent to use stable IDs, ask about placement, reuse Design Language
tokens, avoid unrequested deletion, and fail honestly. - A guided setup flow covers in-app Codex, Claude Code, Claude Desktop, generic
MCP clients, and the choice to use no assistant at all.
Sanaa is off by default. EXP ships no language model, subscription, or API key.
The in-app conversation uses the signed-in local Codex runtime; external MCP
clients can use EXP's local canvas bridge under their own provider and privacy
settings. Conversation access and permission to change a canvas remain separate.
Better paths and drawing tools
- The Pencil tool turns freehand strokes into ordinary editable Bézier paths,
with a fidelity control that meaningfully changes the fit. - Direct Select moves the whole object when no anchors are selected, while
anchors and handles still take priority. - Pen handles keep smooth symmetric pairing by default and can be broken with
Option for corner work. - Live editable text can carry a real outline in the canvas, semantic HTML, and
SVG. - Convert to Outlines, Convert to Path, Outline Stroke, Fill, and Stroke work
recursively through groups and mixed selections while preserving hierarchy and
committing one undo step. - Placed SVG dash arrays reconstruct EXP's editable Dash and Dot patterns, and
those patterns round-trip through SVG.
Canvas and workspace fixes
- Moving path points refits their object bounds so hit testing, selection,
shadows, and paint bounds follow the visible geometry. - Layers selection immediately receives arrow-key nudges, and the persistent
Auto-select control supports moving a selected object beneath overlapping
artwork. - Reveal in Layers and Expand or Collapse All now target the live Layers surface
after docking, floating, collapse, and document changes. - Floating trays return above document windows on every display but no longer
cover EXP popovers, menus, field tips, or an active Sanaa response reader. - Automatic artboard creation, paste, Duplicate, and Sanaa placement avoid loose
visible artwork on the wall while preserving intentional explicit placement.
Export fidelity
- Noise and dissolve effects now render through PNG, JPEG, and PDF export instead
of disappearing. - Oversized layer blurs degrade in resolution instead of silently dropping the
effect. - Transparent gradient falloff retains smooth alpha through raster export, and
the repaired effect path closes two PDF compositing errors found while testing
layered production artwork. - Existing SVG, semantic HTML, design-token, CodePen, Handoff Package, import,
component, and canvas-page workflows remain covered by the release regression
suite.
Honest limits
- Sanaa needs a supported signed-in local agent host. Claude Desktop and other
external MCP clients use copyable setup rather than a bundled one-click
extension in this release. - A rare stack of saturated transparent radial gradients, opacity, and certain
blend modes can still produce a colored ring in raster export. The common
opaque/stepped gradient failure is fixed; the remaining production edge case
is tracked for a fixture-led follow-up. - SVG export still cannot represent inner-shadow spread on every arbitrary
silhouette. EXP keeps the value in the document and reports the limitation. - Browser rendering is the SVG conformance target. Preview and browsers render
EXP's dashed SVG correctly; some Illustrator versions may interpret the same
file differently. - A live text outline is not preserved by Convert to Outlines; that conversion
remains separate from the editable live-text stroke feature.
EXP [design] 2.4 is build 15 and requires macOS 26.2 or later.
EXP [design] v2.3 — A faster, calmer everyday canvas.
EXP [design] v2.3
A faster, calmer everyday canvas.
EXP [design] 2.3 is a broad workflow release: fewer missed clicks, selection
geometry that agrees with what you see, workspaces that return to the right
screens, faster font discovery, direct gradient editing, real line-end controls,
and an Inspector that is easier to read and harder to misclick.
This release grew through seven owner-tested waves. The completed interaction,
workspace, type, gradient, line, accessibility, and interface work ships now;
the remaining lower-priority vector/effect queue is deliberately deferred to
2.4 rather than holding back the verified improvements.
Canvas interaction and selection
- The canvas accepts the first click after focus moves to it.
- Option-drag duplication no longer depends on unforgiving key/mouse timing.
- Gradient stops, path points, and handles have more reliable hit targets, and
keyboard tool switching no longer loses common shortcuts. - Shift constrains new shapes and frames to a square from the start.
- Selection and transform boxes use visible ink bounds, including outside
strokes, while resize math still writes the underlying geometry correctly. - Nested and transformed group selections keep their resize/rotate handles.
- A dedicated Snap to whole pixels preference prevents fractional resize drift.
- Point selections share the same transform-box behavior as object selections.
- Artboard-bound snapping includes the artboard walls with a subtle default
pull, while preserving deliberate movement past a boundary.
Workspaces built for real monitors
- Save, name, update, rename, delete, and switch complete workspace presets.
- Presets restore panel positions, sizes, contents, collapse state, workspace
mode, and multi-monitor placement; missing displays clamp every window back
onto an available screen. - Workspace mode stays consistent across every open document window.
- Place panel groups side by side, pause at the insertion indicator to glue
them, move the connected group together, and pop them apart explicitly. - Connected panels preserve their independent positions and heights instead of
being merged into one oversized window.
Font discovery and text memory
- The font picker is now a taller, active-display-aware browser instead of a
short fixed menu. - Search one previewed font list and filter it through an optional icon rail:
All Fonts, Fonts Used in this document, Recent, and macOS font categories. - Filters are mutually exclusive, so two active facets cannot silently filter
every font away. Counts, empty states, hover names, keyboard traversal, and
VoiceOver state/result announcements are included. - Recent fonts persist across sessions; Fonts Used is derived from the current
document, reusable sources, overrides, and saved type styles. - New point text and text boxes remember the last concrete font, size, and color
used while typing or editing, across documents and relaunches. - Line-height values convert cleanly between units and arrow-key stepping follows
the selected unit.
Lines and gradients on the object
- Lines and open paths now have whole-stroke Flat, Round, or Square caps plus
independent start/end arrow markers. - Arrow bases sit on the authored endpoint and their points project outward;
the same geometry is used by the canvas, raster/PDF export, SVG export, and
SVG re-import. - Linear gradients expose on-canvas endpoints and stops. Add a stop anywhere on
the gradient line—even over empty canvas—without changing the visible color. - Drag stops and endpoints directly; edit a stop's color and position from the
existing color popover; copy/paste stops at the pointer; or save a stop color
directly to the Design Language. - Canvas and Inspector share the selected stop. Changing the Inspector angle
rotates explicit gradient endpoints around their midpoint while preserving
the gradient's physical length.
A clearer, more accessible Inspector
- Choose Compact, Standard, or Large interface type in Settings; the preference
applies to docked panels, floating trays, source windows, and Settings. - Dropdowns use one measured high-contrast boundary treatment in light and dark
appearances, including Increase Contrast. - Horizontal and Vertical flip actions are named and visible in the transform
hierarchy. Align-to and Distribute remain spatially separated. - Text case is an exclusive, arrow-key-operable icon control with independent
accessible names and a non-color-only selected state. - Effect rows can collapse to one line while retaining enable, effect type, a
live settings summary, and the actions menu. Duplicate and destructive Remove
are separated and available through Inspector, context, and Edit-menu routes. - Tooltips now support hover and keyboard focus, remain hoverable, dismiss with
Escape, yield immediately when the pointer reaches another control, and offer
Full, Standard, or Minimal visible detail. Holding Option temporarily reveals
the full explanation without changing accessible names or hints. - The committed accessibility control audit records official pattern sources,
accessible names, tooltip copy, and measured contrast receipts.
Text, Layers, effects, and performance fixes
- Multi-selection dragging in Layers moves the whole selection and restores it
in one undo. New groups stay at the intended stack position, and locked layers
offer an explicit unlock action. - Entering a canvas text node selects its existing contents for quick replacement
while a subsequent click still places a precise caret. - Spread values that cannot yet preview on arbitrary silhouettes remain visible
and continue to round-trip instead of being silently discarded. - Idle raster content no longer repeatedly flips between sharp and blurry states.
- Existing export, import, component, Handoff Package, canvas-page, and local
read-only agent workflows remain intact.
Honest interoperability notes
- Browser rendering is the SVG conformance target. macOS Quick Look/Preview and
some versions of Illustrator or Affinity may interpret nested transforms and
SVG markers differently even when the file renders correctly in a browser. - Placed SVG
stroke-dasharrayfidelity is a separately tracked import bug and
is not represented as fixed in this release. - Arbitrary-silhouette shadow spread, direct-select whole-object movement, mixed
Create Outlines, live-text outlines, Pencil, balanced handles, and the remaining
Add-to-Design-Language entry points are deferred to 2.4.
EXP [design] 2.3 is build 14 and requires macOS 26.2 or later.
EXP [design] v2.2 — Bring rendered components onto the canvas.
EXP [design] v2.2
Bring rendered components onto the canvas.
EXP [design] 2.2 adds a bounded path from rendered web work to editable native
layers. Import a local HTML/CSS page, a Chrome-saved page package, a published
static Storybook build, or a CodePen export without asking EXP to install
dependencies or run a repository build. The result is ordinary editable EXP
work, accompanied by a source receipt and an honest Import Report when the
browser and canvas models do not match exactly.
This release intentionally stops at the rendered state it can observe. It does
not claim source-code round-tripping, rebuild interactive component logic, or
turn EXP into a browser or prototyping environment.
Editable local HTML and CSS import
- Choose a local entry HTML file and one or more Phone, Tablet, or Desktop
viewports; each selected viewport becomes an editable artboard. - Import Chrome's complete-page save format, including its sibling resource
folder, through the same bounded local path. - Preserve rendered boxes, text, images, inline and local SVG, gradients,
borders, per-corner radii, opacity, blend modes, shadows, layer blur,
clipping, generated content, and supported pseudo-elements as native EXP
structures where the source allows it. - Retain semantic roles, accessible names, authored
aria-*values, heading and
paragraph intent, links, and accessibility-only text without inventing
interaction states. - Use the browser's measured layout and computed styles, including media-query
differences, installed fallback-font metrics, and explicit or normal line
height. - Keep the complete import as one undoable document change.
The importer runs in a short-lived, non-persistent WebKit session. It serves
only the selected local package, blocks external network/file navigation, checks
symlink boundaries, and enforces time, file-count, and payload limits.
Static Storybook builds
- Choose a published/static Storybook folder containing its generated catalog
and isolated story renderer; EXP never runs npm, a framework compiler, or a
build script. - Search the catalog and select a bounded set of stories before rendering.
- Import each story at one or more viewports with title, story name, ID, tags,
source path, build metadata, initial args, and consumed-resource receipts. - Preserve visible portal content, play-function final states, clipped content,
accessibility-only labels, external SVG sprites, and CSS-mask icons where the
generated build exposes them.
The measured v2.2 compatibility matrix covers real published builds from Vue 3
with webpack / Storybook 7, React + Vite / Storybook 10, Angular + webpack /
Storybook 8, Svelte + Vite / Storybook 8, and light-DOM Web Components + Vite /
Storybook 10. These are evidence-backed compatibility rows, not a claim that
every Storybook version, framework, add-on, or story will import perfectly.
CodePen handoff in both directions
- Send the current artboard to a new CodePen through CodePen's supported Prefill
flow, with a local review step before anything is transmitted. - Import a CodePen 2.0 exported ZIP by rendering only its last successful
browser-readydist/output. - Preserve
src/, processor/Block configuration, file paths, sizes, and hashes
as non-executed provenance for future handoff work. - Reject traversal, symlinks, encryption, ambiguous package roots, unsupported
compression, and over-limit archives.
Source receipts without hidden code execution
Imported work now carries a hidden, versioned CodeBridgeManifest separate from
ordinary Notes and canvas nodes. It records connector and source identity,
framework/build metadata, resource hashes, bounded opaque source, DOM bindings,
semantic behavior receipts, and the import baseline. Credentials and absolute
local paths are never stored. Rendered bindings remain receipt-only; v2.2 does
not claim that an EXP edit can safely rewrite the originating source.
Fidelity refinements from real component libraries
Acceptance testing against five framework/build families improved:
- responsive viewport sizing and a reliable white browser canvas;
- browser-normal line height and fallback-font leading;
- percentage radii and capsule geometry;
- overflow clipping and nested positioned content;
- generated-content and transformed pseudo-elements;
- local/data-backed CSS masks converted to editable SVG paths;
- final-state capture for entrance animations;
- Storybook portals, sprites, and framework-independent readiness;
- SVG path, gradient, transform, mask, and blur preservation.
When a source uses unequal borders, unavailable fonts, unsupported filters,
closed shadow DOM, unobservable interaction states, or another construct EXP
cannot reproduce honestly, the Import Report names the limitation instead of
silently claiming an exact match. A fixed-width source also remains fixed-width;
EXP does not invent responsive behavior that was not rendered.
Canvas and workflow refinements
- Create artboards directly with the Artboard tool and organize multi-artboard
selections with improved align, distribute, and clean-up controls. - Keep page tabs, Layers selection, notes editing, zoom-to-fit, numeric stepping,
and gradient-angle editing steadier during everyday canvas work. - Continue to preserve the v2.1 nested-component, canvas-page, XD/Figma import,
Handoff Package, semantic export, and local read-only agent workflows.
What remains deliberately future work
- Reconstructing related rendered stories into actual EXP components, nested
components, and editable collapsed/expanded or other named states is a v2.4+
research candidate. Preserved ARIA and Storybook provenance provide useful
evidence, but they cannot recover source ownership or event logic by
themselves. - Unrestricted URL import, authenticated pages, repository build execution,
complete argTypes ingestion, source-code write-back, and update-in-place sync
remain deferred until a safe and reversible contract is proven. - Older Angular/AngularJS generations, open-shadow-root traversal, and broader
real-world framework coverage remain non-gating compatibility research driven
by tester evidence.
EXP [design] 2.2 is build 13 and requires macOS 26.2 or later.
EXP [design] v2.1 — Bring the work in. Send the meaning onward.
EXP [design] v2.1
Bring the work in. Send the meaning onward.
EXP [design] 2.1 is the release where the workflow opens up. Existing Adobe XD
documents can be rescued into editable EXP layers, Figma files can come through
Figma's sanctioned REST API, large documents can be divided into clear canvas
pages, and the new Handoff panel puts visual exports, semantic artifacts, and an
optional local agent connection in one place.
The goal is not to replace every tool in a designer's workflow. It is to get out
of the way: preserve as much editable structure and meaning as the source format
allows, let the designer make real changes, and hand the result onward in the
form the next step needs.
Editable XD and Figma import
- Import local
.xddocuments through a bounded, cancellable offline reader. - Import a Figma URL or file key through the official REST API. Personal access
tokens stay in memory and are sent only toapi.figma.com. - Figma pages become EXP canvas pages; top-level frames become artboards.
- Artboards, groups, text, shapes, vector paths, lines, images, gradients,
strokes, effects, masks, auto layout, local component sources/instances, and
named paint/type styles map to editable EXP structures where the source data
supports it. - Import reports stay quiet when everything maps cleanly and call out only
approximations or unsupported constructs that deserve review. - Imported text bounds, image resources, dashed/dotted strokes, rotated line
geometry, nested alignment, masks, and absolute children in auto layout all
received live-file fidelity corrections during acceptance testing.
Advanced Figma constructs that EXP cannot reconstruct exactly remain visible in
the fidelity report rather than being silently presented as exact. OAuth,
Keychain token storage, and Enterprise Variables mapping remain explicit future
choices, not hidden requirements in this release.
Browser-style canvas pages
- Split a document into named page tabs without burying pages beside ordinary
layers. - Each page keeps its own camera position, guides, Layers presentation, and
selection. - Add, rename, deep-duplicate, reorder, and delete pages with undo.
- Move or duplicate single layers, multiple layers, nested children, or one or
more artboards to another page from both menus and contextual actions. - Moving work to a page reveals the result immediately instead of leaving it
somewhere off-screen. - Component sources and Design Language stay shared across the document.
Components that stay understandable as they grow
- Place component instances inside other component sources from every normal
placement surface. - Direct and indirect source cycles are rejected before they can damage the
document. - Layers discloses nested component structure recursively and keeps the instance
name separate from the source name. - Choose component states independently at every nested level using stable
instance paths. - Parent components can expose selected nested public properties; reset returns
to the nearest source value. - Component-state appearance now includes opacity, fill, typography, visibility,
outlines, and blend mode without leaking changes into Default or sibling states. - Duplicate Component creates a new independent working source instead of another
instance of the original. - Deleting a source preserves every visible use as ordinary editable work, and
detaching or duplicating nested structures keeps IDs and relationships safe.
One Handoff home
The new dockable, detachable Handoff panel brings together:
- Current or selected artboard export as PNG, JPEG, PDF, or SVG.
- All-artboard export, including multi-page PDF.
- A complete inspectable
.exphHandoff Package. - Standalone semantic HTML/CSS.
- W3C Design Tokens Community Group token export.
- An optional local agent connection.
Existing File-menu commands remain available; the panel is an additional clear
home, never the only route.
Local, read-only agent access
Agent access is off by default. When the designer explicitly enables it, EXP
starts a protected current-user Unix socket and provides setup snippets for
Claude Code, Claude Desktop, or another stdio MCP client. There is no network
listener and EXP does not require a vendor API key.
Connected clients can use six read-only tools:
get_orientationlist_artboardsget_artboardget_selectionget_nodeget_tokens
EXP shows connection readiness, client identity, and the read-only boundary in
the Handoff panel. Write-back is not part of v2.1.
Accessibility at the core
- Components can carry approachable ARIA-role categories, accessible names,
relationships, states, and structured notes into semantic handoff. - Context-aware containment guidance recommends meaningful child roles without
removing the designer's choice. - Relationship controls use plain-language explanations, with technical
aria-*details available when useful. - Text can preserve paragraph or heading intent independently of its visual Type
Style. - Contrast checks remain available where colors and component states are edited.
- The app and the v2.1 panel work were accepted across keyboard order, VoiceOver,
light/dark appearance, increased contrast, reduced motion, and reduced
transparency.
EXP helps authors make and preserve better decisions; it does not claim that a
design file alone certifies an implementation as accessible. Generated output
still needs browser, keyboard, and assistive-technology testing in its real
product context.
Design Language and panel refinements
- Design Language holds reusable colors, gradients, and complete typography
styles with shared categories and list/grid views. - Design decisions can travel through EXP JSON, CSS, and W3C design tokens.
- Vector conversion, Outline Stroke, Pathfinder operations, Align/Distribute,
component semantics, and handoff actions now have clearer selection-aware panel
homes while retaining menu, contextual, and keyboard routes. - Handoff actions use the same compact neutral control rhythm as the rest of the
inspector and panel system.
Reliability fixes closed during the cycle
- Layer Copy/Paste now works while the Layers list owns keyboard focus.
- Duplicate Layer duplicates only the selected nested layer and keeps it inside
the same group. - A component source can be duplicated into a new independent component.
- Deleting a component source no longer moves preserved instances off-canvas.
- Component-state blend modes stay local to the selected state.
- Align and Distribute operate on multiple selected children inside a group.
- Text overflow indicators no longer report clipping from harmless font-metric
padding. - Temporary Spacebar panning reliably returns to the active selection tool and
cursor. - Canvas page tabs remain opaque and stable during fast panning.
EXP [design] 2.1 is build 12 and requires macOS 26.2 or later.
EXP [design] v2.0.1 — Component states and Pen curves, fixed
EXP [design] v2.0.1
Build 11. A focused stabilization release after v2.0 that closes two defects
surfaced while recording the Help walkthroughs.
Fixes
- Component states no longer leak edits into the shared source. Changing a text
layer's typography (color, typeface/face, size, alignment, line-height,
tracking, or case) or a selected layer/group's opacity while a non-default
state (for example Disabled) is active now affects only that state. Default
and sibling states stay unchanged, and instances render the chosen state
correctly. Common designs such as a muted Disabled label are safe to author
again. (BUG-006) - Holding Shift while pulling the Bézier handles of a brand-new Pen anchor now
constrains the handle to the same axis/45-degree increments used when editing
an existing handle. Pressing or releasing Shift mid-drag toggles the snap, and
the opposite handle stays mirrored. (BUG-005)
Refinements
- The Type inspector's Font and Weight dropdowns now carry labels, and the
semantic Content role moved into its own divider-separated sub-section below
Case, so it is no longer mistaken for the typeface menu.
Update Notes
- No document-schema changes from v2.0. Documents authored with leaked state
edits open unchanged; new state-local typography and opacity are stored
additively and decode tolerantly in existing schema-v2 files. - Semantic HTML/CSS handoff now preserves per-state typography and opacity
differences. - Both fixes were reproduced from the 2026-07-23 Help recording and verified in
real use before release.
EXP [design] v2.0 — Handoff that keeps its meaning
EXP [design] v2.0
Handoff that keeps its meaning
EXP [design] 2.0 turns a design document into an inspectable Handoff Package:
a self-contained .exph folder with a manifest, structured design data, W3C
design tokens, a human-readable README, and browser-ready semantic HTML/CSS for
each artboard. Packages are deterministic, use stable IDs, require no build
step or CDN, and preserve design notes instead of flattening them into pixels.
Semantic by design
- Components carry states, relationships, notes, and ARIA roles into handoff.
- Text can be marked as Plain text, Paragraph, or Heading 1–6 independently of
its visual Type Style. - Native HTML is used when it honestly represents the design; ARIA is added
only where it is needed. EXP does not fabricate interactions or JavaScript. - Semantic requirements and visual fallbacks are reported explicitly so the
next person can see what needs implementation rather than infer it.
A shared design language
- Colors, gradients, and typography export as CSS custom properties and W3C
Design Tokens Community Group data. - Auto Layout maps to readable flexbox where the design supports it.
- Typography is now visible and editable in Design Language Settings.
- SVG stylesheet classes and color references import more reliably.
Learning built into the workflow
The ARIA Roles Designer Guide is available from EXP's Help menu and on the web
at expdesign.app/aria-roles. It offers
plain-language role descriptions, examples, categories, comparisons, search,
and bookmarks without interrupting the design workflow.
Accessibility and verification
The v2 handoff path was exercised with keyboard navigation, VoiceOver reading
order, semantic validation, light and dark appearances, increased contrast,
Firefox and WebKit rendering, deterministic package hashing, and signed
universal macOS builds.
Agent-ready foundation
This release also includes the local, read-only foundation for future agent
handoff. It is off by default, listens only through a protected local Unix
socket when explicitly enabled, requires no vendor API key, and exposes no
network listener. The user-facing Handoff panel and guided agent setup remain
part of the next release cycle.
EXP [design] 2.0 is build 10 and requires macOS 26.2 or later.
EXP [design] v1.6.1
EXP [design] v1.6.1
Build 9. This is a focused stabilization release after v1.6.
Workflow improvements
- Finder SVG and raster filenames now become their default layer names, and
dragging or pasting several SVGs imports the entire batch in one undoable step. - SVG exports include readable, CSS-safe
layer-…classes derived from EXP
layer names without introducing duplicate IDs. - Selection rotation now follows the Adobe-style outside-corner interaction.
Four new corner-specific cursors point inward toward the object, while Shift
snapping and Inspector rotation continue to work as before. - The canvas now uses the owner-authored pointer and Pen add/delete cursors as
preserved-vector assets. Existing shape, resize, text, pan, and modifier
cursors are unchanged. - Object ▸ Path ▸ Outline Stroke turns center, inside, and outside strokes into
editable filled paths that scale with the artwork. - Object ▸ Pathfinder adds Unite, Subtract Front, Intersect, and Exclude Overlap
for editable vector shapes, including compound Bézier geometry.
Fixes
- Rich-text word, line, and character styling is preserved when you click
directly out of an active text box while text is still selected. Font size,
color, weight, and underline no longer depend on collapsing the selection
before leaving the editor. - Changing selection from outside the canvas now commits the active text editor
without pulling selection back to the previous text layer. - Sparkle's installer launcher is now correctly enabled for the sandboxed app,
including the required installer communication entitlements. Earlier builds
could discover and download an update but then failed with “An error occurred
while launching the installer.” - Inspector dimensions now follow the painted outside edge of positioned strokes.
Group measurements use live descendant bounds, and numeric SVG-path resizing
scales the actual vector geometry instead of only changing its stored frame.
Update Notes
- No document-schema changes from v1.6.
- Because v1.6 and earlier are missing the sandboxed installer-launcher
configuration, install v1.6.1 manually once. Automatic updates should work
normally from that corrected baseline onward. - The rich-text regression and authored cursor family were verified in real use.
- The first true automatic-update proof starts from an installed v1.6.1
baseline and targets the next published build.