Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Bug]: Sidebar "update everything" never updates CLI/npm servers (npm check blocked by CORS preflight)

Open Beginner friendly
#18,690 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
desktop, frontend

Research direction

Read apps/web/src/state/npmRelease.ts, especially the npmReleasePublishedAtom request and its Effect pipeline; compare it with the proposed tracer propagation setting. Check the npm version lookup from the web app or Electron renderer and confirm it succeeds without a CORS preflight. Done means "update everything" includes eligible boot-service CLI servers when the target npm version is published.

Written by the indexing model from the issue text.

Description

accepted bug via-triage
What happens

On desktop nightly 0.0.46-nightly.20261012.3021, the sidebar's "update everything" button (#18053) updates desktop-app servers but never includes a CLI server. The connected server is a launcher-managed t3 __service-launcher systemd service on 0.0.46-nightly.20261012.3010, which advertises serverSelfUpdate: "boot-service". That server's row in Settings → Connections still shows its update icon, and updating from there works.

npm already has the target version (nightly dist-tag = 0.0.46-nightly.20261012.3021), and both versions are on the nightly channel, so the server should be included.

Cause

useUpdateEverything keeps non-desktop-managed servers only after npm confirms the target version:

  • apps/web/src/components/sidebar/useUpdateEverything.ts:56-58 filters with useNpmReleasePublished(targetVersion)
  • apps/web/src/state/npmRelease.ts:14 checks with Effect's HttpClient.get + FetchHttpClient.layer

Effect's HttpClient adds traceparent and b3 headers to every request by default (HttpClient.TracerPropagationEnabled defaults to true). Those headers make the browser send a CORS preflight, and registry.npmjs.org answers OPTIONS with 404 and no Access-Control-Allow-Origin. The fetch is blocked, the atom fails, AsyncResult.getOrElse(result, () => false) (npmRelease.ts:40) reports "not published", and every npm/CLI server is dropped from the run. This affects the desktop renderer and app.t3.codes alike. The Connections "Update all" and per-row update don't check npm, which is why they still work.

Repro / evidence

Preflight is rejected:

$ curl -sI -X OPTIONS -H 'Origin: https://app.t3.codes' -H 'Access-Control-Request-Method: GET' \
    https://registry.npmjs.org/t3/0.0.46-nightly.20261012.3021
HTTP/2 404          # no access-control-allow-origin

What the effect 4.0.1 the web app ships sends for HttpClient.get(...) with FetchHttpClient.layer:

{"b3":"d25f…-a0cb…-1","traceparent":"00-d25f…-a0cb…-01"}

The same fetch inside the repo's Electron 44 (Chromium), run from an https:// page:

plain GET:          ok 200
with trace headers: FAILED Failed to fetch
Expected

"Update everything" includes boot-service CLI servers once npm has the target version.

Suggested fix

Turn off trace propagation for this cross-origin request in npmReleasePublishedAtom (apps/web/src/state/npmRelease.ts):

}).pipe(
  Effect.provideService(HttpClient.TracerPropagationEnabled, false),
  Effect.provide(FetchHttpClient.layer),
)

With that change no extra headers are sent and the request stays a simple CORS GET (checked with the same probe). A test on the fetch-failure path would also help: right now a failed check looks the same as "not published", which hid this.

Dominant language
TypeScript
Stars
24.8k
Forks
6.4k
Avg merge
11h 33m
Merged PRs (30d)
312

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from pingdotgg/t3code

All issues in pingdotgg/t3code

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.