Top 50 framework bindings, sequenced by current need.
|
Important
|
This document complements ROADMAP.adoc (language / compiler progress) and ECOSYSTEM.adoc (Stage A–E contracts, INT-01..12). Where this file disagrees with either of those, those documents win — this is the bindings-side view. Compiled 2026-05-28 from the idaptik PR #107 pilot (hyperpolymath/idaptik#107) + estate-wide binding-need inventory + general-purpose modern-language binding patterns. |
Each entry carries:
-
Status — one of:
-
○— nothing built -
◐— scaffold or stub only -
◑— partial; coverage audit needed -
●— usable today -
◯— blocked by a non-binding issue (codegen, runtime, etc.)
-
-
Package home — where the binding lives or should live.
-
Rationale — what motivates this entry. Where applicable, the concrete consumer that needs it (e.g. an idaptik file path).
Item numbers are stable across revisions of this document; do not renumber when promoting or deferring items.
These ten bindings block the bulk of the 509 remaining .res files
in idaptik (see idaptik PR #107 for the pilot pattern). Without them,
no further significant ReScript → AffineScript work is tractable.
| # | Binding | Status | Package home | Rationale |
|---|---|---|---|---|
1 |
PixiJS core (Application, Container, Sprite, Graphics, Text, Ticker, FederatedEvent) |
|
|
idaptik |
2 |
@pixi/sound ( |
|
|
idaptik |
3 |
@pixi/ui (Button, FancyButton, Switch, Slider, Input, ScrollBox) |
|
|
idaptik |
4 |
motion (animate, animateMini, tween, ease, spring) |
|
|
idaptik |
5 |
WASM-exports calling pattern — invoke individual |
|
|
|
6 |
Phoenix Channels / WebSocket (Socket connect/disconnect, Channel join/leave/push, presence) |
|
|
idaptik |
7 |
DOM — fill the |
|
|
187-line virtual-DOM + reconciler exists; blocked on a wasm-codegen defect. Unblocking #255 turns this from compile-only to runtime-usable. Not a binding gap — a codegen bug. |
8 |
WebGL / Canvas2D context (HTMLCanvasElement, getContext, drawImage, fillRect, transform stack) |
|
|
idaptik-ums uses raw Canvas2D (App.res: 1178 LoC of DOM + canvas); also needed for any non-Pixi-based UI. |
9 |
IPC / structuredClone for host↔guest message passing (postMessage, MessageChannel, transfer ownership) |
|
|
idaptik-ums uses Gossamer IPC for level I/O; pattern is broad — any embedded-engine binding needs it. |
10 |
JSON Schema validation (Ajv) — already exists as |
|
|
idaptik UMS pipeline validates level configs; broader use across the estate’s a2ml + schema work. Surface-coverage audit needed. |
Surface that other estate repos are actively wanting.
| # | Binding | Status | Package home | Rationale |
|---|---|---|---|---|
11 |
GitHub API (repos, issues, PRs, releases, checks, search, GraphQL) via the existing Zig C-ABI |
|
|
OikosBot AffineScript port (RSR-stack Phase 5) needs this. |
12 |
Anthropic API ( |
|
|
|
13 |
HTTP client + server — already |
|
|
|
14 |
WebSocket client + server (encrypted |
|
|
Generalisation of #6; multiplayer + dev-tooling. |
15 |
SQLite — already |
|
|
Coverage audit needed; SQLite is the estate’s default persistence layer. |
16 |
Crypto — already |
|
|
|
17 |
Tauri 2.0 (invoke, listen, emit, window, dialog, fs, shell) |
|
|
Estate-wide mobile policy: "Tauri 2.0+ for mobile". Highest-leverage mobile binding. |
18 |
Dioxus (rsx!, signal, use_resource, server fns) |
|
|
Estate-wide mobile policy alternative; pure-Rust native UI. |
19 |
Zig FFI canonical patterns — |
|
|
"Zig = APIs + FFIs" estate directive. Each |
20 |
Telegram (Grammy) — already |
|
|
Coverage check; Grammy bots are an estate pattern. |
Standard surface any serious language ships with within a few years.
| # | Binding | Status | Package home | Rationale |
|---|---|---|---|---|
21 |
Web Audio API (AudioContext, GainNode, BufferSource, AnalyserNode) |
|
|
Beyond @pixi/sound: signal processing, synthesis; the Faust compile target’s runtime peer. |
22 |
Gamepad API ( |
|
|
Games — idaptik-grade input needs this; also broadly useful. |
23 |
Pointer / Touch / Keyboard / IME (PointerEvent, TouchEvent, KeyboardEvent, compositionstart/end) |
|
|
Input handling beyond simple click. |
24 |
IndexedDB (database, transaction, objectStore, cursor) |
|
|
Client-side persistent storage; pairs with SQLite for browser-side cases. |
25 |
Web Workers / Service Workers (postMessage between threads, SharedArrayBuffer, lifecycle) |
|
|
Parallelism on the web; offline-first patterns. |
26 |
Fetch / Streams (ReadableStream, WritableStream, TransformStream, AbortSignal) |
|
|
Modern HTTP / streaming surface beyond simple GET. |
27 |
Cache API + Storage (localStorage, sessionStorage, CacheStorage, Storage Foundation) |
|
|
Web persistence. |
28 |
Notifications + Permissions (Notification API, |
|
|
PWA patterns. |
29 |
Geolocation + Sensors (Geolocation, DeviceMotion, DeviceOrientation) |
|
|
Mobile / device-aware apps. |
30 |
MediaDevices ( |
|
|
Audio / video capture; voice + video features. |
Server-side and external-service integrations.
| # | Binding | Status | Package home | Rationale |
|---|---|---|---|---|
31 |
Postgres (libpq via FFI, or |
|
|
Production backend default; pairs with SQLite for dev. |
32 |
Redis (commands, pub/sub, streams) |
|
|
Caching, pub/sub, queues. |
33 |
S3 / object storage (PutObject, GetObject, presigned URLs, multipart) |
|
|
Universal blob storage. |
34 |
GraphQL client (query / mutation / subscription, fragments, cache) |
|
|
Many estate-relevant APIs expose GraphQL. |
35 |
OpenTelemetry (tracer, span, exporter, OTLP) |
|
|
Observability surface; required for any production deployment. |
36 |
OpenAI API (chat.completions, tool calls, streaming) |
|
|
Even though Anthropic is preferred, OpenAI surface is broadly compatible (LiteLLM, Ollama). |
37 |
Cloudflare API (DNS, certs, Pages — not Workers, which is estate-banned) |
|
|
CF management plane only; Workers runtime is excluded by policy. |
38 |
Stripe (PaymentIntent, Customer, Subscription, webhooks) |
|
|
Payments. |
39 |
Supabase (auth, postgrest, realtime, storage) |
|
|
If the estate accepts a BaaS, this is the FOSS-leaning default. |
40 |
Slack + Discord APIs (REST + webhooks + slash commands) |
|
|
Bots + estate ops notifications. |
Build, test, and cross-language surface.
| # | Binding | Status | Package home | Rationale |
|---|---|---|---|---|
41 |
Idris2 ABI surface (proof carriers, Cexp, formal-verification linkage) |
|
upstream estate convention |
"Idris2 = ABIs" directive. The estate uses Idris2 for proof carriers on FFI boundaries. |
42 |
Rust FFI (cbindgen-style C-ABI calling) |
|
doc + stdlib |
Adjacent to Zig FFI; needed for Tauri / Dioxus consumers. |
43 |
OCaml interop (host-compiler dialogues — minimal; affinescript itself is OCaml) |
|
meta-binding |
Mostly a build-time concern, but worth documenting. |
44 |
Just / task-runner integration (recipe discovery, dependency graph) |
|
doc |
Estate-wide Just usage; affinescript projects auto-emit Justfile shape. |
45 |
Vite plugin / HMR — already |
|
|
Build-tool side (not a binding TO Vite); pattern for other bundler plugins (Webpack, Rollup, esbuild) should follow this shape. |
46 |
esbuild / Rollup plugin |
|
|
Alternative bundlers. Lower priority than Vite. |
47 |
Playwright / browser automation (page, locator, expect, fixtures) |
|
|
E2E test estate convention (idaptik has 5 Playwright suites). |
48 |
Test framework — already |
|
|
Coverage check; test surface is the gate for everything else. |
49 |
VS Code extension API — already |
|
|
The |
50 |
Language Server Protocol (LSP) — generic, not tied to VS Code |
|
|
Editor-agnostic LSP surface; affinescript’s own LSP can dogfood. |
-
PixiJS + sub-packages dominate Tier 1. Of the 10 critical-for-idaptik bindings, four (#1, #2, #3, and #4 by extension) are PixiJS-ecosystem. Investing in
affinescript-pixijsunblocks the largest single chunk of idaptik’s 215-filesrc/app/tree. -
WASM-exports calling LANDED. Item #5 —
wasmCall(exports, name, args) → Floatinstdlib/Deno.affineships the generic Option A surface; idaptikvm/wasmand every future WASM-host consumer in the estate can now call individual exports without a per-fn extern. Typed per-Zig-fn shims can layer on top per-consumer where the discipline is worth the brittleness. -
DOM is closest to done — issue #255 (for-in / while wasm codegen) is the blocker, not the binding surface itself. That’s a codegen bug, not a binding gap; classified separately so it doesn’t get re-scoped as a binding task.
-
Many "stdlib bindings" need coverage audits, not new code (#7, #10, #13, #15, #16, #20, #48, #49) — the file exists; verifying it covers the consumer’s full surface is cheaper than writing new bindings.
-
Banned by policy, excluded from this list:
-
Cloudflare Workers runtime (estate-banned).
-
React Native, Flutter (estate-banned).
-
Node.js-native binding patterns where Deno-equivalent exists.
-
Python interop except for SaltStack (estate policy).
-
-
Connections / cross-cutting: Tauri (#17) + Dioxus (#18) consume some of the lower-level bindings (Notification, MediaDevices, etc.). When sequencing, do the leaf bindings first so the framework bindings have things to compose.
| Phase | Goal | Items |
|---|---|---|
A |
Unblock current idaptik pilot |
#5 (WASM exports) → #1 (PixiJS core) → #4 (motion) → #2 (sound) → #3 (UI) |
B |
Estate fan-out |
#11 (GitHub API rewire) → #19 (Zig FFI doc) → #6 (Phoenix Channels) → #16 (Crypto rewire) |
C |
Demand-driven |
Everything else; pick when a concrete consumer asks. |
-
Umbrella tracker: (TBD — opened alongside this PR)
-
Per-tier child issues: (TBD — opened alongside this PR)
When a binding’s status changes, update its row in this file in the same PR that lands the change; do not let the table drift.
-
ROADMAP.adoc — language / compiler progress (this doc complements it).
-
ECOSYSTEM.adoc — Stage A–E contracts, INT-01..12.
-
CAPABILITY-MATRIX.adoc — per-feature readiness (overrides everything).
-
idaptik PR #107 — the pilot that surfaced the binding-need shape.