Skip to content

Releases: codeyousef/summon

Summon 0.7.0.2

10 Feb 07:05

Choose a tag to compare

Fixed

  • Composable rendered twice in fullstack SSR projects - The server-rendered HTML and the
    client-side app both appeared on screen because the generated client Main.kt used
    renderComposableRoot instead of hydrateComposableRoot, causing the JS app to append below
    the static SSR content rather than replacing it
  • renderComposable safety net - Calling renderComposableRoot on an SSR container now
    always clears existing content before rendering, preventing duplicate output even if
    hydrateComposableRoot is not used

Summon 0.7.0.1

09 Feb 21:07

Choose a tag to compare

Fixed

  • SSR 500 error in generated fullstack projects - The app module was missing jvmToolchain(17), causing
    UnsupportedClassVersionError when ./gradlew :backend:run loaded 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

05 Feb 05:44

Choose a tag to compare

Added

HTML DSL Components

  • New components/html/ Package - Complete HTML5 semantic elements DSL
    • HtmlElements.kt - Header, Nav, Main, Footer, Section, Article, Aside, Address, Hgroup, Search
    • TextElements.kt - H1-H6, P, Blockquote, Pre, Code, Strong, Em, Small, Mark, Del, Ins, Sub, Sup, S, U, B, I
    • ListElements.kt - Ul, Ol, Li, Dl, Dt, Dd, Menu
    • TableElements.kt - Table, Thead, Tbody, Tfoot, Tr, Th, Td, Caption, Colgroup, Col
    • InlineElements.kt - A, Span, Time, Abbr, Cite, Q, Kbd, Samp, Var, Dfn, Data, Bdi, Bdo, Ruby, Rt, Rp, Wbr, Br
    • MediaElements.kt - Figure, Figcaption, Iframe, Embed, ObjectTag, Param, Source, Track, Audio, Meter
    • DetailsElements.kt - Details, Summary, Dialog

