cnativeapi
nativeapi C API에 대한 원시 Dart FFI 바인딩. 네이티브 라이브러리는 빌드 후크에서 소스로부터 빌드됩니다.
Dart/Flutter, Rust, C#, JS/TS, Python을 위한 원격 시스템 API(윈도우, 트레이 아이콘, 메뉴, 디스플레이, 다이얼로그 등)에 대한 통합 접근성으로, 하나의 C++ 코어 기반 구축.
nativeapi C API에 대한 원시 Dart FFI 바인딩. 네이티브 라이브러리는 빌드 후크에서 소스로부터 빌드됩니다.
nativeapi용 Dart 바인딩 - 원본 시스템 API에 원활하고 통합된 접근을 제공합니다.
nativeapi용 플러터 통합: 위젯, dart:ui 변환 및 package:nativeapi 기반의 다중 창 브리지.
^7.1.1아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
Unified access to native system APIs — windows, tray icons, menus, displays, keyboard, dialogs, storage and more — from Dart/Flutter, Rust, C#, JavaScript/TypeScript, Python and Go, all built on one C++ core.
| Android | iOS | Linux | macOS | Windows |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
🚧 Work in Progress: the API is under active development.
This repository is the home of every binding: the Dart, Rust, C#, JS, Python and Go bindings, the code generator, the design specs and the shared tooling live here directly, and the C++ core (nativeapi-core) is checked out as a git submodule. A core change and its regenerated bindings (core → codegen → bindings) are made and tracked together.
| Binding | Packages | Status |
|---|---|---|
| Dart / Flutter | nativeapi, cnativeapi on pub.dev; nativeapi_flutter (not yet published) |
published |
| Rust | nativeapi, cnativeapi on crates.io |
published |
| C# | NativeAPI |
not yet on NuGet; build from source |
| JavaScript / TypeScript | nativeapi (Node-API addon for Node.js, Deno and Bun) |
not yet on npm |
| Python | nativeapi (ctypes, Python 3.10+) |
prototype, not yet on PyPI |
| Go | github.com/libnativeapi/nativeapi/bindings/go (cgo, Go 1.22+) |
build from source |
Each binding's README covers installation and usage.
This repository was nativeapi-flutter, then nativeapi-workspace, and is now nativeapi; the old names redirect here, and its history, issues and stars carry over. The histories of the former workspace, nativeapi-rust and nativeapi-csharp repositories are merged in, so the Rust and C# bindings keep their full history under bindings/. The old nativeapi-rust and nativeapi-csharp repositories are archived.
| Path | Description |
|---|---|
| core | submodule: the C++ core library (nativeapi-core) |
| bindings/dart | Dart binding (packages nativeapi, cnativeapi, nativeapi_flutter) |
| bindings/rust | Rust binding (crates nativeapi, cnativeapi) |
| bindings/csharp | C# binding |
| bindings/js | JavaScript / TypeScript binding (Node-API addon) |
| bindings/python | Python binding (ctypes) |
| bindings/go | Go binding (cgo) |
| examples | example apps of every binding, prefixed by binding: flutter_*, rust_*, csharp_*, js_*, python_*, go_*, … |
| tools/codegen | the C ABI and binding generators |
| specs | design rules for the core's public API |
git clone --recursive https://github.com/libnativeapi/nativeapi.git
Already cloned without --recursive?
git submodule update --init --recursive
The root pubspec.yaml is the pub workspace (and melos) root for the Dart packages and the Flutter examples, and the root Cargo.toml is the cargo workspace for the Rust crates and examples, so flutter pub get and cargo build run from the repository root. The C# solution is bindings/csharp/NativeAPI.slnx.
tools/codegen generates the C ABI and all language bindings from the C++ headers in core/. Run it via the wrapper script:
./codegen # full run: C ABI, then all bindings
./codegen check # verify generated files are up to date (CI mode)
./codegen readme # copy the shared README sections (tools/readme/) into every README
./codegen sync # after a core change: regenerate everything, rerun
# bindgen/ffigen, and commit core, then this repo
# (add --push to also push, -m "..." for the core message)
See tools/codegen/README.md for details.
make status # working-tree status of this repo and the core submodule
make sync # fast-forward core to origin/main
make bump # stage the updated core pointer for commit
Work on the bindings, the tooling and the specs is committed here directly. Work inside core is committed and pushed from that subdirectory as if it were a standalone clone; this repository then records the updated pointer once the combination is known to be compatible.
Each binding is released from a tag of its own: v<version> publishes the Dart packages to pub.dev (dart-release.yml), rust-v<version> publishes the crates to crates.io (rust-release.yml). The C#, JS, Python and Go bindings are not published yet.
MIT