Cloud Parts

JSR

The JavaScript Registry: an open-source, TypeScript-first package registry where you publish TypeScript source and it generates the docs, JavaScript and .d.ts files that npm, pnpm, Yarn, Bun and Deno projects install.

Type
Open source
Made by
Deno Land Inc.
License
MIT
Facts checked
12 October 2026

What it is

JSR is a registry, the server package managers download from, not a package manager itself. Packages are ES modules named @scope/name, and authors publish TypeScript source with npx jsr publish or deno publish from a jsr.json (or deno.json) that gives the name, version and exports. JSR analyzes the code as it arrives: it generates API documentation, and for Node-style consumers it transpiles to JavaScript and writes .d.ts files, so authors have no build step. Public APIs must avoid “slow types” (exports whose types need inference), because JSR does not run the TypeScript compiler. Every version is immutable: you can yank it, but not change it, and deleting is allowed only within 24 hours for a version with almost no downloads and no dependents.

Deno imports jsr: specifiers natively and downloads only the files it imports. Everything else goes through an npm-compatible endpoint at npm.jsr.io that serves each package as @jsr/scope__name: pnpm 10.9+, Yarn 4.9+ and vlt understand jsr: directly, and for npm, Bun or older versions npx jsr add writes the .npmrc line and installs with your package manager. Publishing from GitHub Actions uses an OIDC token instead of a stored secret and records SLSA provenance in Sigstore’s transparency log. Each package gets a JSR score from 0 to 100 for documentation, best practices, discoverability and runtime compatibility, which also ranks search results.

Why teams pick it

  • Authors publish TypeScript once; docs, transpiled JavaScript and type declarations for npm users are generated for them
  • Works with the package managers people already use, and JSR packages can depend on npm packages
  • Tokenless publishing from GitHub Actions with automatic Sigstore provenance, and immutable versions that can’t be swapped after you audit them
  • Free to use, open source under MIT, and governed by a five-member board that includes the creators of Node.js, npm and Vue

Watch out for

  • Through the npm layer you get transpiled JavaScript, not the TypeScript source, so “go to definition” lands in generated files, and npm or Yarn may install duplicate copies
  • ESM only, and exported APIs must have explicit types or docs and .d.ts output degrade
  • Default quotas of 3 scopes per user, 100 packages per scope and 20 MB per package version (raised on request)
  • Still operated and paid for by the Deno Company, whose team announced in October 2026 that it is joining Cloudflare; JSR keeps running, with its infrastructure moving to Cloudflare

Alternatives

What all package managers have in common →

How it fits with other technologies

Publish a TypeScript package, then install it from Node, pnpm or Deno · bash

# jsr.json:  { "name": "@luca/greet", "version": "1.0.0", "exports": "./mod.ts" }
npx jsr publish --dry-run   # validate without publishing
npx jsr publish             # authorize in the browser, no token to store

# Consumers
pnpm add jsr:@luca/greet    # pnpm 10.9+ and Yarn 4.9+ understand jsr: natively
npx jsr add @luca/greet     # npm and Bun: writes @jsr:registry=https://npm.jsr.io to .npmrc
deno add jsr:@luca/greet

# In code, the import is the same everywhere:
#   import { greet } from "@luca/greet";

See it in a real stack

No architecture uses JSR yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2024–2026

npm was designed in 2009 for Node.js and CommonJS. By 2024 ES modules were the web standard, TypeScript had become the default for serious JavaScript, and Node was one runtime among several, alongside Deno, Bun and workerd. npm, as the Deno team put it, “was not designed with these new realities in mind.”

On March 1, 2024, Ryan Dahl, Luca Casonato and Kevin Whinnery of Deno opened JSR as a public beta: TypeScript-first, ESM-only, free and open source, and designed to “build on the success of npm, not fork it” by serving every package to npm-based projects too. Casonato later listed what set it apart: TypeScript source published as is with generated docs, tokenless publishing from GitHub Actions, Sigstore provenance and the JSR score.

The Deno team built JSR but meant it to be an openly governed community service. On February 3, 2025 it gained an independent board with a charter: Evan You, Isaac Schlueter, James Snell, Luca Casonato and Ryan Dahl, tasked with finding a legal home in a foundation such as the Linux Foundation or OpenJS, with the Deno Company paying the bills until then. pnpm and Yarn added native jsr: support in April 2025. On October 9, 2026, Dahl announced that the Deno team is joining Cloudflare and that JSR will keep operating, with its infrastructure moving to Cloudflare.

Why it’s built this way

Publish TypeScript source, generate the rest
TypeScript had become a de facto standard, so JSR takes the source as published and produces documentation, JavaScript and .d.ts files itself, removing the build step from every author.
ES modules only
ESM is the web standard for JavaScript modules, and the team wanted the registry to push the ecosystem toward it rather than carry CommonJS forward.
A superset of npm rather than a fork
JSR would only be adopted if it interoperated with existing projects, so every package is also served through an npm-compatible endpoint and can depend on npm packages.
Immutable versions
If published versions could change, users could not trust that a package they audited stays the same, and caching the registry would be harder.

Timeline

  1. 2024

    JSR opens as a public beta on March 1, MIT-licensed

  2. 2025

    Independent governance board and charter announced on February 3

  3. 2025

    pnpm 10.9 and Yarn 4.9 install jsr: packages natively (April)

  4. 2026

    Deno team joins Cloudflare on October 9; JSR’s infrastructure moves to Cloudflare

Sources12 · facts checked 12 October 2026

Improve this page on GitHub