How jonathanpeppers/spice works
Spice is a minimal cross-platform UI framework for building native iOS and Android apps from C# view objects, with an optional Blazor hybrid web view. The main workflow is to create an Application, assign its Main view tree, and let the platform-specific partial implementations host native controls. Theme support follows system appearance changes. The Blazor branch hosts a Razor root component and bridges web content with native code. The README documents the broad control set; sampled source confirms application hosting, theming, and parts of the Blazor bridge, but not every control’s implementation wiring.
Main entry points: Application.cs Application · BlazorWebView.cs BlazorWebView · Android Android implementations · iOS iOS implementations
Components 20
App and Theme
- Application
src/Spice/Core/Application.cs - Theme
src/Spice/Core/Theme.cs - Platform appearance
src/Spice/Core/PlatformAppearance.cs
View Model
- View
src/Spice/Core/View.cs - Layouts
src/Spice/Core/StackLayout.cs - Controls
src/Spice/Core/Button.cs - Navigation and collections
src/Spice/Core/NavigationView.cs - WebView
src/Spice/Core/WebView.cs
Native Platforms
- Android implementations
src/Spice/Platforms/Android - iOS implementations
src/Spice/Platforms/iOS - iOS appearance monitor
src/Spice/Platforms/iOS/SpiceViewController.cs
Blazor Hybrid
- BlazorWebView
src/Spice/Blazor/BlazorWebView.cs - Blazor services
src/Spice/Blazor/SpiceServiceProvider.cs - Android web manager
src/Spice/Platforms/Android/Blazor/AndroidWebViewManager.cs - Android web client
src/Spice/Platforms/Android/Blazor/SpiceBlazorWebViewClient.cs - Android asset provider
src/Spice/Platforms/Android/Blazor/AndroidAssetFileProvider.cs - iOS web manager
src/Spice/Platforms/iOS/Blazor/iOSWebViewManager.cs - iOS file provider
src/Spice/Platforms/iOS/Blazor/iOSFileProvider.cs
Other components
- App developer
- System appearance
Connections 27
- App developer → Application: creates
- Application → View: sets Main
- Application → Theme: applies
- System appearance → Platform appearance: notifies
- iOS appearance monitor → Platform appearance: detects changes
- Platform appearance → Application: updates theme
- Application → Android implementations: hosts Main
- Application → iOS implementations: hosts Main
- View → Layouts: composes
- View → Controls: composes
- View → Navigation and collections: composes
- Layouts → Android implementations: maps to native
- Layouts → iOS implementations: maps to native
- Controls → Android implementations: maps to native
- Controls → iOS implementations: maps to native
- App developer → BlazorWebView: configures
- Application → BlazorWebView: hosts Main
- BlazorWebView → Blazor services: uses services
- BlazorWebView → Android web manager: renders with
- BlazorWebView → iOS web manager: renders with
- Android web client → Android web manager: loads content
- Android web client → Android asset provider: requests assets
- iOS web manager → iOS file provider: requests assets
- Android web manager → Android implementations: uses WebView
- iOS web manager → iOS implementations: uses WebView
- WebView → Android implementations: maps to native
- WebView → iOS implementations: maps to native