Skip to content

refactor(elysia): drop @elysiajs/opentelemetry dependency#19947

Draft
logaretm wants to merge 5 commits intoawad/js-1542-add-elysia-integrationfrom
awad/elysia-drop-otel-plugin
Draft

refactor(elysia): drop @elysiajs/opentelemetry dependency#19947
logaretm wants to merge 5 commits intoawad/js-1542-add-elysia-integrationfrom
awad/elysia-drop-otel-plugin

Conversation

@logaretm
Copy link
Member

@logaretm logaretm commented Mar 23, 2026

Mimics @elysia/opentelemetry own implementation and swaps out OTEL APIs with our own, main reason is I didn't want to lock OTEL deps to specific versions that may break in the wild.

This is an exploration, but if all is green then I will consider merging this first into Elysia SDK before release.

Replace @elysiajs/opentelemetry with Elysia's native .trace() and
.wrap() APIs combined with Sentry's own span APIs. This eliminates
the version mismatch issues caused by the OTel plugin's transitive
OpenTelemetry dependencies.

Key changes:
- Use .wrap() to capture/create root spans (Bun creates new server
  span, Node.js captures existing HTTP instrumentation span) and
  bridge them to .trace() via a WeakMap<Request, Span>
- Use .trace({ as: "global" }) with startInactiveSpan to create
  lifecycle phase spans (Request, Parse, Handle, etc.) and child
  handler spans (named functions get their name, arrow functions
  get 'anonymous')
- Move all SDK logic (request metadata, trace propagation, error
  capture) inside .trace() callbacks via onPhaseEnd so no separate
  lifecycle hooks are registered (which would show up as handler
  spans in the trace)
- Remove clientHooks.ts (no more post-hoc span enrichment or
  <unknown> span filtering needed)
- Remove OTel resolution overrides from root package.json

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Mar 23, 2026

Semver Impact of This PR

🟢 Patch (bug fixes)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump mongodb-memory-server-global from 10.1.4 to 11.0.1 by dependabot in #19888
  • Bump stacktrace-parser from 0.1.10 to 0.1.11 by dependabot in #19887

Other

  • (elysia) Elysia SDK by logaretm in #19509

Bug Fixes 🐛

Cloudflare

  • Send correct events in local development by JPeer264 in #19900
  • Forward ctx argument to Workflow.do user callback by Lms24 in #19891

Core

  • Send internal_error as span status for Vercel error spans by nicohrubec in #19921
  • Do not overwrite user provided conversation id in Vercel by nicohrubec in #19903
  • Return same value from startSpan as callback returns by s1gr1d in #19300

Deps

  • Update lockfile to resolve h3@1.15.10 by chargome in #19933
  • Bump fast-xml-parser to 5.5.8 in @azure/core-xml chain by chargome in #19918
  • Bump next to 15.5.14 in nextjs-15 and nextjs-15-intl E2E test apps by chargome in #19917
  • Bump socket.io-parser to 4.2.6 to fix CVE-2026-33151 by chargome in #19880

Other

  • (craft) Add missing mainDocsUrl for @sentry/effect SDK by bc-sentry in #19860
  • (nestjs) Add node to nest metadata by chargome in #19875
  • (serverless) Add node to metadata by nicohrubec in #19878

Internal Changes 🔧

Deps Dev

  • Bump effect from 3.19.19 to 3.20.0 by dependabot in #19926
  • Bump qunit-dom from 3.2.1 to 3.5.0 by dependabot in #19546
  • Bump @react-router/node from 7.13.0 to 7.13.1 by dependabot in #19544

Nuxt

  • Extract core logic for storage/database to prepare for Nuxt v5 by s1gr1d in #19920
  • Extract handler patching to extra plugin for Nitro v2/v3 by s1gr1d in #19915

Other

  • (astro) Re-enable server island tracing e2e test in Astro 6 by Lms24 in #19872
  • (ci) Fix "Gatbsy" typo in issue package label workflow by chargome in #19905
  • (claude) Enable Claude Code Intelligence (LSP) by s1gr1d in #19930
  • (elysia) Drop @elysiajs/opentelemetry dependency by logaretm in #19947
  • (lint) Resolve oxlint warnings by isaacs in #19893
  • (node-integration-tests) Remove unnecessary file-type dependency by Lms24 in #19824
  • (remix) Replace glob with native recursive fs walk by roli-lpci in #19531
  • (sveltekit) Replace recast + @babel/parser with acorn by roli-lpci in #19533
  • Add external contributor to CHANGELOG.md by javascript-sdk-gitflow in #19925
  • Add external contributor to CHANGELOG.md by javascript-sdk-gitflow in #19909

