ARO-0073: Plugin SDK & Developer Experience — Feedback Welcome #630
Replies: 4 comments
-
Gaps Identified After Cross-Referencing with The Plugin GuideAfter reading the entire Plugin Guide book cover-to-cover and comparing it against this proposal, here is a comprehensive list of topics, features, and concepts documented in the book that ARO-0073 does not address. Feedback welcome on which of these should be folded into the proposal vs. left for follow-up work. Major Feature Gaps (entire capabilities missing from the proposal)
Qualifier-Specific Gaps
Architecture and Runtime Gaps
Build, Compilation, and Distribution Gaps
Testing Gaps
Publishing and Ecosystem Gaps
Error Handling Gaps
Performance Gaps
CLI Command Gaps Not Mentioned in Proposal
Questions for Discussion
|
Beta Was this translation helpful? Give feedback.
-
Supplementary Findings After Deep-Reading The Plugin GuideAfter reading every chapter and appendix of The Plugin Developer's Guide in full, here are concrete, specific findings that go beyond the high-level gap list above. Two Coexisting C ABI Signatures — Migration Path UnclearThe book documents two completely different function signatures that coexist today: Service ABI (Chapter 2 — the older pattern): int32_t service_call(
const char* method, // method name
const char* args_json, // input JSON
char** result_json // out-pointer for result
);
// Returns 0 for success, non-zero for errorAction ABI (Chapter 5 — the newer pattern): char* aro_plugin_execute(
const char* action, // action name
const char* input_json // input JSON
);
// Returns heap-allocated JSON string (caller frees via aro_plugin_free)The proposal's unified ABI v2 keeps only the action-style (2-param, return value) and routes services through Production Plugin Patterns the SDK Should EnableThe book contains four substantial production-grade examples that test whether the SDK is expressive enough: 1. FFmpeg Plugin (Chapter 12) — Multi-file C plugin with:
Question: Can the C SDK's 2. Auth Hybrid Plugin (Chapter 14) — Swift native + ARO files:
Question: How does the 3. LLM Inference Plugin (Chapter 10) — Python with:
The proposal's Python persistent mode addresses model caching, but doesn't address GPU lifecycle management, quantization config, or the lazy import pattern. These are critical for ML plugins. 4. Redis System Object Plugin (Chapter 13) — C plugin providing:
The system objects ABI is entirely separate from both the action and service ABIs. It needs its own SDK support, or at minimum, acknowledgment in the unified ABI v2. The
|
Beta Was this translation helpful? Give feedback.
-
Proposal Updated — Major Revision Based on FeedbackThe proposal has been substantially rewritten to address the gaps identified from the Plugin Guide book review and the feedback discussion. Here is a summary of what changed and what was decided. Key Design Decision: No Backward CompatibilityARO is pre-1.0. Clean code over backward compatibility. The old service ABI ( What Was AddedC++ Plugin SDK — Full SDK with System Objects — Lifecycle Hooks — Hybrid Plugins & ARO Files — Documented Plugin-to-Runtime Invocation — Plugin Unload/Reload — Documented Qualifier Improvements:
Full Descriptor and Context Access — Input JSON now includes Preposition-Based Dispatch — Documented pattern where different prepositions trigger different behavior. SDK exposes Async Support — Swift SDK bridges
Platform-Specific Manifest Configuration —
Deprecation Strategy — Standard Error Codes — Codes 0-10 (SUCCESS through RATE_LIMITED) included in all SDKs as constants/enums. Domain-Specific Error Categories — VALIDATION, IO, AUTH, RATE_LIMIT categories with naming convention Performance Section — Compile-time regex, zero-copy strings, SIMD, PGO, Rust release profiles, Python GPU acceleration (CUDA detection, quantization, OOM handling). CLI Commands — Added: Component Testing — What Was Removed/Changed
What Was NOT Added (Explicitly Out of Scope)
Impact: Code and Books to UpdateThe proposal now includes Appendix C listing every file that must be modified, every example to rewrite (9 examples), and every book chapter to update. This is a significant effort but results in a much cleaner, more consistent plugin system. 📄 Updated proposal: |
Beta Was this translation helpful? Give feedback.
-
|
📄 The updated proposal is now on the feature branch and ready for review:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
The Problem
An analysis of all nine plugin examples reveals a striking ceremony-to-logic imbalance:
A C qualifier plugin needs ~150 lines of pointer arithmetic just to parse a JSON array. Swift plugins require
NSDictionaryworkarounds for cross-dylib Foundation bridging. Rust needs sixunsafeblocks for CString FFI. Three incompatible ABIs (actions, services, qualifiers) exist with no guidance on when to use which.What This Proposal Introduces
1. Unified ABI v2
Collapse the three ABIs into one contract. Services route through
aro_plugin_execute("service:<method>", ...). Qualifier-only plugins no longer need stub exports. Full backward compatibility via"abi": 2detection.2. Language-Native SDKs
Swift —
@AROPluginmacro generates all@_cdeclexports:Rust —
#[aro_plugin]proc macro eliminates allunsafe:C — Single-header SDK with macros, bundled JSON parser, arena allocator:
Python — Decorators with typed helpers:
3. Plugin Scaffolding CLI
aro new plugin --name my-csv --lang rust --actions --qualifiers # Generates a complete, ready-to-build project with SDK dependency4. Event System Integration
Plugins can emit and subscribe to domain events:
5. Python Persistent Mode
Long-lived subprocess instead of per-call spawning — enables stateful plugins and eliminates startup overhead.
6. Per-SDK Testing Utilities
Test plugins without loading them through the ARO runtime.
Estimated Ceremony Reduction
Implementation Plan
aro new pluginCLI, docs generation, migration guide📄 Full proposal:
Proposals/ARO-0073-plugin-sdk.md(once merged)We'd Love Your Feedback
Please share your thoughts — this is a significant DX investment and we want to get it right.
Beta Was this translation helpful? Give feedback.
All reactions