OpAMP client SDKs for Python, Go, Node.js, Java and .NET, on one shared core.
| Language | Client | OpenTelemetry integration |
|---|---|---|
| Python | python/, docs |
python/otel/, docs |
| Go | go/opamp/, docs |
go/opampotel/, docs; also a Collector extension and Supervisor (go/opampextension/, go/opampsupervisor/, docs) |
| Node.js | node/opamp/, docs |
node/otel/, docs |
| Java | java/opamp/, docs |
java/opamp-javaagent/, docs |
| .NET | dotnet/, docs |
docs |
docs/how-it-works.md explains how the clients and the core fit together, docs/sdks.md compares the SDKs, and examples/ runs each one.
The core is the state machine every client wraps. It arrives here compiled, as this repository's
core/vX.Y.Z releases: the WebAssembly modules Go, Node.js and Java load, the native library
Python and .NET load, and the interface (.proto) files the clients generate their types from.
opamp-core.lock.json pins one core release and the sha256 of every file in it.
scripts/fetch_core.py fetch # download what the lock pins, verify it, put it in place
scripts/fetch_core.py fetch --all-platforms # and every platform's native library, for packaging
scripts/fetch_core.py check # what is in place is what the lock pins
scripts/fetch_core.py lock <version> # move to another core releaseMoving to a new core is one PR: scripts/fetch_core.py lock <version>, then fetch, then
scripts/gen_core.py and scripts/gen_sdk_settings.py. It holds the lock, the module copies
checked in beside each client and the regenerated types; CI's fetch_core.py check and the
generators' --check keep them in step.
This repository is public and holds only what PUBLIC_ALLOWLIST names; see AGENTS.md.