Skip to main content

Changelog

Ydesign is composed of several independently published packages, each with its own release cadence. This page aggregates their version history.

đŸ“Ļ Versions follow SemVer. Starting from v1.0, every breaking change to public APIs is reflected in the major version number.

PackageOn npmCurrentStatus
@ydesign/core@ydesign/core0.3.0Public preview
@ydesign/react-editor@ydesign/react-editor0.3.1Public preview
@ydesign/vue-editor————Planned

All packages are still in the 0.x range; some APIs may evolve based on feedback. v1.0 will ship alongside the Ydesign SDK v1.0 announcement blog.


@ydesign/core​

Canvas rendering core — wraps Fabric.js v6, UI-framework agnostic.

0.3.0 (current)​

Includes one Breaking Change (the nanoid re-export is removed). During the 0.x phase we bump the minor whenever a breaking change ships, signaling downstream consumers to upgrade. Make sure to bump @ydesign/react-editor to 0.3.1 or later in lockstep.

  • GuidelinesHandler smart guides reworked into a two-stage flow: lines appear as a visual hint when you get close, snapping only kicks in when you get closer. A new setConfig({ showThreshold, snapThreshold }) lets you tune both thresholds.
  • GuidelinesHandler: each axis snaps to its nearest candidate only — fixes the jitter caused by multiple snap targets overriding each other.
  • New generateObjectId() export (utils/id.ts) — encapsulates canvas object id generation rules.
  • Dependency: fabric ^6.7.1 → ^6.9.1. Pulls in upstream fixes for toDataURL writing on contextTop, undefined + char text width bug, loadFromJSON accidentally adding an objects property, and the Text.ts ReDoS (CWE-1333) security patch.
  • Refactor: src/common/ is now the single source of truth — src/interface/ and src/constants/ removed.
  • Breaking: nanoid is no longer re-exported. Use generateObjectId() instead.

0.2.2​

  • Polish: RulerHandler now switches the cursor to not-allowed while a guide is dragged over the ruler area — a clear "release to delete" affordance. The cursor restores to its previous value on release.

