Skip to content
Changelog

What's new in elah

Release notes for the published packages — @elah/core, @elah/timeline, and @elah/editor ship together and share a version. @elah/cli is a separate package that versions independently.

v0.4.1

Latest

Export works out of the box for npm consumers, and @elah/editor finally re-exports its full public API.

Fixed@elah/core
  • The MP4 export worker now resolves in installed packages. exportVideo spawned the worker via new URL("./ExportWorker.ts", …), but the published package ships only the compiled ExportWorker.js — so the specifier was unresolvable and any consumer bundler (Turbopack, webpack, Vite) failed on the @elah/editor barrel, on first page load rather than on export. The build now rewrites the extension in dist/ as its final step. Apps no longer need a postinstall patch script; if you added one, delete it.
Fixed@elah/editor
  • The barrel re-exports the full public API. 40+ identifiers were missing, including ones the docs told you to import from it: snapFrame, buildSnapPoints, resolveOverlapEdgeSnap, clipsOverlap, DEFAULT_OVERLAP_TOLERANCE, useTransitionsStore, useAssets, importBlob, createShapeClip, createFreehandClip, serializeProject, deserializeProject, warmImageSrc, preloadProjectImages, cn, EditorContext, the vanilla stores (tracksStore, playbackStore, selectionStore, transitionsStore, mediaLibraryStore), and their types. Renderer and debug internals stay @elah/core-only by design.
Added
  • AGENTS.md — the brief for coding agents working in the repo — plus docs/ai/ELAH_FOR_AI_AGENTS.md, a single self-contained integration guide for AI tools with no repo access (Lovable, Google AI Studio, Emergent, v0).
  • New playground/minimal example: the smallest complete custom editor UI, meant as the thing you point an AI at.
  • The playground/next and playground/react examples now import all three required stylesheets and declare the lucide-react peer dependency explicitly.
  • Corrected the /examples code samples, which did not compile against 0.4.x (exportVideo options, ExportProgress shape, the DemuxerBackend interface, and ActiveTextClip field access).

v0.4.0

New @elah/react package — all React bindings split out of @elah/core, which is now truly framework-agnostic.

Added@elah/react
  • New package @elah/react — all React bindings in one place: the editor context (EditorContext, useEditor, useTimelineEngine, usePlaybackEngine), store hooks (useTracksStore, usePlaybackStore, useSelectionStore, useTransitionsStore, useMediaLibraryStore, useMediaLibrary / useAssets), and the audio hooks (useAudioMixer, useMasterVolume, useTrackLevels). Store hooks keep the imperative surface too (useTracksStore.getState() still works).
  • @elah/editor now also re-exports the audio hooks.
  • Test coverage for @elah/react, mirroring the vitest/jsdom conventions already used by @elah/timeline and @elah/editor.
Changed@elah/core
  • BREAKING: core is now truly framework-agnostic — zero React in its module graph (fixes #42; importing @elah/core from Vue/Nuxt/Node no longer requires React).
  • All React hooks moved to @elah/react (re-exported unchanged by @elah/editor, so @elah/editor users are unaffected).
  • The Zustand mirrors are now vanilla stores exported as tracksStore, playbackStore, selectionStore, transitionsStore, and mediaLibraryStore (previously the React-bound useXStore exports). Imperative call sites migrate as useTracksStore.getState() → tracksStore.getState().

v0.1.1

elah serve gets a browser-friendly welcome page and a copy-paste startup example.

Added@elah/cli
  • elah serve welcome page — GET / now serves an HTML orientation page (route table, browser-connected status, copy-paste /render example) instead of a bare 404.
  • Copy-paste startup example — elah serve now prints a ready-to-run render example on startup: curl on macOS/Linux, Invoke-RestMethod on Windows (PowerShell's curl alias doesn't accept -H/-d).

v0.3.2

Documentation only — reworked package READMEs to cross-link @elah/cli. No code changes.

Changed
  • Reworked @elah/core, @elah/timeline, and @elah/editor READMEs to cross-link @elah/cli and stay consistent with its README pattern.

v0.3.1

License changed from ECL v1.0 to Apache-2.0. No code changes.

Changed
  • License changed from the Elah Community License (ECL) v1.0 to Apache-2.0, across @elah/core, @elah/timeline, and @elah/editor. Copyright remains with Elah Labs Private Limited.

v0.1.0

Initial release of @elah/cli — a headless CLI and self-hosted render server, bit-identical to browser export.

Added@elah/cli
  • CLI commands — elah split, trim, export, and build for headless project editing and MP4 export.
  • elah serve — a long-lived HTTP render server (POST /render: spec JSON in, MP4 out) with a warm browser and concurrency control.
  • Seconds-based build spec for programmatic and AI-generated projects, with path-addressed validation errors.
  • Library API — build, exportProject, createRenderSession, startServe, validateSpec, probeMedia — importable directly from Node.

v0.3.0

Multi-track audio, shape & freehand clips, a programmatic asset-insertion API, and a fully themeable timeline. No breaking changes.

Added@elah/core
  • Multi-track audio playback — AudioPlaybackController mixes several audio tracks with per-clip control, replacing the single-track v1 constraint.
  • Audio mixer hooks — useAudioMixer, useTrackLevels, useMasterVolume, plus a pluggable defaultAudioResolver / AudioResolver.
  • Shape clips — createShapeClip, ShapeVariant, and a GPU ShapeLayer (scene.shapes).
  • Freehand clips — createFreehandClip and a GPU FreehandLayer (scene.freehand).
  • Image decode cache warming — warmImageSrc, preloadProjectImages to eliminate first-paint stalls.
  • Expanded asset import — importUrl and importBlob alongside importFiles, plus the useAssets hook.
  • transformFromCoverRect placement helper (object-fit cover).
Added@elah/timeline
  • Programmatic insertion API — insertMediaAsset and insertElement place assets without a drag gesture (powers tap-to-add).
  • classNames slot API + cn util — restyle every sub-component without forking; a passed class always wins.
  • --elah-* CSS-variable theming with a backward-compatible timelineTheme facade.
Added@elah/editor
  • SourcePanel — a fully slot-styled source/asset browser with an asset activation API for tap-to-add flows.
  • Re-exports all of the new core and timeline API above.
Changed
  • Timeline UI redesigned (clips, headers, ruler, playhead) to the Figma cyan / cool-navy theme; editor retinted to match.
  • Timeline gestures migrated to pointer events with pinch-to-zoom and touch tap-to-add.
  • Export pipeline hardened: re-entrancy guard on exportVideo, improved audio mixing, shape/freehand parity with the live renderer.
Fixed
  • Backward-seek frame-cache stability and video-decoder pivot handling.
  • Generated clips can grow left without being clamped by source bounds.

v0.2.1

Documented measured bundle sizes and improved package build scripts.

Changed
  • Documented measured bundle sizes (~63 KiB gzipped full SDK).
  • Improved package build scripts.

v0.2.0

First public release of the three-package split.

Added
  • First public release of @elah/core, @elah/timeline, and @elah/editor.

Following Semantic Versioning. Have a question about a release? Ask on Discord.