You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Blinc is a GPU-accelerated, cross-platform UI framework that enables developers to build production-quality desktop, mobile, and embedded applications from a single Rust codebase. The framework aims to match the quality of native platform UIs while providing a unified developer experience across all targets.
Phase 1: Desktop Production Readiness
Goal: Make Blinc viable for shipping real desktop applications.
1.1 System Integration (P0)
Feature
Status
Notes
File dialogs (open/save/folder)
Done
Via rfd crate, blinc_app::dialog module
System tray / status bar icon
Done
blinc_app::tray::TrayIconBuilder via tray-icon + muda
Native OS notifications
Done
blinc_app::notify::Notification via notify-rust
Drag and drop
Done
Window-level on_file_drop() + element-level .on_file_drop() on Div
Resumed/Suspended/LowMemory events, Android full lifecycle mapping
Native bridge API (Rust side)
Done
native_call(), native_register(), PlatformAdapter trait in blinc_core
Native bridge streams
Done
native_stream() — bidirectional data (camera, audio, sensors) with auto-cleanup
Push notifications, camera, location, biometrics, status bar theming are implemented as example native bridge extensions — not in the framework core, but as documented templates that demonstrate the bridge API:
Android: BlincNativeBridge.register("camera", "capture", handler) in Kotlin
iOS: BlincNativeBridge.shared.register(namespace:name:handler:) in Swift
Dead code elimination, const folding, static layout pre-computation
Planned
Build integration
build.rs or proc-macro for compile-time processing
Planned
3.3 Features
Feature
Priority
Notes
Component definitions
P0
component Name { state, view, style }
Reactive state
P0
state block with typed fields
Template expressions
P0
{variable} interpolation in text/attributes
Scoped CSS
P0
style block compiled to stylesheet
Props / inputs
P0
Typed component parameters
Conditional rendering
P0
if/else in template
List rendering
P0
for item in list { ... }
Event handlers
P0
on_click, on_change, etc.
Slot / children
P1
<slot> for composition
Animation declarations
P1
animate, transition in style block
Import system
P1
Cross-file component references
Hot reload
P2
File watcher + incremental recompile
LSP server
P2
Autocomplete, diagnostics, go-to-definition
VS Code extension
P2
Syntax highlighting, inline preview
3.4 Compilation Strategy
.blinc source
|
v
[Zyntax Lexer] -> tokens
|
v
[Zyntax Parser] -> AST
|
v
[Type Checker] -> validated AST
|
v
[Rust Codegen] -> fn component_name(ctx) -> impl ElementBuilder { ... }
|
v
[Cargo Build] -> native binary (zero runtime overhead)
Key principle: zero-cost abstraction. The DSL compiles entirely at build time. No interpreter, no runtime template engine. The output is the same Rust builder API calls a developer would write by hand.
Phase 4: Rendering & GPU
Goal: Complete the rendering pipeline for advanced visual content.
4.1 3D Mesh Rendering (P1)
Feature
Status
Notes
Generic mesh data
Done
MeshData + Vertex + Material — users convert from glTF/OBJ/FBX
draw_mesh_data
Done
DrawContext::draw_mesh_data(mesh, transform) — direct render, no registration
AABB visibility test before GPU upload, shadow/rotation/affine-aware
GPU memory budget
Done
GpuMemoryBudget with LRU eviction, 128 MB default, env var override
4.4 Text & Fonts (P2)
Feature
Status
Notes
Lazy per-codepoint emoji loader
Planned
Network-fetched glyph loader for dynamic text — similar to Google Fonts' CSS2 API. Covers runtime strings (user input, fetched content, chat messages) whose codepoints weren't in the build-time emoji subset. Targets web/wasm and non-Apple platforms that don't ship a bundled Color Emoji font. Requires: (1) async FontRegistry::load_glyph_async(codepoint) entry point, (2) a hosted glyph service or a per-codepoint chunked font asset, (3) a pending-glyph placeholder in the shaper so layout doesn't shift when glyphs arrive. Escape hatch for the build-time emoji subsetter (which covers statically-known strings).
Phase 5: Developer Experience
Goal: Make Blinc a joy to develop with.
5.1 Tooling (P1)
Feature
Status
Notes
Hot reload
Planned
File watcher + incremental rebuild
Visual inspector
Partial
blinc_debugger exists, needs UI overlay
Animation debugger
Planned
Timeline view, pause/step
Layout debugger
Planned
Flexbox visualization (like browser devtools)
Performance profiler
Planned
Frame time, GPU utilization, batch count
5.2 IDE Integration (P2)
Feature
Status
Notes
VS Code extension
Planned
Zyntax syntax highlighting + preview
LSP for .blinc files
Planned
Autocomplete, diagnostics
Component preview
Planned
Inline rendering in editor
Code snippets
Planned
Common patterns and widgets
5.3 Documentation (P1)
Feature
Status
Notes
Blinc Book
Partial
Core concepts, 3D rendering, flow shaders (vertex/material), routing, media
API reference (rustdoc)
Partial
Many crates need doc improvements
Interactive examples
Done
40+ live WebGPU demos in mdBook gallery, auto-generated from cross-target examples