Cross-Platform Language Bindings Synchronization
SkillDev toolsLets your agent keep C++ API changes in sync with the Java and JavaScript bindings of a rendering engine.
Use Cross-Platform Language Bindings Synchronization in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Cross-Platform Language Bindings Synchronization and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Cross-Platform Language Bindings Synchronization skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Guidelines and SOP for synchronizing public C++ API changes (methods, enums, options structs) to Java (Android JNI) and JavaScript/TypeScript (Web/WASM Embind).
What this skill tells your AI
The instructions your AI receives, as published by google/filament in skills/bindings_synchronization/SKILL.md and read by ahel’s review.
When making changes to public Filament C++ APIs, AI agents must ensure the changes are mirrored in the Java and JavaScript/TypeScript binding layers.
1. Trigger Conditions
You must check and update the language bindings if your changes touch any public headers under filament/include/filament/, specifically:
- New/Modified/Deleted Methods on core classes (e.g.,
View,Engine,Camera,LightManager,RenderableManager). - Options Structs (e.g.,
AmbientOcclusionOptions,BloomOptions,FogOptions).[!IMPORTANT] If you modify options structs defined in
filament/include/filament/Options.h:- Run
apigento regenerateView.javaandView.cpp(which host the Java POJO options structs and JNI bridges):python3 tools/apigen/generate_android.py -j - Run
beamsplitterto update JavaScript/TypeScript bindings and C++ JSON settings serialization:cd tools/beamsplitter && go run .
- Run
- Enums & Constants (e.g.,
BlendMode,QualityLevel,AntiAliasingunderfilament/include/filament/or nested inside classes).
2. Java & Android JNI Synchronization
All JNI JNI-exported functions use automatic symbol resolution (dynamic mapping), meaning they are mapped by signature rather than a static registration table.
File Mappings
- Java Class:
android/filament-android/src/main/java/com/google/android/filament/<ClassName>.java - JNI C++ Wrapper:
android/filament-android/src/main/cpp/<ClassName>.cpp
Guidelines
- API Consistency: Keep method visibility
public(unless the API is strictly internal to the Java package). Follow Java naming conventions (camelCase). - Getter/Setter Completeness: If you add a Setter (e.g.,
setFoo), always add the corresponding Getter (e.g.,isFooorgetFoo). - JNI Signature:
- Native declarations in Java must be
private static native. - The corresponding C++ function in JNI must be decorated with
extern "C" JNIEXPORT <ReturnType> JNICALL Java_com_google_android_filament_<ClassName>_<NativeMethodName>. - Return values from native C++ booleans should be cast to
jbooleanusing(jboolean)orstatic_cast<jboolean>().
- Native declarations in Java must be
3. JavaScript & TypeScript Synchronization
Filament uses Emscripten's Embind to export C++ APIs to JS.
File Mappings
- Embind Source:
web/filament-js/jsbindings.cpp - Enums Embind Source:
web/filament-js/jsenums.cpp - TypeScript Definition:
web/filament-js/filament.d.ts - JS Extension Wrappers:
web/filament-js/extensions.js
Guidelines
- Embind Registration:
- Register member functions in
jsbindings.cppwithin the correspondingclass_<ClassName>("<JSClassName>")block using.function("methodName", &ClassName::methodName).
- Register member functions in
- TypeScript Declarations:
- Always update
filament.d.tsto match any changes. Every bound C++ method should have a corresponding declaration insideexport class <ClassName>to avoid IDE type errors.
- Always update
- Complex Option Structs:
- If you modify or add fields to an options struct (like
BloomOptions), make sure to:- Register the new fields in
jsbindings.cppusing.field("fieldName", &ClassName::Options::fieldName). - Update the TypeScript interface in
filament.d.tsto include the new properties. - Check if
extensions.jscontains a prototype-overrides wrapper for merging the options (e.g.,Filament.View.prototype.setBloomOptions). Update the default options object if needed.
- Register the new fields in
- If you modify or add fields to an options struct (like
4. Verification Check
Before concluding a task:
- Double-check JNI signature signatures against the Java class.
- Verify that type bindings and return types match up.
- Verify that TS definitions in
filament.d.tsare 100% synchronized.
Signals
- GitHub stars
- 21k
- Forks
- 2k
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
bindings-synchronization- Source
- github.com/google/filament
Related picks
Skill · davila7
The pick for C / C++java-sdk-specialist
Skill · a5c-ai
The pick for Java110-java-maven-best-practices
Skill · jabrena
The pick for Javalegacy-js
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptsetup-ts-deep-modules
Skill · mattpocock
The pick for TypeScript