Releases
Changelog
All notable changes to Tiny Engine (core).
├── Added UI.scan(root?) for scoped/manual subtree initialization
├── Added UI.destroy(root?) for explicit teardown, including global cleanup with no root
├── Batched observer work with queueMicrotask + requestAnimationFrame flush scheduling
├── Added UI.config({ hydrate: true }) to skip no-op option sync during hydration
├── Extended devtools performance metrics: creates, destroys, scans, syncs, emits, flushes, timing
└── Exposed scan/destroy to plugin context for framework adapters├── DX upgrade with better TypeScript ergonomics, warnings, debug mode, and clearer APIs
├── Devtools layer for inspecting capsules, props, refs, signals, stores, and emitted events
└── Plugin system with UI.use(plugin) style extension architecture for third-party addons├── Middleware support for CapsuleStore with store.use(...) hooks
├── Cancellable component events via emit(..., { cancelable: true })
├── Data API for declarative UI triggers with data-ui-toggle / data-target
├── Global UI event bus with UI.on() / UI.emit() for cross-component sync
├── Lower-boilerplate developer experience for plugins, analytics, and behaviours
├── Performance-focused core flow updates for smoother runtime interactions
└── Dual capsule support for both class-based and functional registration├── Dynamic DOM auto-init improvements (root element + nested matches)
├── Attribute observer support for live ui-* / app-* updates
├── Delegated @directives engine for dynamic HTML actions
├── Better ref handling with root refs + lazy ref lookup
├── Instance sync support for attribute-driven option changes
├── Safe instance cleanup when nodes are removed from the DOM
├── Host element instance exposure (el.modal / el.dropdown / etc.)
└── Core runtime optimization and TypeScript cleanup├── Enhanced Props System (defaults, HTML attrs, model binding)
├── Typed Refs (ref="toggle" → this.refs.toggle: HTMLButtonElement)
├── Full @directives Support (@click="select('Home')")
├── Reactive Props (active="1" → auto onPropChange('active'))
├── PropsChangeListener API ((newVal, oldVal, key) => void)
├── Instance Auto-Expose (el.tabs = instance → easy JS control)
├── Public Methods (setActive(), getActive(), next())
├── Event Emit (this.emit('tabchange', { index }))
├── Enhanced Options Merging (defaults → attrs → directives → options)
├── Improved Timing (requestAnimationFrame() for refs/DOM ready)
└── TypeScript fixes (HTMLElement typing, PropsChangeListener signature)├── Dynamic prefix system (UI.config({ prefix }))
├── getPrefix() utility for components
├── UIOptions TypeScript interface
├── Enhanced readOptions(prefix param)
└── Improved TypeScript declarations└── Initial core release