Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
hugorcd avatar

Create Evlog Adapter

  • 785 installs
  • 1.7k repo stars
  • Updated August 4, 2026
  • hugorcd/evlog

create-evlog-adapter is a TypeScript scaffolding skill that generates a complete evlog drain adapter file using defineHttpDrain and resolveAdapterConfig so developers who add new event-logging services get correctly stru

About

create-evlog-adapter is an evlog toolkit skill that instantly produces a complete TypeScript adapter at packages/evlog/src/adapters/{name}.ts. The template wires service-specific config fields—apiKey, endpoint, serviceName, timeout—through resolveAdapterConfig and implements HTTP draining with defineHttpDrain against WideEvent types. Developers replace {Name}, {name}, and {NAME} placeholders with the target service identifier. The skill fits when onboarding Datadog, Honeycomb, or any new HTTP event sink into the shared evlog monorepo without hand-copying boilerplate. Output follows the public toolkit primitives and config interface patterns already used by existing evlog adapters.

  • Complete TypeScript template for packages/evlog/src/adapters/{name}.ts
  • Uses defineHttpDrain and resolveAdapterConfig primitives from the public toolkit
  • Includes configurable interface with standard fields (apiKey, endpoint, timeout)
  • Environment variable mapping for both NUXT_ and plain prefixes
  • Optional event transformation layer for service-specific shaping

Create Evlog Adapter by the numbers

  • 785 all-time installs (skills.sh)
  • +3 installs in the week ending Aug 2, 2026 (Skillselion tracking)
  • Ranked #486 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hugorcd/evlog --skill create-evlog-adapter

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs785
repo stars1.7k
Security audit3 / 3 scanners passed
Last updatedAugust 4, 2026
Repositoryhugorcd/evlog

How do you scaffold an evlog TypeScript drain adapter?

Instantly generate a complete, correctly structured TypeScript adapter for any new event-logging service using the shared evlog toolkit primitives.

Who is it for?

Backend developers extending the evlog monorepo who need a correctly structured HTTP drain adapter for a new event-logging vendor.

Skip if: Teams not using the evlog toolkit or integrations that require non-HTTP transports without adapting the template.

When should I use this skill?

User asks to add a new evlog adapter, integrate an event-logging service, or scaffold packages/evlog/src/adapters code.

What you get

Complete TypeScript adapter file with config interface, HTTP drain definition, and evlog toolkit imports

  • TypeScript adapter source file

By the numbers

  • Generates adapter scaffold with 2 core toolkit primitives: defineHttpDrain and resolveAdapterConfig
  • Template includes 4 standard config field names: apiKey, endpoint, serviceName, and timeout

Files

SKILL.mdMarkdownGitHub ↗

Create evlog Adapter

Add a new built-in adapter to evlog. Every adapter follows the same architecture and is built on the public toolkit primitives in evlog/toolkit — so a community adapter has the same shape as a built-in one.

PR Title

Recommended format for the pull request title:

feat: add {name} adapter

The exact wording may vary depending on the adapter (e.g., feat: add OTLP adapter, feat: add Axiom drain adapter), but it should always follow the feat: conventional commit prefix.

Touchpoints Checklist

#FileAction
1packages/evlog/src/adapters/{name}.tsCreate adapter source (built on defineHttpDrain from ../shared/drain)
2packages/evlog/tsdown.config.tsAdd build entry
3packages/evlog/package.jsonAdd exports + typesVersions entries
4packages/evlog/test/adapters/{name}.test.tsCreate tests
5apps/docs/content/4.adapters/{n}.{name}.mdCreate adapter doc page (before custom.md)
6apps/docs/content/4.adapters/1.overview.mdAdd adapter to overview (links, card, env vars)
7skills/review-logging-patterns/SKILL.mdAdd adapter row in the Drain Adapters table
8Renumber custom.mdEnsure custom.md stays last after the new adapter

Important: Do NOT consider the task complete until all 8 touchpoints have been addressed.

Naming Conventions

Use these placeholders consistently:

PlaceholderExample (Datadog)Usage
{name}datadogFile names, import paths, env var suffix
{Name}DatadogPascalCase in function/interface names
{NAME}DATADOGSCREAMING_CASE in env var prefixes

Standard option naming (use these exact names):

ConceptStandard option name
Bearer-style API secretapiKey
Base URL of the ingest APIendpoint
Service identifierserviceName
Request timeout (ms)timeout

If a service historically used a different name (token, sourceToken, …) keep it as a deprecated alias — see Axiom and Better Stack for the pattern.

Step 1: Adapter Source — built on defineHttpDrain

Create packages/evlog/src/adapters/{name}.ts. Read references/adapter-template.md for the full annotated template.

The contract is now defineHttpDrain<TConfig>({ resolve, encode }). You only ship two pieces of logic:

