x.com/@DeepIssueMassaj
Summon
📦 IMPORTANT: Group ID Migration (November 2025)
Summon is migrating from io.github.codeyousef to codes.yousef!
- Version 0.5.0.0 will be the LAST release under
io.github.codeyousef
- Please switch your dependencies to
codes.yousef as soon as possible
Action Required:
Update your dependencies from:
implementation("io.github.codeyousef:summon:0.6.2.2")
To:
implementation("codes.yousef:summon:0.6.2.2")
See Migration Guide below for details.
⚠️ Alpha Status: Summon is currently in alpha development and actively seeking testers and feedback. While core functionality is stable, APIs may change between releases. We welcome early adopters and contributors! Please report issues and share your experience.
Summon is a powerful, type-safe frontend framework for Kotlin Multiplatform that brings the elegance of Jetpack Compose to both browser and JVM environments. Build beautiful, responsive applications with a declarative syntax that feels natural to Kotlin developers.
Project Structure
This monorepo contains:
summon-core/ - The main Summon library
summon-cli/ - Command-line tool for project generation
diagnostics/ - Stress tests, leak detectors, and JMH benchmarks
docs/ - Documentation and guides
📝 Examples: Example projects showing various integrations have been moved to a separate repository for cleaner core library maintenance.
🎨 Type-safe styling with an intuitive modifier API inspired by Compose.
🧩 Component-based architecture for maximum reusability and maintainability.
🔄 Reactive state management that automatically updates your UI when data changes.
Summon combines the best ideas from modern frontend frameworks like React, Vue, and Next.js with the declarative UI patterns of Jetpack Compose and SwiftUI, while leveraging Kotlin's powerful type system to catch errors at compile time rather than runtime. Whether you're building a simple website or a complex web application, Summon provides the tools you need to create polished, professional user interfaces with less code and fewer bugs.
Features
Component Categories
Summon provides a comprehensive set of UI components organized into logical categories:
Input Components
Layout Components
Display Components
- Text - Text display with styling
- Image - Image display component
- Icon - Icon component with various sources
- Badge - Small status indicator
Feedback Components
Navigation Components
- Link - Navigation links
- TabLayout - Tab-based navigation
Utility Components
- Div - Basic container element
- AccessibleElement - Accessibility wrapper
Network and Communication
- WebSocket - Cross-platform WebSocket with auto-reconnection and lifecycle management
- HttpClient - Comprehensive HTTP client with JSON and form data support
- Storage - Local, session, and memory storage abstraction with TypedStorage wrapper
Inspiration
Summon draws inspiration from several excellent projects:
- Kobweb - Modern full-stack web framework built on Compose HTML. Kobweb's elegant API design shaped Summon's philosophy.
- (Sébastien Deleuze) - Pioneered SSR + WASM hydration patterns, proving WASM maintains SEO compatibility.
Summon stands on the shoulders of these giants and the broader Kotlin/WASM community.
Documentation
For detailed documentation, please check the docs directory:
API Reference
Comprehensive API reference documentation is available in the docs/api-reference directory:
Installation
Summon CLI Tool
The Summon CLI helps you quickly scaffold new projects and generate components.
Option 1: Download JAR (Simplest)
Download the latest JAR from GitHub Releases:
java -jar summon-cli-0.6.2.0.jar init my-app
java -jar summon-cli-0.6.2.0.jar --help
Option 2: Build from Source
git clone https://github.com/codeyousef/summon.git
cd summon
./gradlew :summon-cli:shadowJar
java -jar summon-cli/build/libs/summon-cli-0.6.2.0.jar init my-app
Quick Start
java -jar summon-cli-0.6.2.0.jar init portal
java -jar summon-cli-0.6.2.0.jar init landing --mode=standalone --here
java -jar summon-cli-0.6.2.0.jar init portal --mode=fullstack --backend=ktor
After generation (examples)
cd portal
./gradlew build
./gradlew run # Ktor full-stack projects
cd ../portal-spring
./gradlew build
./gradlew bootRun # Spring Boot full-stack projects
cd ../portal-quarkus
./gradlew build
./gradlew unitTest # Lightweight backend checks
./gradlew quarkusDev # Hot reload backend + Summon UI
cd ../landing
./gradlew jsBrowserDevelopmentRun # Standalone browser project
### Summon Library
Add Summon to your project dependencies from Maven Central:
```kotlin
repositories {
mavenCentral()
}
dependencies {
implementation("codes.yousef:summon-jvm:.")
("codes.yousef:summon-js:.")
("codes.yousef:summon-wasm-js:.")
("codes.yousef:summon:.")
}
📦 Migration Note: If you're upgrading from an older version, change io.github.codeyousef to codes.yousef in
your dependencies. Both group IDs will be published until version 0.5.0.0 for compatibility.
Note: No authentication required - Summon is available directly from Maven Central!
Group ID Migration
Why We're Migrating
We're transitioning from io.github.codeyousef to codes.yousef to:
- Use our official domain (
codes.yousef)
- Simplify the group ID structure
- Align with Maven Central best practices
Migration Timeline
How to Migrate
Step 1: Update Your Dependencies
In your build.gradle.kts, change:
dependencies {
implementation("io.github.codeyousef:summon:0.4.7.0")
}
To:
dependencies {
implementation("codes.yousef:summon:0.6.2.0")
}
Step 2: Update Imports (If Using Direct Imports)
If you have any hardcoded imports (unlikely), update:
import io.github.codeyousef.summon.*
import codes.yousef.summon.*
Note: For most users, you don't need to change imports - they're handled automatically by your dependencies.
Step 3: Verify
Run ./gradlew build to ensure everything compiles correctly.
Backward Compatibility
- Versions 0.4.8.7 through 0.5.0.0: Published to BOTH group IDs
- Version 0.6.2.0 onwards: Published ONLY to
codes.yousef
- No code changes required: Just update the dependency declaration
Need Help?
If you encounter issues during migration:
- Check that you've updated ALL Summon dependencies
- Clean your build:
./gradlew clean
- Refresh dependencies:
./gradlew --refresh-dependencies
- File an issue on GitHub if problems persist
Version Management
Summon uses a centralized version management approach to ensure consistency across the main project and example projects. The version information is defined in a single place and referenced from all other places.
For more information, see VERSIONING.md.
WebAssembly (WASM) Support
Summon 0.4.0.0 introduces comprehensive WebAssembly support, bringing near-native performance to web applications while
maintaining full compatibility with server-side rendering and JavaScript fallbacks.
Getting Started with WASM
Create a new project with the Summon CLI, then enable the WASM target using the steps that follow:
java -jar summon-cli-0.6.2.0.jar init my-wasm-app --mode=standalone
Basic WASM Application
WASM Features
🚀 Performance Benefits
- Near-Native Speed: Execute at 95%+ of native performance
- Minimal Startup Time: Sub-100ms initialization
- Memory Efficiency: Precise garbage collection and memory management
- Bundle Optimization: Tree-shaking and dead code elimination
🌐 Browser Compatibility
- Progressive Enhancement: Automatic fallback to JavaScript
- Browser Detection: Smart feature detection and capability assessment
- Polyfill Support: Seamless compatibility across browser versions
- Mobile Optimization: Optimized for mobile browsers and PWA
🔄 SSR Integration
- Seamless Hydration: Server-rendered content enhanced with WASM interactivity
- SEO Compatibility: Full search engine crawling with enhanced performance
- State Synchronization: Server state automatically synced to WASM client
- Progressive Loading: Initial content renders immediately, WASM loads in background
WASM Build Configuration
kotlin {
wasmJs {
moduleName = "my-wasm-app"
browser {
commonWebpackConfig {
outputFileName = "my-wasm-app.js"
}
}
binaries.executable()
}
}
dependencies {
implementation("codes.yousef:summon-wasm-js:0.6.2.0")
}
Production Deployment
Performance Comparison
WASM Development Tools
The Summon CLI provides comprehensive WASM development tools:
./gradlew wasmJsBrowserDevelopmentRun
./gradlew wasmJsBrowserProductionWebpack
./gradlew wasmJsBrowserDevelopmentRun --continuous
./gradlew wasmJsBrowserDistribution
Server-Side Rendering (SSR)
Summon provides production-ready Server-Side Rendering capabilities for improved SEO, faster initial page loads, and better user experience. The SSR implementation includes full composition context management, state handling, and client-side hydration.
Basic SSR Usage
Advanced SSR with SEO and Hydration
SSR Benefits
- SEO Optimization: Search engines can crawl your content immediately
- Faster Initial Load: Users see content before JavaScript loads
- Better Performance: Especially on slow devices and networks
- Improved Accessibility: Content is available even if JavaScript fails
- Social Media Sharing: Rich previews with OpenGraph metadata
Framework Integration
SSR works seamlessly with popular JVM frameworks:
- Ktor: Integrate with routing and HTML responses
- Spring Boot: Use with WebFlux and Thymeleaf templates
- Quarkus: Combine with Qute templates and reactive endpoints
See our integration guides for detailed framework-specific examples.
For maintainers: Publishing instructions are available at docs/private/publishing.md.
🎉 Contributing to the Ecosystem
Summon aims to give back to the Kotlin/WASM community by:
- Sharing implementation techniques and patterns
- Contributing to upstream projects where appropriate
- Documenting lessons learned and best practices
- Supporting other developers building WASM applications
Together, we're building the future of web development with Kotlin! 🚀