🤖 This preview updates automatically when you update the PR.

The size limit bumps were needed for @elysiajs/opentelemetry's
transitive OTel dependencies. Now that we dropped the plugin,
the limits can go back to the develop baseline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Mar 23, 2026

size-limit report 📦

Path Size % Change Change
@sentry/browser 25.69 kB added added
@sentry/browser - with treeshaking flags 24.17 kB added added
@sentry/browser (incl. Tracing) 42.67 kB added added
@sentry/browser (incl. Tracing, Profiling) 47.33 kB added added
@sentry/browser (incl. Tracing, Replay) 81.48 kB added added
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 71.06 kB added added
@sentry/browser (incl. Tracing, Replay with Canvas) 86.17 kB added added
@sentry/browser (incl. Tracing, Replay, Feedback) 98.41 kB added added
@sentry/browser (incl. Feedback) 42.48 kB added added
@sentry/browser (incl. sendFeedback) 30.35 kB added added
@sentry/browser (incl. FeedbackAsync) 35.4 kB added added
@sentry/browser (incl. Metrics) 26.96 kB added added
@sentry/browser (incl. Logs) 27.1 kB added added
@sentry/browser (incl. Metrics & Logs) 27.78 kB added added
@sentry/react 27.45 kB added added
@sentry/react (incl. Tracing) 45.01 kB added added
@sentry/vue 30.13 kB added added
@sentry/vue (incl. Tracing) 44.52 kB added added
@sentry/svelte 25.7 kB added added
CDN Bundle 28.35 kB added added
CDN Bundle (incl. Tracing) 43.57 kB added added
CDN Bundle (incl. Logs, Metrics) 29.22 kB added added
CDN Bundle (incl. Tracing, Logs, Metrics) 44.43 kB added added
CDN Bundle (incl. Replay, Logs, Metrics) 68.29 kB added added
CDN Bundle (incl. Tracing, Replay) 80.41 kB added added
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 81.31 kB added added
CDN Bundle (incl. Tracing, Replay, Feedback) 85.97 kB added added
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 86.86 kB added added
CDN Bundle - uncompressed 82.7 kB added added
CDN Bundle (incl. Tracing) - uncompressed 128.62 kB added added
CDN Bundle (incl. Logs, Metrics) - uncompressed 85.57 kB added added
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 131.49 kB added added
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 209.22 kB added added
CDN Bundle (incl. Tracing, Replay) - uncompressed 245.5 kB added added
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 248.35 kB added added
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 258.41 kB added added
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 261.26 kB added added
@sentry/nextjs (client) 47.4 kB added added
@sentry/sveltekit (client) 43.12 kB added added
@sentry/node-core 56.42 kB added added
@sentry/node 173.39 kB added added
@sentry/node - without tracing 96.43 kB added added
@sentry/aws-serverless 113.44 kB added added

@github-actions
Copy link
Contributor

github-actions bot commented Mar 23, 2026

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

Scenario Requests/s % of Baseline Prev. Requests/s Change %
GET Baseline 9,130 - - added
GET With Sentry 1,726 19% - added
GET With Sentry (error only) 6,174 68% - added
POST Baseline 1,211 - - added
POST With Sentry 592 49% - added
POST With Sentry (error only) 1,066 88% - added
MYSQL Baseline 3,303 - - added
MYSQL With Sentry 494 15% - added
MYSQL With Sentry (error only) 2,673 81% - added

logaretm and others added 3 commits March 23, 2026 17:11
- Import TraceHandler, TraceListener, TraceProcess from elysia
  instead of defining custom interfaces or casting to any
- Add void to floating promises (TraceListener callbacks)
- Fix package.json lint/fix scripts to use oxlint instead of eslint

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Restore onRequest, onAfterHandle, onError as real lifecycle hooks
  (.trace() is observational only — used for span creation, not SDK logic)
- Set HTTP error status on root span in onError handler
- Update elysia-bun E2E tests: origin auto.http.otel.elysia -> auto.http.elysia
- Use /with-middleware/test route for anonymous span test (needs actual handlers)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant