Which versions are still out there?
See the share of real sessions on each release, not just download numbers. Know when it's safe to drop support for an old major — SDK Garden flags versions nobody has run for 30 days.
SDK Garden is usage analytics for the libraries you publish. Add a small client to your SDK and find out which versions are still installed, where setup fails, and which methods developers actually call — across every language you support.
MIT licensed. Free for one SDK, or self-host it for free.
// what you'll know
Download counts tell you who installed your SDK. They don't tell you what happened after. These are the questions developer-experience teams ask us most.
See the share of real sessions on each release, not just download numbers. Know when it's safe to drop support for an old major — SDK Garden flags versions nobody has run for 30 days.
Follow every session from process start to the first successful call. A drop between "started" and "initialized" usually means a missing key, a bad config, or a runtime you don't support yet.
Wrap your public methods and get call counts, error rates and durations for each. Find the API surface people depend on before you change it — and the parts nobody uses.
| method | calls | errors | p50 |
|---|---|---|---|
| charges.create | 1.2M | 0.4% | 88ms |
| customers.get | 640K | 0.1% | 31ms |
| refunds.create | 52K | 2.3% | 120ms |
| legacy.sync | 14 | — | — |
Error rates per version, compared with your average, the day a release starts rolling out. Catch the regression while it's on 3% of installs, not 60%.
// integration
You add the client to your SDK. Your users don't install or configure anything.
Network failures are swallowed — the client never throws into your users' code. Set disabled: true to turn it off, for example when your own users opt out.
// npm install sdk-garden-js
import SdkGarden from 'sdk-garden-js';
import { version } from '../package.json';
SdkGarden.init({
apiKey: 'sgk_…',
sdkName: 'acme-node',
sdkVersion: version,
});
export class Charges {
@SdkGarden.trackMethod('charges.create')
async create(params: ChargeParams) {
// your implementation
}
}
# pip install sdk-garden-python
from sdk_garden import SdkGarden
from acme import __version__
sg = SdkGarden(
api_key="sgk_…",
sdk_name="acme-python",
sdk_version=__version__,
).start()
class Charges:
@sg.track_method("charges.create")
def create(self, **params):
...
// pricing
Each client library you ship is its own product, so that's what you pay for. Invite your whole team, and get single sign-on on every paid plan.
$0
For a maintainer with one SDK.
$29 per SDK / month
For companies shipping SDKs in several languages.
Let's talk
For large install bases and procurement requirements.
Node, Python, Go, Java and Swift clients would be five SDKs. Each gets its own dashboard, keys and event allowance.
// open source
The server, dashboard and clients are MIT licensed. Self-hosting is a first-class path, not a trial: the same single Go binary we run, with Postgres and Redis.
No limits on SDKs or events. You keep the data on your infrastructure.
# needs only Docker
git clone https://github.com/tjb/SDKGarden.git
cd SDKGarden
cp .env.example .env # set secrets, DEBUG=false
docker build -t sdkgarden:latest .
docker compose -f docker-compose.prod.yml up -d
# → http://localhost:3000
// your users' data
You're putting this inside other people's apps, so here is the whole list. The client is open source; read it before you ship it.
disabled: true// questions
Events go into an in-memory buffer and are sent in batches in the background — on a daemon thread in Python, with fetch in JavaScript. Your methods don't wait on the network.
Nothing your users would notice. Network errors are caught inside the client and never reach their code.
Error trackers show you crashes in apps you own. Product analytics tracks end users. SDK Garden looks at your library across everyone else's apps: versions in the wild, setup success, and which parts of your API get used.
JavaScript/TypeScript (Node and browsers) and Python today. The ingest API is a documented JSON endpoint, so other languages can send events directly while their clients are in progress.
Yes. Single sign-on over OpenID Connect works with Okta, Microsoft Entra ID, Google Workspace, Auth0 and others, on every paid plan and when self-hosting.
Free for your first SDK. Setup takes about fifteen minutes, and the dashboard tells you the moment the first event arrives.