Skip to content

Commit eeb99ba

Browse files
committed
Add opinionated project scaffolding with platform templates
- Add .blincproj TOML-based project configuration schema - Create full workspace scaffolding with platforms/, plugins/, src/ - Add platform-specific templates: - Android: Gradle project, MainActivity.kt, AndroidManifest.xml - iOS: Info.plist, AppDelegate.swift, LaunchScreen.storyboard - macOS: Info.plist, entitlements.plist - Windows: app.rc, app.manifest - Linux: .desktop entry, .metainfo.xml - Fix GitHub organization references to project-blinc - Recreate counter example with new scaffold structure - Update PROJECT_PLAN.md with current progress - Add canvas-architecture.md design document
1 parent 37ff67a commit eeb99ba

37 files changed

Lines changed: 3201 additions & 354 deletions

.github/workflows/release.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,25 +168,25 @@ jobs:
168168
169169
### macOS (Apple Silicon)
170170
```bash
171-
curl -fsSL https://github.com/anthropics/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-aarch64-apple-darwin.tar.gz | tar -xz
171+
curl -fsSL https://github.com/project-blinc/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-aarch64-apple-darwin.tar.gz | tar -xz
172172
sudo mv blinc /usr/local/bin/
173173
```
174174
175175
### macOS (Intel)
176176
```bash
177-
curl -fsSL https://github.com/anthropics/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-x86_64-apple-darwin.tar.gz | tar -xz
177+
curl -fsSL https://github.com/project-blinc/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-x86_64-apple-darwin.tar.gz | tar -xz
178178
sudo mv blinc /usr/local/bin/
179179
```
180180
181181
### Linux (x86_64)
182182
```bash
183-
curl -fsSL https://github.com/anthropics/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-x86_64-unknown-linux-gnu.tar.gz | tar -xz
183+
curl -fsSL https://github.com/project-blinc/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-x86_64-unknown-linux-gnu.tar.gz | tar -xz
184184
sudo mv blinc /usr/local/bin/
185185
```
186186
187187
### Linux (ARM64)
188188
```bash
189-
curl -fsSL https://github.com/anthropics/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-aarch64-unknown-linux-gnu.tar.gz | tar -xz
189+
curl -fsSL https://github.com/project-blinc/blinc/releases/download/${{ steps.version.outputs.tag }}/blinc-aarch64-unknown-linux-gnu.tar.gz | tar -xz
190190
sudo mv blinc /usr/local/bin/
191191
```
192192

PROJECT_PLAN.md

Lines changed: 129 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,51 @@ Blinc is a native UI framework powered by Zyntax, featuring:
2222

2323
#### Tasks
2424

25-
- [ ] **CLI Scaffolding** (`blinc_cli`)
26-
- Implement `blinc build` command with target selection
27-
- Implement `blinc dev` with file watcher (notify crate)
28-
- Implement `blinc new` for project scaffolding
29-
- Add `blinc plugin build` for ZRTL plugin compilation
25+
- [x] **CLI Scaffolding** (`blinc_cli`)
26+
- [x] Implement `blinc build` command with target selection
27+
- [x] Implement `blinc dev` with file watcher (notify crate) - *stub ready*
28+
- [x] Implement `blinc new` for project scaffolding
29+
- [x] Implement `blinc init` for in-place initialization
30+
- [x] Implement `blinc plugin build` for ZRTL plugin compilation - *stub ready*
31+
- [x] Implement `blinc doctor` for platform diagnostics
32+
- [x] Implement `blinc info` for toolchain information
33+
- [x] Implement `blinc check` for project validation - *stub ready*
3034