1. `resolve()` — produce a fully-resolved config or null to skip. Use resolveAdapterConfig for the standard precedence (overrides → runtimeConfig.evlog.{name}runtimeConfig.{name} → env vars). List NUXT_{NAME}_* before {NAME}_* in ConfigField.env for silent Nuxt compat; show only {NAME}_* in user-facing messages via formatPublicEnvKeys. 2. `encode(events, config)` — produce { url, headers, body } for a batch of events (or null to skip). HTTP transport, retries, timeout, and error logging are handled by defineHttpDrain.

Key rules:

  • Single factory. Export one create{Name}Drain(overrides?: Partial<{Name}Config>). No dual-API factories: if a service has multiple ingest modes (logs vs events), expose them via a mode option (see PostHog).
  • No HTTP code in the adapter. Don't call fetch directly — let defineHttpDrain do it. If your service truly needs custom transport (e.g. binary envelopes), use defineDrain and call httpPost from evlog/toolkit.
  • No bespoke config resolution. Always go through resolveAdapterConfig. If you need to support a deprecated alias (tokenapiKey), include both in the ConfigField[] and fall through in resolve().
  • Exported converters. If the service needs a specific event shape, export a to{Name}Event() (or buildPayload()) helper so it can be tested independently.

Step 2: Build Config

Add a build entry in packages/evlog/tsdown.config.ts alongside the existing adapters:

'adapters/{name}': 'src/adapters/{name}.ts',

Place it after the last adapter entry in tsdown.config.ts (follow existing ordering in that file).

Step 3: Package Exports

In packages/evlog/package.json, add two entries:

In `exports` (after the last adapter, currently ./posthog):

"./{name}": {
  "types": "./dist/adapters/{name}.d.mts",
  "import": "./dist/adapters/{name}.mjs"
}

*In `typesVersions[""]`** (after the last adapter):

"{name}": [
  "./dist/adapters/{name}.d.mts"
]

Step 4: Tests

Create packages/evlog/test/adapters/{name}.test.ts.

Read references/test-template.md for the full annotated template.

Required test categories:

1. URL construction (default + custom endpoint) 2. Headers (auth, content-type, service-specific) 3. Request body format (JSON structure matches service API) 4. Skip behavior when apiKey (or required field) is missing 5. Batch operations 6. Deprecated alias still works (when applicable)

Step 5: Adapter Documentation Page

Create apps/docs/content/4.adapters/{n}.{name}.md where {n} is the next number before custom.md (custom should always be last).

Use the existing Axiom adapter page (apps/docs/content/4.adapters/2.axiom.md) as a reference for frontmatter structure, tone, and sections. Key sections: intro, quick setup, configuration (env vars table + priority), advanced usage, querying in the target service, troubleshooting, direct API usage, next steps.

Important: multi-framework examples. The Quick Start section must include a ::code-group with tabs for all supported frameworks (Nuxt/Nitro, Hono, Express, Fastify, Elysia, NestJS, Standalone). Do not only show Nitro examples. See any existing adapter page for the pattern.

Step 6: Update Adapters Overview Page

Edit apps/docs/content/4.adapters/1.overview.md to add the new adapter in three places (follow the pattern of existing adapters):

1. Frontmatter `links` array — add a link entry with icon and path 2. `::card-group` section — add a card block before the Custom card 3. Zero-Config Setup `.env` example — add the adapter's env vars

Step 7: Update skills/review-logging-patterns/SKILL.md

In skills/review-logging-patterns/SKILL.md (the public skill distributed to users), find the Drain Adapters table and add a new row:

| {Name} | `evlog/{name}` | `{NAME}_API_KEY`, `{NAME}_DATASET` (or equivalent) |

Follow the pattern of the existing rows (Axiom, OTLP, PostHog, Sentry, Better Stack).

Step 8: Renumber custom.md

If the new adapter's number conflicts with custom.md, renumber custom.md to be the last entry. For example, if the new adapter is 5.{name}.md, rename 5.custom.md to 6.custom.md.

Verification

After completing all steps, run:

cd packages/evlog
pnpm run lint
pnpm run typecheck
pnpm run test
pnpm run build

Related skills

How it compares

Use create-evlog-adapter instead of manual copy-paste when adding HTTP-based drains to the evlog monorepo and consistent ConfigField typing matters.

FAQ

Which evlog primitives does create-evlog-adapter use?

create-evlog-adapter scaffolds adapters with defineHttpDrain for HTTP event delivery and resolveAdapterConfig for shared configuration resolution. Generated files import WideEvent types and ConfigField definitions from the evlog public toolkit.

Where does create-evlog-adapter place the generated TypeScript file?

create-evlog-adapter targets packages/evlog/src/adapters/{name}.ts in the evlog monorepo. Developers substitute {Name}, {name}, and {NAME} placeholders with the new logging service identifier before wiring service-specific config fields.

Is Create Evlog Adapter safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Backend & APIsintegrationsbackend

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.