{"id":47793306,"url":"https://github.com/ykmnkmi/native_toolchain_zig.dart","last_synced_at":"2026-04-03T15:58:14.554Z","repository":{"id":333606564,"uuid":"1135688405","full_name":"ykmnkmi/native_toolchain_zig.dart","owner":"ykmnkmi","description":"Zig support for Dart's build hooks. Automatically builds and bundles your Zig code with your Dart/Flutter application.","archived":false,"fork":false,"pushed_at":"2026-03-30T03:25:24.000Z","size":575,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T05:55:44.425Z","etag":null,"topics":["dart","ffi","interop","native-assets","native-toolchain","zig"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/native_toolchain_zig","language":"C","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/ykmnkmi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2026-01-16T13:00:26.000Z","updated_at":"2026-02-20T16:44:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ykmnkmi/native_toolchain_zig.dart","commit_stats":null,"previous_names":["ykmnkmi/native_toolchain_zig.dart"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ykmnkmi/native_toolchain_zig.dart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykmnkmi%2Fnative_toolchain_zig.dart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykmnkmi%2Fnative_toolchain_zig.dart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykmnkmi%2Fnative_toolchain_zig.dart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykmnkmi%2Fnative_toolchain_zig.dart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ykmnkmi","download_url":"https://codeload.github.com/ykmnkmi/native_toolchain_zig.dart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykmnkmi%2Fnative_toolchain_zig.dart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31362351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["dart","ffi","interop","native-assets","native-toolchain","zig"],"created_at":"2026-04-03T15:58:13.763Z","updated_at":"2026-04-03T15:58:14.535Z","avatar_url":"https://github.com/ykmnkmi.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔧 native_toolchain_zig\n\n[![Pub Version][pub_badge]][pub_link]\n[![Dart CI][dart_ci]][dart_ci_link]\n[![License: MIT][license_badge]][license_link]\n\nZig support for Dart's [build hooks][dart_hooks].\nAutomatically builds and bundles your Zig code with your Dart/Flutter application.\n\n\u003e [!NOTE]\n\u003e If you want to use `ffigen` to auto-generate Dart bindings, you'll need to\n\u003e manually write a C header file. Automatic header generation from Zig is\n\u003e currently blocked by ziglang/zig#9698.\n\n### Prerequisites\n\nInstall [Zig 0.15.0+][zig_download] on your development machine.\n\n### Installation\n\n```bash\ndart pub add hooks native_toolchain_zig\n```\n\n### Project Setup\n\n1. Create your Zig project in `my_project/zig/`:\n\n```\nmy_package/\n├── hook/\n│   └── build.dart\n├── lib/\n│   └── my_package.dart\n├── zig/\n│   ├── src/\n│   │   └── lib.zig\n│   ├── build.zig\n│   └── build.zig.zon\n└── pubspec.yaml\n```\n\n2. Create `hook/build.dart`:\n\n```dart\nimport 'package:hooks/hooks.dart';\nimport 'package:native_toolchain_zig/native_toolchain_zig.dart';\n\nFuture\u003cvoid\u003e main(List\u003cString\u003e arguments) async {\n  await build(arguments, (input, output) async {\n    await ZigBuilder(\n      assetName: 'my_package.dart',\n      zigDir: 'zig/',\n    ).run(input: input, output: output);\n  });\n}\n```\n\n3. Create `zig/build.zig`:\n\n```zig\nconst std = @import(\"std\");\n\npub fn build(b: *std.Build) void {\n    const target = b.standardTargetOptions(.{});\n    const optimize = b.standardOptimizeOption(.{});\n\n    const lib = b.addLibrary(.{\n        .name = \"my_package\",\n        .linkage = .dynamic,\n        .root_module = b.createModule(.{\n            .root_source_file = b.path(\"src/lib.zig\"),\n            .target = target,\n            .optimize = optimize,\n        }),\n    });\n\n    b.installArtifact(lib);\n}\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eBuild both static and dynamic libraries\u003c/strong\u003e\u003c/summary\u003e\n\nTo produce both library types in a single build:\n\n```zig\nconst std = @import(\"std\");\n\npub fn build(b: *std.Build) void {\n    const target = b.standardTargetOptions(.{});\n    const optimize = b.standardOptimizeOption(.{});\n\n    const root_module = b.createModule(.{\n        .root_source_file = b.path(\"src/lib.zig\"),\n        .target = target,\n        .optimize = optimize,\n    });\n\n    // Dynamic library (.so, .dylib, .dll)\n    const dynamic_lib = b.addLibrary(.{\n        .name = \"my_package\",\n        .linkage = .dynamic,\n        .root_module = root_module,\n    });\n\n    b.installArtifact(dynamic_lib);\n\n    // Static library (.a, .lib)\n    const static_lib = b.addLibrary(.{\n        .name = \"my_package\",\n        .linkage = .static,\n        .root_module = root_module,\n    });\n\n    b.installArtifact(static_lib);\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSelect linkage via command line\u003c/strong\u003e\u003c/summary\u003e\n\nTo control linkage type via a custom `-Dlinkage` option, first accept it in\nyour `build.zig`:\n\n```zig\nconst std = @import(\"std\");\n\npub fn build(b: *std.Build) void {\n    const target = b.standardTargetOptions(.{});\n    const optimize = b.standardOptimizeOption(.{});\n\n    const linkage = b.option(\n        std.builtin.LinkMode,\n        \"linkage\",\n        \"Library linkage type\",\n    ) orelse .dynamic;\n\n    const lib = b.addLibrary(.{\n        .name = \"my_package\",\n        .linkage = linkage,\n        .root_module = b.createModule(.{\n            .root_source_file = b.path(\"src/lib.zig\"),\n            .target = target,\n            .optimize = optimize,\n        }),\n    });\n\n    b.installArtifact(lib);\n}\n```\n\nThen pass the flag from Dart via `extraArguments` in `hook/build.dart`:\n\n```dart\nimport 'package:hooks/hooks.dart';\nimport 'package:native_toolchain_zig/native_toolchain_zig.dart';\n\nFuture\u003cvoid\u003e main(List\u003cString\u003e arguments) async {\n  await build(arguments, (input, output) async {\n    await ZigBuilder(\n      assetName: 'my_package.dart',\n      zigDir: 'zig/',\n      // Forward the linkage option to zig build\n      extraArguments: ['-Dlinkage=static'],\n    ).run(input: input, output: output);\n  });\n}\n```\n\n\u003c/details\u003e\n\n4. Create `zig/build.zig.zon`:\n\n```zig\n.{\n    .name = .my_package,\n    .version = \"0.1.0\",\n    .minimum_zig_version = \"0.15.0\",\n    .fingerprint = 0x..........,\n    .paths = .{\n        \"src\",\n        \"build.zig\",\n        \"build.zig.zon\",\n    },\n}\n```\n\n\u003e [!IMPORTANT]\n\u003e The `paths` field drives **incremental build tracking**. `ZigBuilder` parses\n\u003e `build.zig.zon` and registers every file and directory listed in `paths` as a\n\u003e build dependency. When any of those files change, Dart's build system\n\u003e automatically re-triggers the Zig build. Make sure `paths` includes all source\n\u003e directories and files your build depends on (e.g. `\"src\"`, C headers,\n\u003e embedded data files).\n\u003e\n\u003e The `name` field (`.my_package`) is a comptime enum literal and is ignored.\n\n5. Create `zig/src/lib.zig`:\n\n```zig\nexport fn add(a: i32, b: i32) i32 {\n    return a + b;\n}\n```\n\n6. Create Dart bindings in `lib/my_package.dart`:\n\n```dart\nimport 'dart:ffi';\n\n@Native\u003cInt32 Function(Int32, Int32)\u003e()\nexternal int add(int a, int b);\n```\n\n7. Run your app:\n\n```bash\ndart run\n```\n\n## Example\n\nAn example can be found in [/example/][example].\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n\u003c!-- Badges --\u003e\n\n[pub_badge]: https://img.shields.io/pub/v/native_toolchain_zig\n[pub_link]: https://pub.dev/packages/native_toolchain_zig\n[dart_ci]: https://github.com/ykmnkmi/native_toolchain_zig.dart/actions/workflows/ci.yaml/badge.svg\n[dart_ci_link]: https://github.com/ykmnkmi/native_toolchain_zig.dart/actions\n[example]: https://github.com/ykmnkmi/native_toolchain_zig.dart/tree/main/example\n[license_badge]: https://img.shields.io/badge/license-MIT-purple.svg\n[license_link]: https://opensource.org/licenses/MIT\n\n\u003c!-- Links --\u003e\n\n[dart_hooks]: https://dart.dev/tools/hooks\n[zig_download]: https://ziglang.org/download/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykmnkmi%2Fnative_toolchain_zig.dart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fykmnkmi%2Fnative_toolchain_zig.dart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykmnkmi%2Fnative_toolchain_zig.dart/lists"}