3135
- [ ] **Zyntax Integration**
32-
- Integrate `zyntax_embed` for JIT compilation
33-
- Configure grammar loading from `grammars/blinc.zyn`
34-
- Set up ZRTL plugin discovery and loading
35-
- Implement hot-reload via grammar recompilation
36-
37-
- [ ] **Target Configurations**
38-
- Create `toolchain/targets/android.toml` with NDK settings
39-
- Create `toolchain/targets/ios.toml` with Xcode settings
40-
- Create `toolchain/targets/macos.toml`
41-
- Create `toolchain/targets/windows.toml`
42-
- Create `toolchain/targets/linux.toml`
36+
- [ ] Integrate `zyntax_embed` for JIT compilation
37+
- [ ] Configure grammar loading from `grammars/blinc.zyn`
38+
- [ ] Set up ZRTL plugin discovery and loading
39+
- [ ] Implement hot-reload via grammar recompilation
40+
41+
- [x] **Target Configurations**
42+
- [x] Create `toolchain/targets/android.toml` with NDK settings
43+
- [x] Create `toolchain/targets/ios.toml` with Xcode settings
44+
- [x] Create `toolchain/targets/macos.toml`
45+
- [x] Create `toolchain/targets/windows.toml`
46+
- [x] Create `toolchain/targets/linux.toml`
47+
48+
- [x] **Project Scaffolding System**
49+
- [x] `.blincproj` configuration schema (TOML-based)
50+
- [x] `src/` directory with main.blinc templates
51+
- [x] `plugins/` directory for local plugins
52+
- [x] `platforms/` directory with platform-specific files:
53+
- [x] Android: Gradle project, MainActivity.kt, AndroidManifest.xml
54+
- [x] iOS: Info.plist, AppDelegate.swift, LaunchScreen.storyboard
55+
- [x] macOS: Info.plist, entitlements.plist
56+
- [x] Windows: app.rc (resources), app.manifest
57+
- [x] Linux: .desktop entry, .metainfo.xml (AppStream)
58+
- [x] Project templates: default, minimal, counter
59+
60+
- [x] **CI/CD Infrastructure**
61+
- [x] GitHub Actions CI workflow (ci.yml)
62+
- [x] Android cross-compilation workflow (android.yml)
63+
- [x] Release workflow for CLI distribution (release.yml)
64+
- [x] Install script (scripts/install.sh)
65+
66+
- [x] **Build Optimization**
67+
- [x] `release-small` profile for mobile (opt-level=z, fat LTO, panic=abort)
68+
- [x] Android library size optimization (~530KB from 10MB+)
69+
- [x] Strip symbols in release builds
4370

4471
### 1.2 Blinc Grammar (`blinc.zyn`)
4572

@@ -84,12 +111,12 @@ Signal → Subscribers → Effects/Derived
84111

85112
#### Tasks
86113

87-
- [ ] Implement `Signal<T>` with version tracking
88-
- [ ] Implement `Derived<T>` (memoized computed values)
89-
- [ ] Implement `Effect` (side effects on signal change)
90-
- [ ] Implement automatic dependency tracking
91-
- [ ] Implement batched updates
92-
- [ ] Implement reactive graph topological sorting
114+
- [x] Implement `Signal<T>` with version tracking
115+
- [x] Implement `Derived<T>` (memoized computed values)
116+
- [x] Implement `Effect` (side effects on signal change)
117+
- [x] Implement automatic dependency tracking
118+
- [x] Implement batched updates
119+
- [x] Implement reactive graph topological sorting
93120
- [ ] Export ZRTL C-ABI functions
94121

95122
### 1.4 State Machine Runtime (`blinc_core`)
@@ -106,11 +133,11 @@ Signal → Subscribers → Effects/Derived
106133

107134
#### Tasks
108135

109-
- [ ] Implement `StateMachine` with transition table
110-
- [ ] Implement state entry/exit callbacks
111-
- [ ] Implement guard conditions
112-
- [ ] Implement parallel state regions
113-
- [ ] Implement hierarchical state resolution
136+
- [x] Implement `StateMachine` with transition table
137+
- [x] Implement state entry/exit callbacks
138+
- [x] Implement guard conditions
139+
- [x] Implement parallel state regions
140+
- [x] Implement hierarchical state resolution
114141
- [ ] Export ZRTL C-ABI functions
115142

116143
---
@@ -142,12 +169,12 @@ Signal → Subscribers → Effects/Derived
142169

143170
#### Tasks
144171

145-
- [ ] Implement `Spring` with RK4 integration
146-
- [ ] Implement `KeyframeAnimation` with interpolation
147-
- [ ] Implement `Timeline` with offsets
148-
- [ ] Implement `AnimationScheduler` for frame updates
149-
- [ ] Add easing function library (cubic bezier support)
150-
- [ ] Implement stagger utilities
172+
- [x] Implement `Spring` with RK4 integration
173+
- [x] Implement `KeyframeAnimation` with interpolation
174+
- [x] Implement `Timeline` with offsets
175+
- [x] Implement `AnimationScheduler` for frame updates
176+
- [x] Add easing function library (cubic bezier support)
177+
- [x] Implement stagger utilities
151178
- [ ] Export ZRTL C-ABI functions
152179

