Releases: codeyousef/summon
Releases · codeyousef/summon
Summon 0.7.0.2
Fixed
- Composable rendered twice in fullstack SSR projects - The server-rendered HTML and the
client-side app both appeared on screen because the generated clientMain.ktused
renderComposableRootinstead ofhydrateComposableRoot, causing the JS app to append below
the static SSR content rather than replacing it renderComposablesafety net - CallingrenderComposableRooton an SSR container now
always clears existing content before rendering, preventing duplicate output even if
hydrateComposableRootis not used
Summon 0.7.0.1
Fixed
- SSR 500 error in generated fullstack projects - The app module was missing
jvmToolchain(17), causing
UnsupportedClassVersionErrorwhen./gradlew :backend:runloaded app classes compiled with a higher JDK - Silent SSR failures - Added error handling (
catch Throwable) to the SSR route in all generated server
templates (Ktor, Spring Boot, Quarkus) so rendering errors produce a visible error page and log output instead of an
empty HTTP 500
Summon 0.7.0.0
Added
HTML DSL Components
- New
components/html/Package - Complete HTML5 semantic elements DSLHtmlElements.kt- Header, Nav, Main, Footer, Section, Article, Aside, Address, Hgroup, SearchTextElements.kt- H1-H6, P, Blockquote, Pre, Code, Strong, Em, Small, Mark, Del, Ins, Sub, Sup, S, U, B, IListElements.kt- Ul, Ol, Li, Dl, Dt, Dd, MenuTableElements.kt- Table, Thead, Tbody, Tfoot, Tr, Th, Td, Caption, Colgroup, ColInlineElements.kt- A, Span, Time, Abbr, Cite, Q, Kbd, Samp, Var, Dfn, Data, Bdi, Bdo, Ruby, Rt, Rp, Wbr, BrMediaElements.kt- Figure, Figcaption, Iframe, Embed, ObjectTag, Param, Source, Track, Audio, MeterDetailsElements.kt- Details, Summary, Dialog
Modifier Enhancements
- Breakpoint Shortcut Modifiers - Mobile-first responsive design helpers
xs(),sm(),md(),lg(),xl(),xxl()- Min-width breakpointsxsDown(),smDown(),mdDown(),lgDown(),xlDown(),xxlDown()- Max-width breakpointssmOnly(),mdOnly(),lgOnly(),xlOnly()- Exact range breakpointsbreakpointBetween(min, max)- Custom range breakpoints
- Scoped Style Selectors - CSS combinator support
Modifier.descendant(selector)- Descendant selector (space)Modifier.child(selector)- Child selector (>)Modifier.adjacentSibling(selector)- Adjacent sibling selector (+)Modifier.generalSibling(selector)- General sibling selector (~)
Desktop/Multi-window Features
- SyncedStorage - Cross-tab reactive storage using localStorage + storage events
createSyncedStorage()- Create synchronized storage instancerememberSynced()- Composable for synced state
- BroadcastChannel - Cross-window messaging API
createBroadcastChannel()- Create messaging channelSummonBroadcastChannel- Cross-platform interface
- WindowManager - Multi-window management
WindowManager.open()- Open new windows/tabsWindowManager.getScreenInfo()- Screen dimensions and capabilitiesWindowManager.currentWindowId- Unique window identifierWindowManager.moveTo(),resizeTo(),focus()- Window manipulation
- File Dialogs - File System Access API integration
showOpenFileDialog()- Open file pickershowSaveFileDialog()- Save file dialogshowDirectoryPicker()- Directory selectionisFileSystemAccessSupported()- Feature detection
- MenuBar - Application menu bar component
MenuBar()composable with DSL builderMenuItem,Menu,KeyboardShortcutdata classesmenuBar { }DSL for declarative menu definition
- SystemTray - System tray support (no-op on web)
createTrayIcon()- Create tray iconshowNotification()- Web Notifications API fallback
- Cross-Window Drag and Drop - DragCoordinator using BroadcastChannel
DragCoordinator- Coordinate drag operations across windowsDragData,DragMessage- Serializable drag payloads
- Picture-in-Picture - Document PiP API support
requestPictureInPicture()- Request PiP windowPictureInPictureContent()- Render into PiP windowisPictureInPictureSupported()- Feature detection
Changed
- JVM Renderer - Expanded
renderHtmlTagto support 70+ HTML5 elements - WASM Renderer - Implemented proper
renderHtmlTagwith full HTML5 support - PlatformRenderer - Added
renderMenuBar()method
Deprecated
- SemanticHTML.kt - All functions deprecated in favor of
components/html/packageHeader,Main,Nav,Article,Section,Aside,Footer,Heading,Figure,FigCaption
Summon 0.6.3.0
Added
- BasicTextField Component - New minimal text input field without validation state, safe for JS minification
scenarios where state capture in callbacks can cause issues - @slowtest Annotation - New test annotation for marking slow tests (stress tests, performance tests) that are
excluded from default test runs
Fixed
- JS Minification Issues - Fixed callback handling in
TextFieldandStatefulTextFieldcomponents that caused
runtime failures in production (minified) JS builds- Refactored state updates to use local wrapper functions instead of capturing mutable state in inline lambdas
- Added
@JsNameannotations to ensure consistent function naming in minified builds
- PlatformRenderer Access - Improved
getPlatformRenderer()to prioritize global store lookup before
CompositionLocal, making it more reliable in minified JS contexts - SSR renderToString Double-wrapping - Fixed
ServerSideRenderUtils.renderPageToStringwhich was wrapping
already-complete HTML documents in another HTML document, causing content to not render properly
Changed
- TextField Components - Added
@JsNameannotations toTextField,StatefulTextField,BasicTextField, and
TextFieldTypefor consistent JS interop - PlatformRendererFacade - Added
@JsNameannotations to all public methods (renderText,renderButton,
renderTextField,renderDiv,renderRow,renderColumn,renderBlock,renderComposable) - PlatformRendererAccessor - Added
@JsNameannotations togetPlatformRenderer,setPlatformRenderer, and
clearPlatformRendererfunctions
Performance
- Build Time Optimization - Significant improvements to build and test execution times:
- Enabled Gradle build cache by default for faster rebuilds
- Disabled
configureondemand(not compatible with KMP JS/WASM targets - see KT-52074) - Added ParallelGC to Kotlin daemon and Gradle JVM for faster garbage collection
- Enabled parallel test execution with
maxParallelForksbased on available CPU cores - Added JVM test process reuse with
forkEvery = 100 - Set
org.gradle.workers.max=4for controlled parallel task execution - Separated slow tests (stress/performance tests) from default test runs:
SSRPerformanceStressTest- Stress tests with 100+ iterationsSSRErrorHandlingTest.testMemoryLeakPrevention- GC-dependent testsKtorIntegrationE2ETest- Embedded server testsQuarkusIntegrationE2ETest- Embedded Vert.x server testsSpringBootRendererHydrationTest- Spring WebFlux testsWebFluxRendererHydrationTest- Reactor-based testsSpringWebFluxRouterTest- Spring router testsCallbackHydrationTest- Coroutine callback tests
- Added
slowTestsGradle task for running excluded slow tests separately - Updated CI workflow to use
--build-cacheand--parallelflags - Expected time savings: 60-70% reduction in JVM test execution time
Summon 0.6.2.2
Changed
- Kotlin 2.3.0 - Updated Kotlin and Kotlin Multiplatform from 2.2.0 to 2.3.0
- AtomicFU 0.30.0-beta - Updated from 0.29.0 to fix "Unsupported API dependency types in test source sets" warning
with Kotlin 2.3.0
Removed
- Examples Directory - Removed the
examples/directory; CLI-generated projects now serve as the canonical examples
Dependencies
- Aether - Updated from 0.2.0.0 to 0.4.2.1
- kotlinx-datetime - Updated from 0.6.2 to 0.7.1
- Kotlin Wrappers - Updated from 2025.10.14 to 2025.12.11
- Chart.js - Updated from 4.4.1 to 4.4.7
- markdown-it - Updated from 14.0.0 to 14.1.0
- highlight.js - Updated from 11.9.0 to 11.11.0
- Quarkus - Updated from 3.15.7 to 3.20.4
- Ktor - Updated from 3.3.1 to 3.3.3
- Spring Boot - Updated from 3.5.7 to 3.5.9
- Spring Framework - Updated from 6.2.12 to 6.2.14
- Reactor Core - Updated from 3.7.12 to 3.7.14
- Reactor Kotlin Extensions - Updated from 1.2.4 to 1.2.5
- GraalVM Native Image - Updated from 0.11.2 to 0.11.3
- kaml - Updated from 0.102.0 to 0.104.0
- commons-io - Updated from 2.20.0 to 2.21.0
- Kotest - Updated from 5.9.1 to 6.0.7
- jsoup - Updated from 1.18.3 to 1.22.1
- Binary Compatibility Validator - Updated from 0.16.3 to 0.17.0
Summon 0.6.2.1
Fixed
- Native Form Submission - Forms with server-side
actionattribute now bypass hydration event interception, allowing native browser form submission to work correctly - Added
data-native-formmarker toFormcomponent when using action-based submission
Summon 0.6.2.0
Fixed
- DOCTYPE Declaration Missing - Fixed
renderComposableRooton JVM to include<!DOCTYPE html>declaration, preventing browser quirks mode and ensuring standards-compliant rendering
Summon 0.6.1.0
Added
- Type-Safe CSS Enums - Added type-safe enum overloads for all CSS property modifiers:
fontWeight(FontWeight)- Accept FontWeight enum directlyfontWeight(Int)- Accept numeric values (100-900)color(Color)- Accept Color class directlybackgroundColor(Color)- Accept Color class directlybackground(Color)- Accept Color class directlycursor(Cursor)- Accept Cursor enum directlyobjectFit(ObjectFit)- Accept ObjectFit enum directly
- ObjectFit Enum - Added new
ObjectFitenum with values:Fill,Contain,Cover,None,ScaleDown
Changed
- All modifier functions now prefer type-safe enum parameters over raw strings for better compile-time safety
Summon 0.6.0
Added
- Platform-Agnostic Layout Primitives - Implemented high-level application structure components including
Scaffold,TopAppBar,BottomNavigation,NavigationDrawer,BottomSheet,FloatingActionButton,Snackbar,NavigationRail,SplitPane, andSidebar. - Window Insets Support - Added
WindowInsetsAPI andModifier.windowInsetsPaddingto handle system safe areas (notches, status bars). - Gesture System - Implemented a unified gesture detection system with
GestureDetectorsupporting tap, double tap, long press, drag, pinch, and rotate. AddedModifier.gesturesandModifier.onContextMenu. - Drag and Drop - Enhanced drag and drop support with
DragEventandDataTransferAPI. AddedModifier.onDragStart,Modifier.onDrop, etc. - Context Menu - Added
ContextMenuAreacomponent andContextMenuItemfor creating context menus. - WASI Export Surface - Added
WasiExportobject and export functions (summon_entry,summon_event) to enable compiling Summon towasm32-wasifor headless environments. - CBOR UI Tree - Implemented
UiTree,UiNode, andUiPatchdata structures with serialization support (currently JSON-backed) for headless rendering and interop. - Theme DSL - Added a type-safe DSL for defining themes.
- Tooltip API - Added
Tooltipcomponent with automatic positioning. - Clipboard API - Added
ClipboardAPIfor reading/writing to system clipboard. - Cursor Styles - Added
Modifier.cursorfor changing mouse cursor appearance. - Focus Management - Implemented
FocusRequesterand keyboard navigation support. - Semantic Accessibility - Added comprehensive accessibility support with ARIA mapping and semantic modifiers.
- Navigation - Implemented a platform-agnostic routing system with back stack management.
Changed
- Modifier Refactor - Refactored
Modifierto use the Companion Object pattern (similar to Jetpack Compose) for better API ergonomics and extensibility.
Summon 0.5.8.7
Fixed
- State Updates Not Re-rendering UI - Fixed critical bug where state changes via
mutableStateOfwere not triggering UI re-renders in CLI-generated projects- Root cause:
JsApi.renderComposableRoot()was using the extension functionrenderer.renderComposable()which bypassed recomposer setup - The extension function just called
composable()directly without setting upRecomposerHolderorcomposeInitial() - Solution: Changed to use the proper
renderComposable(renderer, composable, container)function fromComposable.ktthat sets up recomposition correctly
- Root cause:
Changed
- Auto-publish to Maven Central - Added
publishingType=AUTOMATICto Central Portal upload URLs so packages are automatically published after validation passes (no manual approval needed)