💥 Breaking changes & Deprecations
🚀 Epics and highlights
- WebGL rendering (beta) user preference #9683 (PR:9113)
- Design Tokens at the design tab: numeric fields with token selection in place #9358
✨ New features & Enhancements
- Add delete group to assets panel context menu (by @FairyPigDev) #9141 (PR: #9151, #9211)
- Show alpha percentage on library color values (by @rockchris099) #6328
- Add clear artboard guides to frame context menu (by @eureka0928) #6987 (PR: #8936)
- Add loader feedback while importing and exporting files (by @moorsecopers99) #9020 (PR: #9024)
- Allow duplicating color and typography styles (by @MkDev11) #2912 (PR: #8449)
- Add woff2 support on user uploaded fonts (by @Nivl) #3521 (PR: #8367)
- Import Tokens from linked library (by @dfelinto) #9635 (PR: #8439)
- Option to download custom fonts (by @dfelinto) #9672 (PR: #8335)
- Add copy as image to workspace context menu (by @dfelinto) #9607 (PR: #8364, #9586)
- Add Tab/Shift+Tab navigation to rename layers sequentially (by @bittoby) #2569 (PR: #8506)
- Copy and paste entire rows in existing table (by @bittoby) #5969 (PR: #8498)
- Rename token group #9637 (PR: #8275)
- Duplicate token group #9638 (PR: #8886)
- Copy token name from contextual menu #9639 (PR: #8566)
- Add drag-to-change for numeric inputs in workspace sidebar (by @RenzoMXD) #2466 (PR: #8536)
- Add per-group add button for typographies (by @eureka0928) #5275 (PR: #8895)
- Add Find & Replace for text content and layer names (by @statxc) #7108 (PR: #8899, #9687)
- Use page name for multi-export ZIP/PDF downloads (by @Dexterity104) #8773 (PR: #8874)
- Make links in comments clickable (by @eureka0928) #1602 (PR: #8894)
- Add visibility toggle for strokes (by @eureka0928) #7438 (PR: #8913)
- Sort asset library subfolders alphabetically at every nesting level (by @eureka0928) #2572 (PR: #8952)
- Add Paste to replace (Cmd+Shift+V) for selected shapes (by @eureka0928) #4240 (PR: #9033)
- Differentiate incoming and outgoing interaction link colors (by @claytonlin1110) #7794 (PR: #8923)
- Reorder prototyping overlay options to show Position before Relative to (by @rockchris099) #2910
- Add customizable colors for ruler guides (by @Dexterity104) #5199 (PR: #8986)
- Persist asset search and section filter across sidebar tabs (by @eureka0928) #2913 (PR: #8985)
- Add delete and duplicate buttons to typography dialog (by @eureka0928) #5270 (PR: #8983)
- Edit ruler guide position by double-clicking the guide pill (by @eureka0928) #2311 (PR: #8987)
- Add search bar to color palette (by @eureka0928) #7653 (PR: #8994)
- Add search bar to board size presets (by @eureka0928) #4658 (PR: #9117)
- Allow customising the OIDC login button label (by @wdeveloper16) #7027 (PR: #9026)
- Add page separators in Workspace #9180 (PR: #8561)
- Preserve vector content when pasting SVG from external tools (by @RenzoMXD) #546 (PR: #9182)
- Add pixel grid color picker in viewport settings (by @jack-stormentswe) #7750 (PR: #9155)
- Add HEX/HSB/HSL support to color picker with persistent model switcher (by @edwin-rivera-dev) #9133 (PR: #9134)
- Show specific invitation-link error messages (by @niwinz) #9220 (PR: #9223)
- Show detailed file import error messages (by @jsdevninja) #8212 (PR: #9004)
- Add read-only preview mode for saved versions (by @wdeveloper16) #7622 (PR: #8976, #9514)
- Add clipboard read/write permissions to the plugin system (by @wdeveloper16) #6980 (PR: #9053)
- Update auth hero illustration on login screen #9532 (PR: #9552)
- Update Open Graph link preview metadata #9555 (PR: #9557)
- Restore deleted team files in bulk instead of per file (by @Dexterity104) #9246 (PR: #9248)
- Preserve Inkscape labels when pasting SVGs (by @jeffrey701) #7869 (PR: #9252)
- Add Alt+click to expand layer subtree (by @MilosM348) #7736 (PR: #9179)
- Allow deleting the profile avatar after uploading (by @moorsecopers99) #9067 (PR: #9068)
- Improve file validation performance and fix orphan shape detection #9790 (PR: #9789)
- Add v2.16 release notes (What's new modal) #9945 (PR: #9940)
- Enable multi-instance horizontal scaling for MCP server #10000 (PR: #10013)
🐛 Bugs fixed
- Add Shift+Numpad aliases for zoom shortcuts (by @RenzoMXD) #2457 (PR: #9063)
- Save and restore selection state in undo/redo (by @eureka0928) #6007 (PR: #8652)
- Add guide locking and fix locked element selection in viewer (by @Dexterity104) #8358 (PR: #8949)
- Add natural sorting on token names #8635 (PR: #8672)
- Fix warnings for unsupported token $type (by @Dexterity104) #8790 (PR: #8873)
- Apply styles to selection (by @AzazelN28) #9661 (PR: #8625)
- Fix Alt/Option to draw shapes from center point (by @offreal) #8360 (PR: #8381)
- Fix library update button freezing #9330 (PR: #9513)
- Fix typo in subscription settings success key (by @jack-stormentswe) #9203 (PR: #9204)
- Add token name on broken token pill on sidebar #9534 (PR: #8527)
- Fix tooltip activated when tab change #9539 (PR: #8719)
- Fix title on shared button #9541 (PR: #8696)
- Fix hover on layers #9542 (PR: #8885)
- Fix highlight after name edition #9537 (PR: #8890)
- Fix multiple small UI bugs — id prop, update copy, library modal scroll #9536 (PR: #8604)
- Fix themes modal height #9535 (PR: #9105)
- Fix layers panel rename showing default type name (by @jack-stormentswe) #9230 (PR: #9231)
- Suppress browser context menu on workspace sidebar right-click (by @sujyotraut) #5127 (PR: #9196)
- Fix plugin API fileVersion.restore() hanging on failure (by @thomascolden585-svg) #9092 (PR: #9111)
- Fix stroke-only SVG paths losing rounded join on split (by @Chrissi2812) #5283 (PR: #9156)
- Fix plugin API library.connectLibrary() not returning Promise (by @boskodev790) #9646 (PR: #9158)
- Fix LDAP provider schema typo in malli migration (by @boskodev790) #9531 (PR: #9165)
- Fix login-with-ldap dropping error on uninitialized LDAP (by @boskodev790) #9533 (PR: #9159)
- Fix OIDC_USER_INFO_SOURCE flag being ignored (by @GeekClassy) #9108 (PR: #9114)
- Fix share-link viewer crash on malformed email (by @boskodev790) #9530 (PR: #9120)
- Fix crash pasting component variants from external library (by @FairyPigDev) #8144 (PR: #9136)
- Remove corepack from MCP launcher for Node.js 25+ (by @TheAifam5) #8877 (PR: #9119)
- Fix Copy as SVG for multi-shape selections (by @RenzoMXD) #9088 (PR: #9066)
- Preserve OpenType variant name table for custom fonts in the dashboard (by @rutherfordcraze) #8924 (PR: #9193)
- Add export panel to inspect styles tab #9660 (PR: #8645)
- Fix styles between grid layout inputs #9656 (PR: #8673)
- Fix dates to avoid show them in english when browser is in auto #8709 (PR: #8775)
- Fix focus radio button #9657 (PR: #8774)
- Token tree should be expanded by default #9662 (PR: #8799)
- Fix opacity incorrectly disabled for visible shapes #9658 (PR: #8854)
- Fix plugin modal drag over iframe and close button (by @marekhrabe) #9529 (PR: #8871)
- Fix hot update on color-row on texts #9664 (PR: #8880)
- Fix selected color tokens #9655 (PR: #8889)
- Fix dashboard Recent/Deleted titles overlapped by scrolling content (by @rockchris099) #8577
- Display resolved values of inactive tokens #9665 (PR: #8589)
- Fix hyphens stripped from export filenames (by @jamesrayammons) #8901 (PR: #8944)
- Fix app crash on multiselection with hidden shapes and opacity mixed value #9666 (PR: #8932)
- Fix gap input throwing an error #9667 (PR: #8984)
- Fix copy to be more specific #9668 (PR: #9028)
- Fix incorrect rendering when exporting text as SVG, PNG and JPG (by @edwin-rivera-dev) #8516 (PR: #9094)
- Fix typography style creation with tokenized line-height (by @juan-flores077) #8479 (PR: #9121)
- Fix colorpicker layout hiding eyedropper button #9669 (PR: #9125)
- Fix restore-deleted-team-files reduce typo (by @Dexterity104) #9240 (PR: #9241)
- Fix internal error on layer prev/next sibling selection (by @jsdevninja) #7064 (PR: #9003)
- Fix tooltip appearing two times when nested elements #9674 (PR: #9031)
- Fix broken update library notification link in the UI #9673 (PR: #9070)
- Fix plugin API ShapeBase.component() returning outermost instead of immediate component #9183 (PR: #9298)
- Fix content attribute sync group resolution by shape type #9527 (PR: #8724)
- Fix plugin parse-point returning plain map instead of Point record (by @FairyPigDev) #8409 (PR: #9129)
- Fix
:heigthtypo in clipboard frame-same-size? (by @iot2edge) #9249 (PR: #9250) - Fix Settings Update button enabled state (by @moorsecopers99) #9090 (PR: #9091)
- Fix library updates reappearing after reload #9326 (PR: #9563)
- Fix internal error on margins #9309 (PR: #9311)
- Remove drag-to-change when token applied on numeric input #9313 (PR: #9314)
- Fix extra input on canvas background #9359 (PR: #9360)
- Fix frame selection highlight persists after rename #9538 (PR: #8938)
- Fix several color picker issues #9556 (PR: #9558)
- Fix asset icon broken on Asset tab #9587 (PR: #9612)
- Fix text fill color stops updating in multiselect with texts #9608 (PR: #9549)
- Fix standalone tokens ordering separated from token groups #9733 (PR: #9736)
- Fix delete invitation modal readability in light theme #9737 (PR: #9747)
- Fix team invitation not automatically accepted after account validation #9776 (PR: #9782)
- Fix Plugin API addRulerGuide creating guides on page instead of board (by @girafic) #8225 (PR: #8632)
- Fix text editor not swapping correctly when enabling/disabling WebGL #10015
- Fix WebGL renderer focus mode leaving artefacts #10061 (PR: #10091)
- Fix double click on text selecting underlying element when WebGL render is enabled #10080 (PR: #10123)
- Fix publishing or unpublishing file as library failing with unexpected state found error #10094 (PR: #10093)
- Fix team invitation failing when email address contains consecutive dots in domain #10097 (PR: #10096)
- Add detailed error messages for unspecified import errors #9759 (PR: #9886)