153180
### 2.2 Layout Engine (`blinc_layout`)
@@ -156,11 +183,11 @@ Signal → Subscribers → Effects/Derived
156183

157184
#### Tasks
158185

159-
- [ ] Integrate Taffy layout engine
160-
- [ ] Map Blinc style properties to Taffy styles
161-
- [ ] Implement layout tree management
186+
- [x] Integrate Taffy layout engine
187+
- [x] Map Blinc style properties to Taffy styles
188+
- [x] Implement layout tree management
162189
- [ ] Implement dirty tracking for incremental layout
163-
- [ ] Support percentage, pixel, and auto sizing
190+
- [x] Support percentage, pixel, and auto sizing
164191
- [ ] Export ZRTL C-ABI functions
165192

166193
---
@@ -187,11 +214,11 @@ Signal → Subscribers → Effects/Derived
187214

188215
#### Tasks
189216

190-
- [ ] Set up wgpu device and surface
191-
- [ ] Implement rounded rectangle SDF shader
192-
- [ ] Implement shadow shader (Gaussian blur)
193-
- [ ] Implement gradient shader
194-
- [ ] Implement primitive batching
217+
- [x] Set up wgpu device and surface
218+
- [x] Implement rounded rectangle SDF shader
219+
- [x] Implement shadow shader (Gaussian blur)
220+
- [x] Implement gradient shader
221+
- [x] Implement primitive batching
195222
- [ ] Implement texture atlas for caching
196223
- [ ] Optimize draw call batching
197224

@@ -212,12 +239,12 @@ ctx.push_transform(matrix);
212239

213240
#### Tasks
214241

215-
- [ ] Implement `PaintContext` with command recording
216-
- [ ] Implement path building API
217-
- [ ] Implement color and gradient types
218-
- [ ] Implement shape primitives (rect, circle, rounded rect)
219-
- [ ] Implement transform stack
220-
- [ ] Implement clip stack
242+
- [x] Implement `PaintContext` with command recording
243+
- [x] Implement path building API
244+
- [x] Implement color and gradient types
245+
- [x] Implement shape primitives (rect, circle, rounded rect)
246+
- [x] Implement transform stack
247+
- [x] Implement clip stack
221248
- [ ] Integrate with GPU renderer for execution
222249
- [ ] Export ZRTL C-ABI functions
223250

@@ -244,8 +271,8 @@ ctx.push_transform(matrix);
244271

245272
#### Tasks
246273

247-
- [ ] Implement window creation via winit
248-
- [ ] Implement event loop integration
274+
- [x] Implement window creation via winit
275+
- [x] Implement event loop integration
249276
- [ ] Implement keyboard input handling
250277
- [ ] Implement mouse/trackpad input
251278
- [ ] Implement DPI scaling
@@ -258,13 +285,20 @@ ctx.push_transform(matrix);
258285

259286
#### Tasks
260287

261-
- [ ] Implement NativeActivity integration
262-
- [ ] Implement JNI bridge for system APIs
288+
- [x] Implement NativeActivity integration
289+
- [x] Implement JNI bridge for system APIs
263290
- [ ] Implement touch input handling
264-
- [ ] Implement Vulkan/GLES surface creation
291+
- [x] Implement Vulkan/GLES surface creation
265292
- [ ] Implement lifecycle management (pause/resume)
266293
- [ ] Implement soft keyboard handling
267-
- [ ] Create Gradle project template
294+
- [x] Create Gradle project template
295+
296+
#### Build Infrastructure
297+
298+
- [x] Android NDK cross-compilation (API 35)
299+
- [x] aarch64-linux-android target
300+
- [x] x86_64-linux-android target (for emulator)
301+
- [x] Optimized library size (~530KB)
268302

269303
### 4.3 iOS Platform (`blinc_platform_ios`)
270304

@@ -278,7 +312,7 @@ ctx.push_transform(matrix);
278312
- [ ] Implement safe area insets
279313
- [ ] Implement keyboard handling
280314
- [ ] Implement lifecycle management
281-
- [ ] Create Xcode project template
315+
- [x] Create Xcode project template
282316