0.2.1​

  • New RulerHandler: registered as editor.rulerHandler, ships ruler + guides (see Ruler & Guidelines)
    • Tick density adapts to zoom; origin aligned to the workarea's top-left
    • Selecting an object now shows a blue highlight band on the ruler with precise start / end coordinates
    • Drag-out / drag / drag-back-to-remove guide interaction
    • Guides extend beyond the workarea (bypass canvas.clipPath)
    • Hit testing overrides containsPoint — anything within 6 screen pixels counts as a hit (more reliable than fabric's default)
    • Auto-bring-to-front: guides remain selectable after images / text are added on top
    • Transparent to persistence: not in store.objects, not in history, excludeFromExport
  • ObjectsHandler: updateContextObjects filters isGuideline objects so guides never trigger autosave
  • EventHandler: skips guides in object:modified; guide moves don't enter the history stack

0.2.0​

  • InpaintHandler: new eraser mode — wipe parts of an already painted mask straight on the canvas
  • InpaintHandler: built-in undo / redo stack, one snapshot per stroke (pointerdown → pointerup)
  • InpaintHandler: new inpaint:status event so external UI can subscribe and drive undo/redo button states
  • InpaintHandler: new replaceTargetImageSrc(url) — drop in the AI result, auto-clear the mask and reset the history stack
  • Fix: InpaintHandler lasso mode no longer fills a blue overlay while dragging. The dashed path is now drawn in real time and only closes + fills the mask on mouseup — matching the lasso UX in Photoshop / Figma.

0.1.9​

  • InpaintHandler: AI eraser now supports brush / rect / lasso modes, exports a black-and-white mask + base image for backend AI processing
  • ImageStrokeHandler: image outline supports dashed strokes and inner/outer variants
  • HotkeyHandler: key bindings auto-adapt Ctrl / Command
  • Performance: batched redraws during canvas resize, much smoother

0.1.x milestones​

  • Handlers introduced: WorkareaHandler / ZoomHandler / ObjectsHandler / EventHandler / HotkeyHandler / LockHandler / LayerHandler / AlignmentHandler / RendererHandler / HistoryHandler / SceneHandler / ImageFiltersHandler / ImageCropHandler / GuidelinesHandler / ResizeHandler / ImageStrokeHandler / InpaintHandler
  • Editor unifies internal communication via EventManager
  • CustomCanvas wraps Fabric Canvas lifecycle (init / dispose / resize)
  • Utility exports: parser, generateObjectId

@ydesign/react-editor​

Official React UI layer, built on React 18 + Ant Design v6 + MobX + mobx-state-tree. The npm package is currently @ydesign/react-editor and will be renamed to @ydesign/react-editor on v1.0.

0.3.1 (current)​

  • Adapts to @ydesign/core@0.3.0: idphoto-panel.tsx switches its internal nanoid() call to generateObjectId()
  • No public API changes — upgrading from 0.3.0 is a simple pnpm up @ydesign/react-editor
  • After upgrading, smart guides switch from "snap on threshold" to "show first, snap closer" — tune via store.editor?.guidelinesHandler.setConfig({ showThreshold, snapThreshold })

0.3.0​

  • Build tooling migration: tsc + rollup → Vite (multi-entry ESM + single-file UMD bundle)
  • New CDN demo (bundler-less scenario); bundle entry at @ydesign/react-editor/bundle, global window.YDesignEditor
  • Reorganized exports field in package.json — clearer multi-path subpath imports
  • Dependency consolidation: react-sortablejs and friends inlined into the UMD bundle

0.2.9​

  • New <RulerButton /> (docs): a ruler & guides toggle at the bottom-right of the canvas, with an antd dropdown menu ("Show ruler / Clear guides"). On/off state persists in localStorage
  • New translation keys: toolbar.ruler / toolbar.rulerShow / toolbar.rulerClear
  • The demo app integrates <RulerButton /> out of the box

0.2.8​

  • New: Inpaint side panel adds an eraser mode to wipe out already-painted mask regions
  • New: Undo / redo buttons in the Inpaint panel, auto-disabled based on stack state
  • Polish: lasso mode now shows only a dashed trail while dragging and closes + fills on mouse-up — matches Photoshop / Figma
  • Polish: project auto-save is paused on entering Inpaint mode (so the temporary mask never gets persisted) and resumed on exit
  • Integrates @ydesign/core@0.2.0 Inpaint extensions (eraser + undo/redo events)
  • Fix: objects snapshot was not synced after manual image reposition
  • Polish: mobile side panel layout and open/close logic

0.2.7​

  • Pushing to history stack when loading a template from JSON, so "undo after load" works

0.2.6​

  • Internal stability fixes and minor polish

0.2.5​

  • createStore now accepts a debug option that prints detailed event logs

0.2.4​

  • Fix: store.objects update fired twice in certain scenarios

0.2.3​

  • Shadow effect application fixes

0.2.2​

  • Canvas background can be updated dynamically (store.backgroundColor accepts solid or gradient)

0.2.1​

  • "Frame" elements are now selectable

0.2.0​

  • Rename: design → scene (internal model)
  • SceneHandler provides a unified entry for template import / export

0.1.x milestones​

  • Side panels: templates, text, photos, shapes, upload, background, layers, size, ID photo, AI eraser — 10 built-in panels
  • Toolbar: switches dynamically based on selection type (textbox / image / path / multi-select / crop mode, etc.)
  • Top bar: create file, canvas size controls, theme switch
  • <Workspace />: hosts the Fabric canvas with zoom, hotkeys, and context menu
  • MST Store: unified state (width / height / scale / selectedElementsIds / fonts / editor, etc.)
  • i18n: setTranslations / getTranslations / translate / t
  • Backend wiring: setBaseURL / setAPI to override built-in endpoints
  • Custom upload: setUploadFunc
  • Font management: addGlobalFont / removeGlobalFont / replaceGlobalFonts / setGoogleFontsVariants

@ydesign/vue-editor​

Official Vue 3 UI layer, built on Vue 3 + Pinia.

Unreleased (planned)​

  • API parity with @ydesign/react-editor
  • Shares @ydesign/core; JSON schema fully interoperable between React and Vue
  • Roadmap: see Vue integration

v1.0 release plan​

v1.0 will ship the following packages together:

  • @ydesign/core@1.0.0
  • @ydesign/react-editor@1.0.0 (renamed from @ydesign/react-editor)
  • @ydesign/vue-editor@1.0.0-beta.1

Starting with v1.0:

  • ✅ Public APIs are stabilized; breaking changes will bump the major version
  • ✅ JSON schema of @ydesign/core and @ydesign/react-editor is locked; future versions stay backward-compatible
  • ✅ Announcements and upgrade guides will be posted on the blog

Feedback or ideas? Open an issue on GitHub — we'd love to hear from you.