{"id":32349836,"url":"https://github.com/home-lang/craft","last_synced_at":"2026-04-02T12:12:58.769Z","repository":{"id":319714463,"uuid":"1079117528","full_name":"home-lang/craft","owner":"home-lang","description":"Performant, native desktop \u0026 mobile apps with web languages.","archived":false,"fork":false,"pushed_at":"2026-04-02T02:45:24.000Z","size":31250,"stargazers_count":9,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-02T02:50:23.205Z","etag":null,"topics":["css","electron","html","javascript","tauri","typescript","zig"],"latest_commit_sha":null,"homepage":"","language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/home-lang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["stacksjs","chrisbbreuer"],"open_collective":"stacksjs"}},"created_at":"2025-10-19T06:09:48.000Z","updated_at":"2026-03-26T19:19:42.000Z","dependencies_parsed_at":"2025-10-24T00:34:52.680Z","dependency_job_id":"3956396c-297e-42b4-93aa-c15f625be7e6","html_url":"https://github.com/home-lang/craft","commit_stats":null,"previous_names":["stacksjs/zyte","home-lang/craft"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/home-lang/craft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-lang%2Fcraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-lang%2Fcraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-lang%2Fcraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-lang%2Fcraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/home-lang","download_url":"https://codeload.github.com/home-lang/craft/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-lang%2Fcraft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","electron","html","javascript","tauri","typescript","zig"],"created_at":"2025-10-24T08:02:58.981Z","updated_at":"2026-04-02T12:12:58.763Z","avatar_url":"https://github.com/home-lang.png","language":"Zig","funding_links":["https://github.com/sponsors/stacksjs","https://github.com/sponsors/chrisbbreuer","https://opencollective.com/stacksjs"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\".github/art/cover.jpg\" alt=\"Social Card of this repo\"\u003e\u003c/p\u003e\n\n[![npm version][npm-version-src]][npm-version-href]\n[![GitHub Actions][github-actions-src]][github-actions-href]\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)\n\u003c!-- [![npm downloads][npm-downloads-src]][npm-downloads-href] --\u003e\n\u003c!-- [![Codecov][codecov-src]][codecov-href] --\u003e\n\n# Craft\n\nCraft is a lightweight, high-performance cross-platform application framework. Create native apps that work on macOS, Linux, Windows, iOS, and Android with web technologies - all with a tiny ~297KB binary and blazing fast ~168ms startup time.\n\n## Features\n\n### 🌍 Platform Support\n\n- 🖥️ **Desktop** - macOS, Linux, Windows\n- 📱 **Mobile** - iOS _(WKWebView, UIKit)_ and Android _(WebView, Activity)_\n- 🪟 **Menubar Apps** - Native system tray/menubar integration\n- ⚡ **Native Performance** - ~168ms startup, \u003c1% CPU idle, ~86MB memory\n- 🪶 **Tiny Binary** - ~297KB binary size _(1351x smaller than Electron)_\n- 🔧 **Zig-Powered** - Built with Zig for maximum performance\n\n### 📱 Mobile Platform Support\n\n- **iOS Integration**\n  - WKWebView with JavaScript bridge\n  - UIKit native components\n  - Haptic feedback _(light, medium, heavy, selection, success, warning, error)_\n  - Device permissions _(camera, location, notifications, photos, contacts, microphone)_\n  - Orientation support _(portrait, landscape)_\n  - Status bar control\n  - App lifecycle management\n\n- **Android Integration**\n  - WebView with JavaScript interface\n  - Activity lifecycle\n  - Permissions system\n  - Vibration and haptic feedback\n  - File access and storage\n  - Material Design support\n\n### 🎨 Native Components Library (35 Total)\n\n**Input Components**\n\n- Button, TextInput, Checkbox, RadioButton\n- Slider (with snapping, labels, percentage), ColorPicker (RGB/HSL/Hex), DatePicker, TimePicker\n- Autocomplete (fuzzy search, keyboard nav)\n\n**Display Components**\n\n- Label, ImageView, ProgressBar, Spinner\n- Avatar, Badge, Chip, Card\n- Tooltip (8 positions, 6 themes), Toast (notifications)\n\n**Layout Components**\n\n- ScrollView, SplitView, Accordion, Stepper\n- Modal, Tabs, Dropdown\n\n**Data Components**\n\n- ListView, Table, TreeView, DataGrid\n- Chart (line, bar, pie)\n\n**Navigation Components**\n\n- TabView, Menu, Toolbar, StatusBar\n\n**Advanced Components**\n\n- Rating (star ratings with half-star support)\n- CodeEditor (syntax highlighting)\n- MediaPlayer (video/audio)\n\n### 🪟 Menubar Applications\n\nBuild native menubar/system tray apps with full platform support:\n\n**Features**\n\n- Native system tray icons\n- Custom menus with shortcuts\n- Tooltip support\n- Click handlers (left, right, double, middle)\n- Window attachment for popover-style UIs\n- Notifications integration\n\n**Platform Implementations**\n\n- macOS: NSStatusBar integration\n- Linux: AppIndicator/StatusNotifier\n- Windows: System tray via Shell_NotifyIcon\n\n### 🎮 Advanced GPU Rendering\n\n**Rendering Pipeline**\n\n- Multi-backend support (Vulkan, Metal, Direct3D)\n- Shader management (vertex, fragment, compute)\n- Buffer management (vertex, index, uniform, storage)\n- Texture and render target support\n- Mesh rendering with vertex data\n\n**Effects \u0026 Post-Processing**\n\n- 10 built-in effects: Bloom, Blur, Sharpen, Vignette\n- Chromatic Aberration, Film Grain, Color Grading\n- Tone Mapping, Anti-Aliasing, Ambient Occlusion\n\n**Advanced Features**\n\n- Compute shader support\n- Ray tracing with acceleration structures\n- Multi-GPU support\n- GPU profiling and performance monitoring\n\n### 🖥️ System Integration\n\n**Notifications**\n\n- Native OS notifications\n- Custom titles, bodies, icons\n- Action buttons\n- Urgency levels (low, normal, critical)\n- Click callbacks\n\n**Clipboard**\n\n- Text read/write\n- Image support\n- File paths\n- Watch for changes\n\n**File Dialogs**\n\n- Open file/multiple files\n- Save file\n- Select directory\n- Custom file type filters\n- Default paths\n\n**System Info**\n\n- OS name and version\n- CPU information\n- Memory stats (total, available, used)\n- System uptime\n\n**Power Management**\n\n- Battery status and level\n- Charging state\n- Prevent/allow sleep\n- Power state monitoring\n\n**Screen Management**\n\n- Multi-monitor support\n- Screen resolution and scaling\n- Primary screen detection\n- Screen positioning\n\n**URL Handling**\n\n- Open URLs in default browser\n- Register custom URL schemes\n- Deep linking support\n\n### 🛠️ Developer Experience\n\n- 📟 **Powerful CLI** - 20+ command-line flags for quick prototyping\n- 🔍 **DevTools** - Built-in WebKit DevTools (right-click \u003e Inspect Element)\n- 🎨 **Custom Styles** - Frameless, transparent, always-on-top windows\n- 🌉 **JavaScript Bridge** - Seamless communication between JS and native code\n- ⚙️ **Configuration** - TOML-based config files\n- 📊 **Logging** - Structured logging system\n- 🔥 **Hot Reload** - File watching with state preservation (scroll, forms, focus, custom state)\n- 🎯 **Error Handling** - Context-aware errors with stack traces, metadata, recovery strategies\n- 📈 **Performance Monitoring** - Built-in benchmarking suite, memory tracking, FPS monitoring\n- 🐛 **Enhanced Debugging** - Beautiful error overlays, color-coded output, actionable suggestions\n\n### 🪟 Window Management\n\n- 📏 **Position Control** - Precise window positioning (x, y)\n- 🖥️ **Fullscreen** - Native fullscreen mode\n- 🔄 **State Management** - Minimize, maximize, close, hide, show\n- ↔️ **Resize Control** - Custom resize behavior\n- 🪟 **Multi-Window** - Multiple window support\n- 🖥️ **Multi-Monitor** - Multi-monitor awareness\n\n### 🎯 Advanced Features\n\n- 📡 **Advanced IPC** - Message passing, channels, RPC, shared memory\n- 🖌️ **Native Rendering** - Canvas API, pixel manipulation\n- ⌨️ **Enhanced Shortcuts** - 90+ key codes with modifiers\n- ♿ **Accessibility** - WCAG 2.1 AAA compliance with 40+ ARIA roles\n  - Focus management with trap support\n  - Keyboard navigation system (Tab, Arrow, Home, End keys)\n  - Screen reader announcements (4 priority levels)\n  - Contrast ratio checker (validates AA/AAA standards)\n  - Semantic HTML mapping\n  - 69 comprehensive accessibility tests\n- 🌓 **Advanced Theming** - Nord, Dracula, Gruvbox, custom themes\n- 💨 **Performance** - LRU caching, object pooling, lazy loading, memoization\n- 📊 **Monitoring** - Built-in performance profiling and benchmarking\n  - Statistical analysis (mean, median, std dev, ops/sec)\n  - Memory allocation tracking\n  - JSON and text report generation\n\n### ✨ Async \u0026 State\n\n- 🔄 **Async/Await** - Non-blocking I/O, streaming, promises, channels\n- 🧩 **WebAssembly** - WASM plugin system with sandboxing\n- 🎬 **Animations** - 31 easing functions, keyframes, springs\n- 🔄 **State Management** - Reactive state with observers, undo/redo\n\n### 🏢 Enterprise Ready\n\n- 🔌 **Plugin System** - Dynamic library loading with marketplace\n- 🛡️ **Sandbox** - 7 permission types for security\n- 🌐 **i18n** - Internationalization with RTL support\n- 🔐 **Code Signing** - macOS, Windows, Linux\n- 📦 **Installers** - DMG, PKG, MSI, DEB, RPM, AppImage\n- 🔄 **Auto-Updater** - Built-in update mechanism\n- 📸 **Screen Capture** - Screenshots and recording\n- 🖨️ **Print Support** - Native printing\n- 📥 **Downloads** - Download management\n- 🔌 **WebSocket** - Real-time communication\n- 🔗 **Custom Protocols** - Register custom URL handlers (craft://)\n- 🎯 **Drag \u0026 Drop** - File drag and drop support\n\n## Quick Start\n\nThe fastest way to get started is with `create-craft`:\n\n```bash\n# Create a new Craft app\nbun create craft my-app\n\n# Navigate to your app\ncd my-app\n\n# Start development\nbun run dev\n```\n\nChoose from multiple templates:\n\n- **minimal** - Simplest possible app\n- **full-featured** - Modern styled app with examples\n- **todo-app** - Interactive todo list\n\n```bash\n# Use a specific template\nbun create craft my-app --template full-featured\n```\n\n**See [create-craft documentation](./packages/create-craft/README.md) for all options.**\n\n### Try the Examples\n\nExplore ready-to-run examples in the `examples/` directory:\n\n```bash\n# Simple system tray app\nbun run examples/simple-tray.ts\n\n# Full-featured system tray app\nbun run examples/system-tray-app.ts\n\n# Pomodoro timer with live menubar updates (recommended!)\nbun run examples/pomodoro.ts\n\n# Alternative Pomodoro timer\nbun run examples/menubar-timer.ts\n```\n\n**See [examples documentation](./examples/README.md) for more details.**\n\n## Get Started\n\n### TypeScript/JavaScript (Recommended)\n\nBuild desktop apps with TypeScript - zero dependencies, just pure Node.js APIs:\n\n```bash\n# Install the TypeScript SDK\nbun add @craft-native/craft\n```\n\n```typescript\n// app.ts\nimport { show } from '@craft-native/craft'\n\nconst html = `\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cstyle\u003e\n    body {\n      margin: 0;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      height: 100vh;\n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n      color: white;\n      font-family: system-ui;\n    }\n  \u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n  \u003ch1\u003e⚡ My First Craft App\u003c/h1\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n`\n\n// That's it! One line to show your desktop app\nawait show(html, { title: 'My App', width: 800, height: 600 })\n```\n\n```bash\n# Run it\nbun run app.ts\n```\n\n**See [TypeScript SDK Documentation](./packages/@craft-native/craft/README.md) for the full API.**\n\n### Zig (Advanced)\n\nFor advanced use cases where you need maximum performance and control:\n\n```bash\n# Install via npm\nnpm install -g @craft-native/craft\n\n# Or with Bun\nbun add -g @craft-native/craft\n```\n\n### Build from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/home-lang/craft.git\ncd craft\n\n# Install Zig 0.15.1\n# macOS\nbrew install zig\n\n# Linux\nwget https://ziglang.org/download/0.15.1/zig-linux-x86_64-0.15.1.tar.xz\ntar -xf zig-linux-x86_64-0.15.1.tar.xz\n\n# Build\nzig build\n\n# Run\n./zig-out/bin/craft http://localhost:3000\n```\n\n### Platform-Specific Dependencies\n\n**Linux:**\n\n```bash\nsudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev\n```\n\n**Windows:**\n\n```powershell\nwinget install Microsoft.EdgeWebView2Runtime\n```\n\n## Usage Examples\n\n### Desktop Application\n\n```zig\nconst std = @import(\"std\");\nconst craft = @import(\"craft\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    defer _ = gpa.deinit();\n    const allocator = gpa.allocator();\n\n    var app = craft.App.init(allocator);\n    defer app.deinit();\n\n    _ = try app.createWindowWithURL(\n        \"My App\",\n        1200,\n        800,\n        \"http://localhost:3000\",\n        .{\n            .dark_mode = true,\n            .hot_reload = true,\n        },\n    );\n\n    try app.run();\n}\n```\n\n### Menubar Application\n\n```zig\nconst menubar = @import(\"menubar.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    const allocator = gpa.allocator();\n\n    // Create menu\n    var menu = try menubar.Menu.init(allocator);\n    defer menu.deinit();\n\n    const show_item = menubar.MenuItem.init(allocator, \"Show Window\", showWindow);\n    try menu.addItem(show_item);\n\n    try menu.addSeparator();\n\n    const quit_item = menubar.MenuItem.init(allocator, \"Quit\", quit);\n    try menu.addItem(quit_item);\n\n    // Create menubar app\n    var app = try menubar.MenubarBuilder.new(allocator, \"My App\")\n        .icon(\"icon.png\")\n        .tooltip(\"My Menubar App\")\n        .menu(menu)\n        .build();\n    defer app.deinit();\n\n    try app.show();\n}\n\nfn showWindow() void {\n    std.debug.print(\"Show window\\n\", .{});\n}\n\nfn quit() void {\n    std.process.exit(0);\n}\n```\n\n### Mobile Application (iOS)\n\n```zig\nconst mobile = @import(\"mobile.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    const allocator = gpa.allocator();\n\n    const config = mobile.iOS.AppConfig{\n        .bundle_id = \"com.example.myapp\",\n        .display_name = \"My App\",\n        .supported_orientations = \u0026[_]mobile.Orientation{\n            .portrait,\n            .landscape_left,\n            .landscape_right,\n        },\n        .status_bar_style = .light,\n    };\n\n    const webview_config = mobile.iOS.WebViewConfig{\n        .url = \"http://localhost:3000\",\n        .enable_javascript = true,\n        .enable_devtools = true,\n    };\n\n    const webview = try mobile.iOS.createWebView(allocator, webview_config);\n    defer mobile.iOS.destroyWebView(webview);\n\n    // Request permissions\n    try mobile.iOS.requestPermission(.camera, onPermissionGranted);\n\n    // Setup haptic feedback\n    mobile.iOS.triggerHaptic(.success);\n}\n\nfn onPermissionGranted(granted: bool) void {\n    if (granted) {\n        std.debug.print(\"Permission granted!\\n\", .{});\n    }\n}\n```\n\n### Using Native Components\n\n```zig\nconst components = @import(\"components.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    const allocator = gpa.allocator();\n\n    // Create a button\n    var button = try components.Button.init(allocator, \"Click Me\", onClick);\n    defer button.deinit();\n    button.setEnabled(true);\n\n    // Create a date picker\n    var date_picker = try components.DatePicker.init(allocator, onDateChange);\n    defer date_picker.deinit();\n\n    // Create a tree view\n    var tree = try components.TreeView.init(allocator);\n    defer tree.deinit();\n\n    var root = try tree.createNode(\"Root\");\n    var child1 = try tree.createNode(\"Child 1\");\n    var child2 = try tree.createNode(\"Child 2\");\n\n    try root.addChild(child1);\n    try root.addChild(child2);\n    try tree.setRoot(root);\n\n    // Create a rating component\n    var rating = try components.Rating.init(allocator, 5, onRatingChange);\n    defer rating.deinit();\n    rating.setRating(4.5);\n}\n\nfn onClick() void {\n    std.debug.print(\"Button clicked!\\n\", .{});\n}\n\nfn onDateChange(year: i32, month: u8, day: u8) void {\n    std.debug.print(\"Date: {}-{}-{}\\n\", .{ year, month, day });\n}\n\nfn onRatingChange(rating: f32) void {\n    std.debug.print(\"Rating: {d:.1}\\n\", .{rating});\n}\n```\n\n### System Integration\n\n```zig\nconst system = @import(\"system.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    const allocator = gpa.allocator();\n\n    // Show notification\n    const notification = system.Notification.init(\"Hello\", \"Welcome to Craft!\");\n    try notification.show();\n\n    // Clipboard operations\n    var clipboard = try system.Clipboard.init(allocator);\n    defer clipboard.deinit();\n\n    try clipboard.setText(\"Hello, clipboard!\");\n    if (try clipboard.getText()) |text| {\n        std.debug.print(\"Clipboard: {s}\\n\", .{text});\n    }\n\n    // File dialog\n    const file_dialog = system.FileDialog{\n        .title = \"Open File\",\n        .filters = \u0026[_]system.FileFilter{\n            .{ .name = \"Text Files\", .extensions = \u0026[_][]const u8{\".txt\"} },\n        },\n    };\n\n    if (try file_dialog.openFile()) |path| {\n        std.debug.print(\"Selected: {s}\\n\", .{path});\n    }\n\n    // System info\n    const info = try system.SystemInfo.get(allocator);\n    defer info.deinit();\n\n    std.debug.print(\"OS: {s} {s}\\n\", .{ info.os_name, info.os_version });\n    std.debug.print(\"CPU: {s} ({} cores)\\n\", .{ info.cpu_brand, info.cpu_cores });\n    std.debug.print(\"RAM: {} MB\\n\", .{info.total_memory / 1024 / 1024});\n\n    // Battery status\n    const battery = try system.PowerManagement.getBatteryInfo();\n    std.debug.print(\"Battery: {}% (charging: {})\\n\", .{ battery.level, battery.is_charging });\n}\n```\n\n### GPU Rendering\n\n```zig\nconst gpu = @import(\"gpu.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    const allocator = gpa.allocator();\n\n    // Initialize GPU context\n    var ctx = try gpu.Context.init(allocator, .vulkan);\n    defer ctx.deinit();\n\n    // Create render pipeline\n    var pipeline = try gpu.RenderPipeline.init(allocator, \u0026ctx);\n    defer pipeline.deinit();\n\n    // Create shader\n    const vertex_shader = try pipeline.createShader(.{\n        .vertex = \"path/to/vertex.glsl\",\n    });\n\n    // Create mesh\n    const vertices = [_]f32{ /* vertex data */ };\n    var mesh = try gpu.Mesh.init(allocator, \u0026vertices, null);\n    defer mesh.deinit();\n\n    // Apply post-processing\n    var post_processor = try gpu.PostProcessor.init(allocator, \u0026ctx);\n    defer post_processor.deinit();\n\n    try post_processor.addEffect(.bloom, .{ .intensity = 0.5 });\n    try post_processor.addEffect(.anti_aliasing, .{ .samples = 4 });\n\n    // Render\n    try pipeline.render(\u0026[_]gpu.RenderCommand{\n        .{ .draw_mesh = mesh },\n    });\n}\n```\n\n### CLI Usage\n\n```bash\n# Launch a local development server\ncraft http://localhost:3000\n\n# With custom options\ncraft http://localhost:3000 \\\n  --title \"My App\" \\\n  --width 1200 \\\n  --height 800 \\\n  --dark \\\n  --hot-reload\n\n# Frameless transparent window\ncraft http://localhost:3000 \\\n  --frameless \\\n  --transparent \\\n  --always-on-top\n```\n\n## Package System\n\nCraft uses a flexible package configuration system that supports multiple formats:\n\n### Supported Configuration Files\n\nCraft automatically searches for configuration files in the following order:\n\n1. `craft.toml` (TOML format)\n2. `craft.json` (JSON format)\n3. `package.jsonc` (JSON with comments)\n4. `package.json` (standard JSON, undocumented but supported)\n\n### Configuration Formats\n\n#### TOML Configuration (`craft.toml`)\n\n```toml\n[package]\nname = \"my-craft-app\"\nversion = \"0.1.0\"\nauthors = [\"Your Name \u003cyou@example.com\u003e\"]\ndescription = \"A cross-platform desktop application\"\nlicense = \"MIT\"\n\n[dependencies]\n# Local path dependency\ncraft-ui = { path = \"../craft-ui\" }\n\n# Git dependency\ncraft-http = { git = \"https://github.com/user/craft-http.git\" }\n\n# Version dependency (from registry)\ncraft-database = { version = \"^1.2.0\" }\n\n[workspaces]\npackages = [\"packages/*\", \"apps/*\"]\n\n[scripts]\ndev = \"zig build run\"\ntest = \"zig build test\"\nbuild = \"zig build -Doptimize=ReleaseFast\"\nformat = \"find src -name '*.zig' -exec zig fmt {} +\"\n```\n\n#### JSON Configuration (`craft.json` or `package.jsonc`)\n\n```json\n{\n  \"name\": \"my-craft-app\",\n  \"version\": \"0.1.0\",\n  \"authors\": [\"Your Name \u003cyou@example.com\u003e\"],\n  \"description\": \"A cross-platform desktop application\",\n  \"license\": \"MIT\",\n\n  \"dependencies\": {\n    \"craft-ui\": { \"path\": \"../craft-ui\" },\n    \"craft-http\": { \"git\": \"https://github.com/user/craft-http.git\" },\n    \"craft-database\": \"^1.2.0\"\n  },\n\n  \"workspaces\": {\n    \"packages\": [\"packages/*\", \"apps/*\"]\n  },\n\n  \"scripts\": {\n    \"dev\": \"zig build run\",\n    \"test\": \"zig build test\",\n    \"build\": \"zig build -Doptimize=ReleaseFast\",\n    \"format\": \"find src -name '*.zig' -exec zig fmt {} +\"\n  }\n}\n```\n\n### Dependency Types\n\n**Local Path Dependencies**\n\n```toml\n[dependencies]\nmy-lib = { path = \"../my-lib\" }\n```\n\n```json\n{\n  \"dependencies\": {\n    \"my-lib\": { \"path\": \"../my-lib\" }\n  }\n}\n```\n\n**Git Dependencies**\n\n```toml\n[dependencies]\nawesome-lib = { git = \"https://github.com/user/awesome-lib.git\" }\n```\n\n```json\n{\n  \"dependencies\": {\n    \"awesome-lib\": { \"git\": \"https://github.com/user/awesome-lib.git\" }\n  }\n}\n```\n\n**Version Dependencies (Registry)**\n\n```toml\n[dependencies]\npopular-lib = { version = \"^1.0.0\" }\n# Or shorthand\nanother-lib = \"^2.0.0\"\n```\n\n```json\n{\n  \"dependencies\": {\n    \"popular-lib\": \"^1.0.0\"\n  }\n}\n```\n\n### Workspace Configuration\n\nOrganize multiple packages in a monorepo structure:\n\n**Root Package (`craft.toml`)**\n\n```toml\n[package]\nname = \"my-workspace\"\nversion = \"0.1.0\"\n\n[workspaces]\npackages = [\n    \"packages/core\",\n    \"packages/ui\",\n    \"packages/cli\",\n    \"apps/*\"\n]\n\n[scripts]\nbuild = \"zig build\"\ntest = \"zig build test\"\n```\n\n**Package in Workspace (`packages/core/craft.toml`)**\n\n```toml\n[package]\nname = \"core\"\nversion = \"0.1.0\"\ndescription = \"Core functionality\"\n\n[dependencies]\nsome-lib = \"^1.0.0\"\n```\n\n### Scripts\n\nDefine custom commands for common tasks:\n\n```toml\n[scripts]\ndev = \"zig build run -Doptimize=Debug\"\nbuild = \"zig build -Doptimize=ReleaseFast\"\ntest = \"zig build test\"\nbench = \"zig build bench\"\nformat = \"zig fmt src/\"\nlint = \"zig build check\"\n```\n\nRun scripts with: `craft run \u003cscript-name\u003e` (planned feature)\n\n### Using in Zig Code\n\n```zig\nconst std = @import(\"std\");\nconst package = @import(\"package.zig\");\n\npub fn main() !void {\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    defer _ = gpa.deinit();\n    const allocator = gpa.allocator();\n\n    // Load package from current directory\n    const pkg = try package.findAndLoadPackage(allocator, \".\");\n    defer pkg.deinit(allocator);\n\n    std.debug.print(\"Package: {s} v{s}\\n\", .{ pkg.name, pkg.version });\n\n    if (pkg.dependencies) |deps| {\n        var it = deps.iterator();\n        while (it.next()) |entry| {\n            std.debug.print(\"  - {s}\\n\", .{entry.key_ptr.*});\n        }\n    }\n}\n```\n\n### Example Package Configurations\n\n**Desktop Application**\n\n```json\n{\n  \"name\": \"my-desktop-app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A beautiful desktop application\",\n  \"authors\": [\"Your Name\"],\n  \"license\": \"MIT\",\n\n  \"dependencies\": {\n    \"craft-ui\": \"^1.0.0\",\n    \"craft-notifications\": \"^0.5.0\"\n  },\n\n  \"scripts\": {\n    \"dev\": \"zig build run\",\n    \"build:mac\": \"zig build -Dtarget=aarch64-macos\",\n    \"build:linux\": \"zig build -Dtarget=x86_64-linux\",\n    \"build:windows\": \"zig build -Dtarget=x86_64-windows\"\n  }\n}\n```\n\n**Menubar Application**\n\n```toml\n[package]\nname = \"menubar-timer\"\nversion = \"0.2.0\"\ndescription = \"A simple menubar timer\"\nlicense = \"MIT\"\n\n[dependencies]\ncraft-menubar = { version = \"^1.0.0\" }\ncraft-notifications = { version = \"^0.5.0\" }\n\n[scripts]\ndev = \"zig build run\"\nbuild = \"zig build -Doptimize=ReleaseFast\"\n```\n\n**Library Package**\n\n```json\n{\n  \"name\": \"craft-database\",\n  \"version\": \"1.2.0\",\n  \"description\": \"SQL database access with SQLite driver\",\n  \"authors\": [\"Craft Contributors\"],\n  \"license\": \"MIT\",\n\n  \"dependencies\": {\n    \"craft-diagnostics\": { \"path\": \"../diagnostics\" }\n  },\n\n  \"scripts\": {\n    \"test\": \"zig test src/database.zig\",\n    \"bench\": \"zig build bench\"\n  }\n}\n```\n\n## Architecture\n\nCraft is built with a modular architecture:\n\n```text\nsrc/\n├── api.zig          # Core API with Result types, builders\n├── mobile.zig       # iOS \u0026 Android platform support\n├── menubar.zig      # Menubar/system tray apps\n├── components.zig   # 31 native UI components\n├── gpu.zig          # Advanced GPU rendering\n├── system.zig       # System integration (notifications, clipboard, etc.)\n├── window.zig       # Window management\n├── ipc.zig          # Inter-process communication\n├── state.zig        # Reactive state management\n├── animation.zig    # Animation engine\n└── package.zig      # Package configuration and management\n```\n\n## Performance\n\nBenchmarked on Apple M3 Pro with Hello World apps. See [`benchmarks/`](./benchmarks/) for full methodology.\n\n| Metric | Craft | Tauri | React Native | Electrobun | Electron |\n|--------|-------|-------|-------------|------------|----------|\n| Binary Size | **297 KB** | 7.69 MB | 20.65 MB | 131 KB* | 392.37 MB |\n| Startup (p50) | **168 ms** | 259 ms | 243 ms | 246 ms | 412 ms |\n| Memory (RSS) | **86 MB** | 106 MB | 109 MB | 148 MB | 369 MB |\n| IPC (single msg) | **532 ns** | 778 ns | — | 760 ns | 837 ns |\n\n_*Electrobun binary is 131 KB but distributable is 60.12 MB_\n\nCraft is **1351x** smaller than Electron, **2.4x** faster to start, and uses **4.3x** less memory.\n\n## Platform Support\n\n| Platform | Status | WebView | Native Components |\n|----------|--------|---------|-------------------|\n| **macOS** | ✅ Production | WKWebView | ✅ All 35 |\n| **Linux** | ✅ Production | WebKit2GTK 4.0+ | ✅ All 35 |\n| **Windows** | ✅ Production | WebView2 (Edge) | ✅ All 35 |\n| **iOS** | ✅ Beta | WKWebView | ✅ UIKit |\n| **Android** | ✅ Beta | WebView | ✅ Material |\n\n## Documentation\n\n- 📖 [API Reference](API_REFERENCE.md) - Complete API documentation\n- 🚀 [Quick Start](QUICK_START.md) - Get started quickly\n- 📘 [Getting Started](GETTING_STARTED.md) - Detailed guide\n- ✨ [Features](FEATURES.md) - Complete feature list\n- 🤝 [Contributing](CONTRIBUTING.md) - Contribution guide\n- 📋 [Changelog](https://github.com/home-lang/craft/releases) - Release history\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n## Community\n\nFor help, discussion about best practices, or any other conversation:\n\n- 💬 [Discussions on GitHub](https://github.com/home-lang/craft/discussions)\n- 💭 [Join the Stacks Discord Server](https://discord.gg/stacksjs)\n\n## Postcardware\n\nCraft is free software, but we'd love to receive a postcard from where you're using it! We showcase them on our website.\n\n**Our address:** Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094, United States 🌎\n\n## Sponsors\n\nWe would like to extend our thanks to the following sponsors for funding Stacks development:\n\n- [JetBrains](https://www.jetbrains.com/)\n- [The Solana Foundation](https://solana.com/)\n\n## License\n\nThe MIT License (MIT). Please see [LICENSE](LICENSE.md) for more information.\n\nMade with 💙\n\n\u003c!-- Badges --\u003e\n[npm-version-src]: https://img.shields.io/npm/v/@craft-native/craft?style=flat-square\n[npm-version-href]: https://npmjs.com/package/@craft-native/craft\n[github-actions-src]: https://img.shields.io/github/actions/workflow/status/home-lang/craft/ci.yml?style=flat-square\u0026branch=main\n[github-actions-href]: https://github.com/home-lang/craft/actions?query=workflow%3Aci\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhome-lang%2Fcraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhome-lang%2Fcraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhome-lang%2Fcraft/lists"}