283317
---
284318

@@ -378,9 +412,10 @@ File Change → Grammar Recompile → JIT Update → State Preserved
378412

379413
#### Tasks
380414

381-
- [ ] Unit tests for reactive system
382-
- [ ] Unit tests for state machines
383-
- [ ] Unit tests for animation
415+
- [x] Unit tests for reactive system
416+
- [x] Unit tests for state machines
417+
- [x] Unit tests for animation
418+
- [x] Integration tests for blinc_core
384419
- [ ] Integration tests for widget rendering
385420
- [ ] Visual regression tests
386421
- [ ] Performance benchmarks
@@ -399,6 +434,41 @@ File Change → Grammar Recompile → JIT Update → State Preserved
399434

400435
---
401436

437+
## Current Status Summary
438+
439+
### Completed ✓
440+
441+
| Component | Status |
442+
|-----------|--------|
443+
| **blinc_core** | Reactive signals, FSM runtime, tests passing |
444+
| **blinc_animation** | Springs (RK4), keyframes, timelines, easing |
445+
| **blinc_layout** | Taffy integration, style mapping |
446+
| **blinc_gpu** | wgpu setup, SDF shaders, gradients |
447+
| **blinc_paint** | Paint context, paths, shapes, transforms |
448+
| **blinc_cli** | Full CLI with new/init/build/dev/doctor/info |
449+
| **blinc_platform_android** | NDK integration, JNI bridge, Vulkan |
450+
| **CI/CD** | GitHub Actions for CI, Android, releases |
451+
| **Project Scaffolding** | .blincproj, platforms/, plugins/, templates |
452+
453+
### In Progress
454+
455+
| Component | Status |
456+
|-----------|--------|
457+
| **Zyntax Integration** | Waiting for Grammar2/Runtime2 |
458+
| **ZRTL C-ABI exports** | Pending Zyntax integration |
459+
| **Text Rendering** | Not started |
460+
| **Widget Library** | Not started |
461+
462+
### Next Priorities
463+
464+
1. **Zyntax Grammar2 Integration** - Enable .blinc file parsing
465+
2. **ZRTL Function Exports** - Bridge Rust runtime to Zyntax
466+
3. **Text Rendering** - Font loading and glyph rendering
467+
4. **Core Widgets** - Button, Text, Container basics
468+
5. **Hot Reload** - File watcher + JIT recompilation
469+
470+
---
471+
402472
## Technical Decisions
403473

404474
### Why Zyntax?
@@ -431,41 +501,10 @@ File Change → Grammar Recompile → JIT Update → State Preserved
431501

432502
---
433503

434-
## File Structure
435-
436-
```
437-
blinc/
438-
├── Cargo.toml # Workspace
439-
├── blinc.toml # Toolchain config
440-
├── grammars/
441-
│ └── blinc.zyn # DSL grammar
442-
├── crates/
443-
│ ├── blinc_cli/ # CLI toolchain
444-
│ ├── blinc_core/ # Reactivity + FSM
445-
│ ├── blinc_animation/ # Springs + Keyframes
446-
│ ├── blinc_layout/ # Flexbox (Taffy)
447-
│ ├── blinc_gpu/ # GPU renderer
448-
│ ├── blinc_paint/ # Canvas API
449-
│ ├── blinc_widgets/ # Widget library
450-
│ └── blinc_embed/ # Embedding SDK
451-
├── extensions/ # ZRTL plugins
452-
│ ├── blinc_platform_desktop/
453-
│ ├── blinc_platform_android/
454-
│ └── blinc_platform_ios/
455-
├── toolchain/
456-
│ ├── targets/ # Platform configs
457-
│ └── templates/ # Project templates
458-
└── examples/
459-
└── counter/
460-
└── main.blinc
461-
```
462-
463-
---
464-
465504
## Success Metrics
466505

467506
1. **Performance**: 120 FPS on target devices
468507
2. **Hot Reload**: < 100ms from save to update
469-
3. **Binary Size**: < 5MB for minimal app
508+
3. **Binary Size**: < 5MB for minimal app (Android ~530KB achieved)
470509
4. **Memory**: < 50MB for typical app
471510
5. **Developer Experience**: Intuitive DSL, helpful errors

0 commit comments

Comments
 (0)