Modifier Enhancements

  • Breakpoint Shortcut Modifiers - Mobile-first responsive design helpers
    • xs(), sm(), md(), lg(), xl(), xxl() - Min-width breakpoints
    • xsDown(), smDown(), mdDown(), lgDown(), xlDown(), xxlDown() - Max-width breakpoints
    • smOnly(), mdOnly(), lgOnly(), xlOnly() - Exact range breakpoints
    • breakpointBetween(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 instance
    • rememberSynced() - Composable for synced state
  • BroadcastChannel - Cross-window messaging API
    • createBroadcastChannel() - Create messaging channel
    • SummonBroadcastChannel - Cross-platform interface
  • WindowManager - Multi-window management
    • WindowManager.open() - Open new windows/tabs
    • WindowManager.getScreenInfo() - Screen dimensions and capabilities
    • WindowManager.currentWindowId - Unique window identifier
    • WindowManager.moveTo(), resizeTo(), focus() - Window manipulation
  • File Dialogs - File System Access API integration
    • showOpenFileDialog() - Open file picker
    • showSaveFileDialog() - Save file dialog
    • showDirectoryPicker() - Directory selection
    • isFileSystemAccessSupported() - Feature detection
  • MenuBar - Application menu bar component
    • MenuBar() composable with DSL builder
    • MenuItem, Menu, KeyboardShortcut data classes
    • menuBar { } DSL for declarative menu definition
  • SystemTray - System tray support (no-op on web)
    • createTrayIcon() - Create tray icon
    • showNotification() - Web Notifications API fallback
  • Cross-Window Drag and Drop - DragCoordinator using BroadcastChannel
    • DragCoordinator - Coordinate drag operations across windows
    • DragData, DragMessage - Serializable drag payloads
  • Picture-in-Picture - Document PiP API support
    • requestPictureInPicture() - Request PiP window
    • PictureInPictureContent() - Render into PiP window
    • isPictureInPictureSupported() - Feature detection

Changed

  • JVM Renderer - Expanded renderHtmlTag to support 70+ HTML5 elements
  • WASM Renderer - Implemented proper renderHtmlTag with full HTML5 support
  • PlatformRenderer - Added renderMenuBar() method

Deprecated

  • SemanticHTML.kt - All functions deprecated in favor of components/html/ package
    • Header, Main, Nav, Article, Section, Aside, Footer, Heading, Figure, FigCaption

Summon 0.6.3.0

12 Jan 16:51

Choose a tag to compare

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 TextField and StatefulTextField components 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 @JsName annotations 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.renderPageToString which was wrapping
    already-complete HTML documents in another HTML document, causing content to not render properly

Changed

  • TextField Components - Added @JsName annotations to TextField, StatefulTextField, BasicTextField, and
    TextFieldType for consistent JS interop
  • PlatformRendererFacade - Added @JsName annotations to all public methods (renderText, renderButton,
    renderTextField, renderDiv, renderRow, renderColumn, renderBlock, renderComposable)
  • PlatformRendererAccessor - Added @JsName annotations to getPlatformRenderer, setPlatformRenderer, and
    clearPlatformRenderer functions

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 maxParallelForks based on available CPU cores
    • Added JVM test process reuse with forkEvery = 100
    • Set org.gradle.workers.max=4 for controlled parallel task execution
    • Separated slow tests (stress/performance tests) from default test runs:
      • SSRPerformanceStressTest - Stress tests with 100+ iterations
      • SSRErrorHandlingTest.testMemoryLeakPrevention - GC-dependent tests
      • KtorIntegrationE2ETest - Embedded server tests
      • QuarkusIntegrationE2ETest - Embedded Vert.x server tests
      • SpringBootRendererHydrationTest - Spring WebFlux tests
      • WebFluxRendererHydrationTest - Reactor-based tests
      • SpringWebFluxRouterTest - Spring router tests
      • CallbackHydrationTest - Coroutine callback tests
    • Added slowTests Gradle task for running excluded slow tests separately
    • Updated CI workflow to use --build-cache and --parallel flags
    • Expected time savings: 60-70% reduction in JVM test execution time

Summon 0.6.2.2

07 Jan 15:27

Choose a tag to compare

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

28 Dec 15:45

Choose a tag to compare

Fixed

  • Native Form Submission - Forms with server-side action attribute now bypass hydration event interception, allowing native browser form submission to work correctly
  • Added data-native-form marker to Form component when using action-based submission

Summon 0.6.2.0

23 Dec 20:50

Choose a tag to compare

Fixed

  • DOCTYPE Declaration Missing - Fixed renderComposableRoot on JVM to include <!DOCTYPE html> declaration, preventing browser quirks mode and ensuring standards-compliant rendering

Summon 0.6.1.0

23 Dec 19:04

Choose a tag to compare

Added

  • Type-Safe CSS Enums - Added type-safe enum overloads for all CSS property modifiers:
    • fontWeight(FontWeight) - Accept FontWeight enum directly
    • fontWeight(Int) - Accept numeric values (100-900)
    • color(Color) - Accept Color class directly
    • backgroundColor(Color) - Accept Color class directly
    • background(Color) - Accept Color class directly
    • cursor(Cursor) - Accept Cursor enum directly
    • objectFit(ObjectFit) - Accept ObjectFit enum directly
  • ObjectFit Enum - Added new ObjectFit enum 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

23 Dec 18:23

Choose a tag to compare

Added

  • Platform-Agnostic Layout Primitives - Implemented high-level application structure components including Scaffold, TopAppBar, BottomNavigation, NavigationDrawer, BottomSheet, FloatingActionButton, Snackbar, NavigationRail, SplitPane, and Sidebar.
  • Window Insets Support - Added WindowInsets API and Modifier.windowInsetsPadding to handle system safe areas (notches, status bars).
  • Gesture System - Implemented a unified gesture detection system with GestureDetector supporting tap, double tap, long press, drag, pinch, and rotate. Added Modifier.gestures and Modifier.onContextMenu.
  • Drag and Drop - Enhanced drag and drop support with DragEvent and DataTransfer API. Added Modifier.onDragStart, Modifier.onDrop, etc.
  • Context Menu - Added ContextMenuArea component and ContextMenuItem for creating context menus.
  • WASI Export Surface - Added WasiExport object and export functions (summon_entry, summon_event) to enable compiling Summon to wasm32-wasi for headless environments.
  • CBOR UI Tree - Implemented UiTree, UiNode, and UiPatch data 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 Tooltip component with automatic positioning.
  • Clipboard API - Added ClipboardAPI for reading/writing to system clipboard.
  • Cursor Styles - Added Modifier.cursor for changing mouse cursor appearance.
  • Focus Management - Implemented FocusRequester and 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 Modifier to use the Companion Object pattern (similar to Jetpack Compose) for better API ergonomics and extensibility.

Summon 0.5.8.7

18 Dec 08:21

Choose a tag to compare

Fixed

  • State Updates Not Re-rendering UI - Fixed critical bug where state changes via mutableStateOf were not triggering UI re-renders in CLI-generated projects
    • Root cause: JsApi.renderComposableRoot() was using the extension function renderer.renderComposable() which bypassed recomposer setup
    • The extension function just called composable() directly without setting up RecomposerHolder or composeInitial()
    • Solution: Changed to use the proper renderComposable(renderer, composable, container) function from Composable.kt that sets up recomposition correctly

Changed

  • Auto-publish to Maven Central - Added publishingType=AUTOMATIC to Central Portal upload URLs so packages are automatically published after validation passes (no manual approval needed)