
Ready-made plugins for HAL client: API-key, bearer-token, base-url rewriter, chain combinator, CURIE and logger; supports service-discovery or declarative JSON/YAML config loading.
Ready-made example plugins for the HALDiSh Kotlin Multiplatform HAL client. Each is an independent module, published to Maven Central.
| Module | Pattern | Artifact |
|---|---|---|
api-key |
KMP (commonMain) | com.helpchoice.nahal-plugins:haldish-plugin-api-key |
bearer-token |
Per-platform | com.helpchoice.nahal-plugins:haldish-plugin-bearer-token |
base-url-rewriter |
Per-platform | com.helpchoice.nahal-plugins:haldish-plugin-base-url-rewriter |
chain |
KMP (combinator) | com.helpchoice.nahal-plugins:haldish-plugin-chain |
curie |
KMP (preLink) |
com.helpchoice.nahal-plugins:haldish-plugin-curie |
logger |
KMP + expect/actual file I/O | com.helpchoice.nahal-plugins:haldish-plugin-logger |
Each module's own README.md documents its configuration and hooks.
JVM, JS (IR), WasmJS, Linux (x64/arm64), macOS (x64/arm64), iOS (x64/arm64/simulator-arm64), Windows (mingwX64) — the same target set as the library.
Two independent mechanisms, and every module here ships for both:
ServiceLoader
(META-INF/services/com.helpchoice.nahal.haldish.plugin.HaldishPlugin) or
HALDISH_PLUGIN_PATH pointing at a jar; on native, dlopen of libhaldish_plugin.*
resolving the haldish_plugin_* C symbols.HALDISH_CONFIG (JSON/YAML) or window.__nahalConfig, keyed by
the plugin's fully-qualified class name. This bypasses mechanism 1 entirely.See ../nahal/PLUGIN_CONTRACT.md for the authoritative contract.
./gradlew build # all modules, all host-buildable targets
./gradlew :curie:jvmTest # one module's JVM tests
./gradlew stagePluginArtifacts # JVM jars + native shared libs into build/release (no upload)Publishing: ./gradlew publishToMavenCentral (signing required).
haldish comes from HALDiSh_KMP; nahal-ui / nahal-core
come from NaHAL and are used only by the demo runners
(jvmRun, and chain's macOS app binary) — never by the published plugin klibs. Until those
projects publish 2.0.0 to Central, settings.gradle.kts resolves them from mavenLocal(); see
CLAUDE.md for the cold-start order.
Apache-2.0 — see LICENSE.
Ready-made example plugins for the HALDiSh Kotlin Multiplatform HAL client. Each is an independent module, published to Maven Central.
| Module | Pattern | Artifact |
|---|---|---|
api-key |
KMP (commonMain) | com.helpchoice.nahal-plugins:haldish-plugin-api-key |
bearer-token |
Per-platform | com.helpchoice.nahal-plugins:haldish-plugin-bearer-token |
base-url-rewriter |
Per-platform | com.helpchoice.nahal-plugins:haldish-plugin-base-url-rewriter |
chain |
KMP (combinator) | com.helpchoice.nahal-plugins:haldish-plugin-chain |
curie |
KMP (preLink) |
com.helpchoice.nahal-plugins:haldish-plugin-curie |
logger |
KMP + expect/actual file I/O | com.helpchoice.nahal-plugins:haldish-plugin-logger |
Each module's own README.md documents its configuration and hooks.
JVM, JS (IR), WasmJS, Linux (x64/arm64), macOS (x64/arm64), iOS (x64/arm64/simulator-arm64), Windows (mingwX64) — the same target set as the library.
Two independent mechanisms, and every module here ships for both:
ServiceLoader
(META-INF/services/com.helpchoice.nahal.haldish.plugin.HaldishPlugin) or
HALDISH_PLUGIN_PATH pointing at a jar; on native, dlopen of libhaldish_plugin.*
resolving the haldish_plugin_* C symbols.HALDISH_CONFIG (JSON/YAML) or window.__nahalConfig, keyed by
the plugin's fully-qualified class name. This bypasses mechanism 1 entirely.See ../nahal/PLUGIN_CONTRACT.md for the authoritative contract.
./gradlew build # all modules, all host-buildable targets
./gradlew :curie:jvmTest # one module's JVM tests
./gradlew stagePluginArtifacts # JVM jars + native shared libs into build/release (no upload)Publishing: ./gradlew publishToMavenCentral (signing required).
haldish comes from HALDiSh_KMP; nahal-ui / nahal-core
come from NaHAL and are used only by the demo runners
(jvmRun, and chain's macOS app binary) — never by the published plugin klibs. Until those
projects publish 2.0.0 to Central, settings.gradle.kts resolves them from mavenLocal(); see
CLAUDE.md for the cold-start order.
Apache-2.0 — see LICENSE.