A beautiful, cross-platform client for the Jules API
Features β’ Installation β’ Usage β’ Development β’ Contributing
Jules Client is a modern, cross-platform application built with Kotlin Multiplatform and Compose Multiplatform. It provides a seamless interface to interact with the Jules API across Android, iOS, Desktop, and Web platforms.
- π€ Android - Native Android app (API 24+)
- π iOS - Native iOS app (iOS 14+)
- π» Desktop - JVM-based desktop app (Windows, macOS, Linux)
- π Web - WebAssembly support (coming soon)
- β¨ Unified SDK - Type-safe API client with comprehensive error handling
- π¨ Customizable Themes - Multiple built-in themes with custom theme support
- πΎ Smart Caching - Intelligent cache management for optimal performance
- ποΈ Local Database - SQLDelight-powered offline storage
- π Reactive State - StateFlow-based reactive architecture
- π Cross-Platform - Single codebase for all platforms
- π― Material Design 3 - Modern, beautiful UI following Material Design guidelines
- β‘ Fast & Responsive - Optimized performance with efficient caching
- π Secure - API key management with secure storage
- π± Native Feel - Platform-specific implementations where it matters
- JDK 11+ for Desktop and Android builds
- Android Studio (latest stable) for Android development
- Xcode 14+ for iOS development
- Gradle 8.0+ (included via wrapper)
-
Clone the repository
git clone https://github.com/yourusername/JulesClient.git cd JulesClient -
Build the project
./gradlew build
-
Run on your platform
Android:
./gradlew :composeApp:installDebug
iOS:
open iosApp/iosApp.xcodeproj # Then run from XcodeDesktop:
./gradlew :composeApp:run
import dev.therealashik.jules.sdk.JulesClient
// Initialize the client
val client = JulesClient(baseUrl = "https://api.jules.example.com")
// Set your API key
client.setApiKey("your-api-key-here")
// Make API calls
val response = client.getSessions()The Jules SDK provides a clean, type-safe interface to the Jules API:
// Get sessions
val sessions = client.getSessions()
// Get session details
val session = client.getSession(sessionId = "123")
// Send a message
val response = client.sendMessage(
sessionId = "123",
message = "Hello, Jules!"
)// Apply a built-in theme
ThemeManager.setTheme(ThemePreset.DARK)
// Create a custom theme
val customTheme = Theme(
background = "#000000",
surface = "#111111",
surfaceHighlight = "#222222",
border = "#333333",
primary = "#4444ff",
textMain = "#ffffff",
textMuted = "#aaaaaa"
)
ThemeManager.setCustomTheme(customTheme)JulesClient/
βββ julesSDK/ # Unified SDK module
β βββ src/commonMain/ # API client & models
βββ composeApp/ # Main application
β βββ src/commonMain/ # Shared code
β β βββ api/ # API integration (deprecated)
β β βββ cache/ # Cache manager
β β βββ data/ # Repository layer
β β βββ db/ # Database
β β βββ model/ # Data models
β β βββ ui/ # UI components
β β βββ viewmodel/ # ViewModels
β βββ src/androidMain/ # Android-specific
β βββ src/iosMain/ # iOS-specific
β βββ src/jvmMain/ # Desktop-specific
βββ iosApp/ # iOS app wrapper
βββ web/ # React web app (legacy)
| Layer | Technology |
|---|---|
| Language | Kotlin 2.0+ |
| UI Framework | Compose Multiplatform |
| Networking | Ktor Client |
| Database | SQLDelight |
| Serialization | kotlinx.serialization |
| Build System | Gradle with Kotlin DSL |
| Architecture | MVVM with Repository pattern |
- JulesClient - Main SDK client for API interactions
- JulesRepository - Data layer with caching and database
- CacheManager - Intelligent caching with TTL support
- ThemeManager - Dynamic theme management
- ViewModels - UI state management with StateFlow
# Build all modules
./gradlew build
# Build SDK only
./gradlew :julesSDK:build
# Build app only
./gradlew :composeApp:build# Run all tests
./gradlew test
# Run SDK tests
./gradlew :julesSDK:test
# Run app tests
./gradlew :composeApp:testThis project follows standard Kotlin conventions:
- 4 spaces for indentation
- 120 character line limit
- Trailing commas in multi-line declarations
- Explicit types for public APIs
See AGENTS.md for detailed development guidelines, including:
- Adding new screens
- Implementing API endpoints
- Creating database tables
- Platform-specific code
- Theme customization
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style
- Write tests for new features
- Update documentation as needed
- Ensure all platforms build successfully
- Use the unified SDK for API calls
See AGENTS.md for comprehensive development guidelines.
- SDK Documentation - Complete SDK API reference and usage guide
- AGENTS.md - Comprehensive development guide for AI agents and developers
- WEB_MIGRATION.md - Guide for migrating from the legacy web app
- Unified SDK module
- Android support
- iOS support
- Desktop support
- Theme system
- Cache management
- WebAssembly support
- Offline mode
- Push notifications
- Multi-account support
- Plugin system
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Built with Kotlin Multiplatform
- UI powered by Compose Multiplatform
- Networking via Ktor
- Database by SQLDelight
Made with β€οΈ using Kotlin Multiplatform