Flutter App
ccplugins/awesome-claude-code-plugins
Bootstrap a new Flutter mobile app with clean architecture, Riverpod, FVM-pinned SDK, current packages, and no deprecated APIs.
Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification…
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install libnativeapi/nativeapi core-api-change --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/core-api-change .claude/skills/core-api-change && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .claude/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-changeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install libnativeapi/nativeapi core-api-change --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/core-api-change .agents/skills/core-api-change && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .agents/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install libnativeapi/nativeapi core-api-change --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/core-api-change .cursor/skills/core-api-change && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .cursor/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/libnativeapi/nativeapi.git --path .agents/skills/core-api-change--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install libnativeapi/nativeapi core-api-change --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/core-api-change .gemini/skills/core-api-change && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .gemini/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install libnativeapi/nativeapi core-api-changeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/core-api-change .github/skills/core-api-change && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .github/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add libnativeapi/nativeapi --skill core-api-change -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install libnativeapi/nativeapi core-api-change --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/core-api-change .opencode/skills/core-api-change && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "core-api-change" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/core-api-change into .opencode/skills/core-api-change/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "core-api-change", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
core-api-changeCarry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification…
Core API Change is an agent skill from libnativeapi/nativeapi. Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification, and the commits in core and the workspace. Use this whenever a task adds, renames, removes or reshapes anything in core/src/.h ("add SetSkipTaskbar to Window", "expose X to Flutter", "new module for Y"), whenever generated bindings are stale or ./codegen check fails, and whenever the user says "sync the bindings"…
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Cross-platform mobile apps and Project scaffolding. It works with C#, Python, Rust and Dart. The repository describes itself as: Unified access to native system APIs (windows, tray icons, menus, displays, dialogs, …) for Dart/Flutter, Rust, C, JS/TS and Python, built on one C++ core. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e0ca21a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcmakenpmuvxmakecargodartdotnetnpxflutterFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, npm, uvx and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Core API Change loads about 2.5k tokens when it runs. Until then it costs about 218 tokens; SKILL.md has 1,092 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from libnativeapi/nativeapi at commit e0ca21a, republished under its MIT licence (© libnativeapi). 1,092 words, ~2,506 tokens.
.claude/skills/core-api-change/SKILL.md (or your agent's skills folder)../codegen sync does the mechanical half: regenerate, rerun bindgen / ffigen, commit core and the workspace. This skill is the other half — the decisions
and checks the script cannot make. Work through the phases in order; each one ends in
something you can verify before moving on.
1 design → 2 pre-flight → 3 core edit → 4 regenerate + read the output
→ 5 hand-written layers → 6 verify → 7 commit → 8 reportRead specs/api-style.md and run its checklist against the
signature before writing any platform code — a signature that changes after six
platform files exist is six files of rework. For a new type also read
specs/object-model.md (identity vs value object); for a new module,
specs/architecture.md §5.
Where neighbouring headers disagree, the spec says which side is the rule. Do not copy the nearest neighbour.
./codegen sync runs git add -A in core and git add bindings/<lang> in the workspace,
where every binding (dart, rust, csharp, js, python) lives. Anything lying around in those trees lands in a commit
titled Sync with core <sha>.
make status # dirty files + branch of every submodule
git status --short # workspace itself
for r in core; do
printf '%-18s %s behind origin/main: %s\n' "$r" \
"$(git -C "$r" branch --show-current || echo DETACHED)" \
"$(git -C "$r" rev-list --count HEAD..origin/main 2>/dev/null)"
donegit status --short bindings/)
→ do not run sync. Use the manual
path in §7. Ask the user only if you cannot tell whether the work is related.origin/main → check out main and
fast-forward first. sync refuses detached HEADs, but it does not notice "on main,
10 commits behind", and committing there moves the workspace pointer backwards.sync (it only commits core when core is dirty).core/src/<module>.h, with the Doxygen block and — when behaviour differs
per platform — the six-line @note Platform availability: block.core/src/platform/<os>/<module>_<os>.{cpp,mm}. A platform that cannot
support it still gets a stub (no-op / false / default value); a missing definition
is a link error on that platform only, which you will not see locally.IdTypeTag<T> entry in
core/src/foundation/id_allocator.h. Append only, never renumber.API_HEADERS in
tools/codegen/shared/src/lib.rs (kept roughly in dependency order for
readability; the generator does not depend on it). If a hand-written file of the
same name already exists in a binding, the generator skips it — delete it first.cmake -S core -B core/build && cmake --build core/build -j
ctest --test-dir core/build --output-on-failureOnly the host platform compiles here. Say so in the report; for the others use the
remote-hosts skill or let CI answer.
./codegen 2>&1 | tee /tmp/codegen.log # C ABI, then Rust / Dart / C# / JS / Python
grep -i 'skipped' /tmp/codegen.logThe skipped lines are the point of this step. A method whose signature uses a type the
generator cannot map is dropped with a warning, not an error — the build stays green
and the API is simply absent from every binding. Known baseline (2026-09-17, 8 lines):
three ModifierKey operators, RunApp, class Dialog,
PositioningStrategy::GetRelativeWindow, Shortcut::GetCallback,
KeyboardMonitor::GetInternalEventEmitter. Any line naming your new API means: go back
to §1 and change the signature (api-style.md §7 lists what crosses the bridge).
Then read the generated C header for your module (core/src/capi/<module>_c.h):
_with_<param> suffix means you
added an overload — rename instead (api-style.md §1.6).const,
takes no arguments and starts with Get / Is / Has.GetXxx() const on the event class; unsupported types vanish silently.Never edit a file that starts with // AUTO-GENERATED. DO NOT EDIT. (# AUTO-GENERATED.
in Python) — change the header or the generator and rerun.
Files without the banner are never overwritten, so they are also never updated:
| Repo | Hand-written | When to touch it |
|---|---|---|
bindings/dart | nativeapi/lib/nativeapi.dart (exports), lib/src/widgets/, CHANGELOG.md, examples/flutter_* | new module → add the export; user-visible change → CHANGELOG entry |
bindings/rust | nativeapi/src/lib.rs, examples/rust_* | modules.rs is generated now, so a new module needs no manual pub mod; re-exports in lib.rs still do |
bindings/csharp | examples/csharp_*, tests | when a rename breaks them |
bindings/js | lib/runtime.ts, lib/index.ts, src/addon.cc, src/napi_support.*, src/event_loop_*, test/, examples/js_*, examples/deno_* | lib/modules.ts and src/generated/ are generated, so a new module needs nothing; a rename breaks the tests and examples |
bindings/python | nativeapi/_library.py, nativeapi/_runtime.py, src/event_loop_*, tests/, examples/python_* | nativeapi/__init__.py and _capi.py are generated, so a new module needs nothing; a rename breaks the tests and examples |
| core | examples/<module>_example/, <module>_c_example/ | new module or a behaviour worth demonstrating |
A rename or removal in core breaks hand-written callers in these places — grep each binding for the old name.
./codegen check # generated files are current
cargo check --workspace # Rust crates + examples (root workspace)
(cd bindings/dart/nativeapi && dart analyze)
(cd bindings/csharp && dotnet build NativeAPI.slnx)
npm install && (cd bindings/js && npx tsc -p tsconfig.json --noEmit && npm test) # compiles the addon
cmake -S bindings/python -B bindings/python/build && cmake --build bindings/python/build
(cd bindings/python && uvx ruff check nativeapi tests --select E,F,W,B,UP,I \
&& PYTHONPATH=. uvx --with pytest pytest)JS and Python have no raw-FFI step of their own: their C-facing code is generated
straight from the IR, so ./codegen is all they need. Python's ctypes layer is not
checked by a compiler — a signature mismatch surfaces only when the function is called,
so run the smoke tests (and the example, for event-loop or callback changes).
flutter analyze may rewrite nativeapi/analysis_options.yaml — revert that
before committing. A toolchain that is not installed is a skipped check, not a passed
one; list it as skipped in the report.
For anything with visible behaviour, run the relevant example through the gui-test
skill rather than trusting the compile.
Clean trees (the normal case):
./codegen sync -m "<imperative core commit message>"It commits core with your message, then the workspace as Sync with core <sha9>: the
core pointer plus everything regenerated under bindings/. The bindings build against
core/ directly, so there is no per-binding copy of core to move. It does not push.
A binding has unrelated work — manual path. Same steps, staged narrowly:
git -C core add <paths> && git -C core commit -m ...)../codegen; rust → rerun bindgen (command in tools/codegen/README.md); dart →
./codegen ffigen. JS and Python need nothing beyond ./codegen.git add core plus only the generated paths under bindings/; commit as
Sync with core <sha9>.Either way: no Co-Authored-By trailers; after staging, read git status --short and
git diff --cached --stat in each repo before committing — a file you did not write
showing up there is the signal to stop and unstage.
Push only when asked, and in this order so no remote pointer dangles:
core → workspace (./codegen sync --push does exactly this).
State, per item, what is true rather than what was attempted:
skipped lines: none new, or which;© libnativeapi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/core-api-change of libnativeapi/nativeapi.
Open the folder on GitHubat commit e0ca21a
Core API Change next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Core API Change this skilllibnativeapi/nativeapi | 157 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Flutter Appccplugins/awesome-claude-code-plugins | 967 | — | ~1.1k | Automated safety check: Notes | Apache-2.0 | |
| Frb Upgrade Flutterfzyzcjy/flutter_rust_bridge | 5.4k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Frb Lintfzyzcjy/flutter_rust_bridge | 5.4k | — | ~152 | Automated safety check: Pass | MIT | |
| Solidnank1ro/solid | 165 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Implement Flet Extensionflet-dev/flet | 17k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 |
ccplugins/awesome-claude-code-plugins
Bootstrap a new Flutter mobile app with clean architecture, Riverpod, FVM-pinned SDK, current packages, and no deprecated APIs.
fzyzcjy/flutter_rust_bridge
Upgrade flutterrustbridge to a new Flutter stable release. An agent skill from fzyzcjy/flutter_rust_bridge.
fzyzcjy/flutter_rust_bridge
A skill your agent uses when you need to run lint, format, or clippy checks in flutterrustbridge
nank1ro/solid
PRIORITY — read this skill FIRST before writing Dart code when pubspec.yaml declares solidannotations or solidgenerator.
flet-dev/flet
Implement a new Flet extension/control that wraps a third-party Flutter package end-to-end, including dependency selection, version pinning, compatibility checks, Python/Flutter integration, docs…
qingyueyin/Pure-music
Pure-music 项目开发指南,覆盖 Windows Flutter/Dart 前端、Rust 后端、音频播放、歌词解析与渲染、桌面歌词、主题背景、设置、FFI、文档和测试。处理此仓库的代码理解、问题诊断、功能开发、缺陷修复、性能优化或代码审查时使用。
libnativeapi/nativeapi
Build, run, and GUI-test on another machine over SSH — the user's Windows laptop today, Linux or other macOS machines tomorrow — with one symmetric CLI for every OS: push scripts, run them either in…
libnativeapi/nativeapi
Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…
libnativeapi/nativeapi
Record a demo video of a desktop app — launch it, play a scripted scenario with smooth synthetic mouse input, and capture the screen (cursor and click highlights included) straight to an…
libnativeapi/nativeapi
End-to-end test a desktop app (Flutter desktop apps and plain native executables such as C++ examples) by launching the real app, driving it with guarded synthetic mouse input — eased moves, clicks…
Categories
Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification…. Core API Change is an agent skill from libnativeapi/nativeapi. Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification, and the commits in core and the workspace.
Core API Change fits situations like: says sync the bindings; asks why an API is missing from Dart / Rust / C / JS / Python.
Run `npx skills add libnativeapi/nativeapi --skill core-api-change -a claude-code`. Or copy the skill folder (.agents/skills/core-api-change in libnativeapi/nativeapi) into .claude/skills/core-api-change in your project. Claude Code loads it when a task matches its description.
Run `npx skills add libnativeapi/nativeapi --skill core-api-change -a codex`. Or copy the skill folder (.agents/skills/core-api-change in libnativeapi/nativeapi) into .agents/skills/core-api-change in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add libnativeapi/nativeapi --skill core-api-change -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/core-api-change, .gemini/skills/core-api-change, .github/skills/core-api-change and .opencode/skills/core-api-change in your project.
Going by SKILL.md and its folder, Core API Change needs the command-line tools its instructions call (git, cmake, npm, uvx, make and cargo). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git, npm, uvx and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Core API Change is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Core API Change: Flutter App (ccplugins/awesome-claude-code-plugins, 967 stars), Frb Upgrade Flutter (fzyzcjy/flutter_rust_bridge, 5.4k stars), Frb Lint (fzyzcjy/flutter_rust_bridge, 5.4k stars) and Solid (nank1ro/solid, 165 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
libnativeapi (a GitHub organization) maintains it in libnativeapi/nativeapi, which has 157 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.
Source: libnativeapi/nativeapi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.