When stuck, copy from working code. Match by library type, not library name.
packages/datadog-plugin-pg/
packages/datadog-plugin-mysql/
packages/datadog-plugin-mongodb-core/
packages/datadog-plugin-cassandra-driver/
packages/datadog-plugin-elasticsearch/
packages/datadog-plugin-redis/
packages/datadog-plugin-memcached/
packages/datadog-plugin-ioredis/
packages/datadog-plugin-http/
packages/datadog-plugin-fetch/
packages/datadog-plugin-undici/
packages/datadog-plugin-grpc/
packages/datadog-plugin-express/
packages/datadog-plugin-fastify/
packages/datadog-plugin-koa/
packages/datadog-plugin-hapi/
packages/datadog-plugin-kafkajs/
packages/datadog-plugin-amqplib/
packages/datadog-plugin-google-cloud-pubsub/
packages/datadog-plugin-kafkajs/ (producer + consumer)
packages/datadog-plugin-express/ (tracing + code origin)
packages/datadog-plugin-graphql/
packages/datadog-plugin-winston/
packages/datadog-plugin-bunyan/
packages/datadog-plugin-browser-bunyan/
packages/datadog-plugin-pino/
packages/datadog-plugin-openai/
packages/datadog-plugin-anthropic/
packages/datadog-plugin-langchain/
For any plugin:
| File | Purpose |
|---|---|
src/index.js |
Plugin entry, base class selection |
src/tracing.js |
Tracing logic (if CompositePlugin) |
test/index.spec.js |
Test patterns |
test/integration-test/ |
ESM testing (if exists) |
For instrumentation:
| File | Purpose |
|---|---|
datadog-instrumentations/src/<lib>.js |
Hook logic (shimmer) or hooks file (orchestrion) |
datadog-instrumentations/src/helpers/hooks.js |
Registration (both shimmer and orchestrion) |
rewriter/instrumentations/<lib>.js |
JavaScript config (orchestrion) |
- Find similar plugin — match by library type, not name
- Read
src/index.js— understand base class choice and bindStart pattern - Read
test/index.spec.js— understand test setup and assertions - Copy structure — adapt names and ctx fields to the new library
- Copy test patterns — similar libraries have similar tests
- If production plugins work and yours doesn't → your structure is wrong
- Match the base class to the library type
- Copy before creating — don't reinvent patterns
- Test patterns transfer between similar library types