Troubleshooting
When using JSR you may encounter an error. This page will help you to understand what the error means and how to fix it.
Publishing errors
These errors may occur when publishing a package to JSR.
linkInTarball
The package being published contains a symlink or hardlink. JSR does not support
symlinks or hardlinks in packages. You can fix this error by removing the
symlink or hardlink from your package, or by
excluding it in your jsr.json
/
deno.json
.
To find the symlink or hardlink, run the following command in your package directory:
# Linux and macOS
find . -type l -o -type h
# Windows
Get-ChildItem -Recurse | Where-Object { $_.Attributes -match "ReparsePoint" }
invalidEntryType
The package tarball contains an entry that is not a regular file or directory.
JSR only supports regular files and directories in package tarballs. You can fix
this error by removing the invalid entry from your package tarball or
excluding it in your jsr.json
/
deno.json
.
invalidPath
The published package contains a file or directory with a path that JSR does not allow. The message of the error contains the invalid path, and what is wrong with it.
Generally, JSR does not allow paths that are invalid on Windows, paths that are troublesome in URLs, and paths where multiple casings of the same path exist.
You can fix this error by changing the path of the file or directory in your
package to a path that JSR allows, removing the file or directory from your
package, or excluding it in your
jsr.json
/ deno.json
.
Path rules are as follows:
- Less than 155 chars
- The last component (filename) of the path must be less than 95 chars
- Path must not end in a slash
- Must not contain a double slash (
//
) - Must not contain a
.
or..
path segment - No path segment is a Windows reserved name like
CON
orPRN
- No path segment ends in a dot (
.
) - Does not contain a Windows path separator (
\
or:
) - Does not contain an invalid Windows path char (
<
,>
,"
,|
,?
,*
) - Does not contain whitespace (
\s
,\t
,\n
,\r
) - Does not contain chars that have a special meaning in URLs (
%
or#
) - Does not contain other chars that are not one of
a-z
,A-Z
,0-9
,$
,(
,)
,+
,-
,.
,@
,[
,]
,_
,{
,}
, or~
- Does not start with
/_dist/
, as this is reserved for the directory JSR emits.js
and .d.ts
files to when building an npm tarball
invalidExternalImport
The package being published contains an external import that is not allowed by
JSR. JSR only allows external imports that are jsr:
, npm:
, data:
, bun:
,
or node:
specifiers.
You can fix this error by removing the external import from your package, or by replacing it with an external import from a supported source.
globalTypeAugmentation
The package being published contains global type augmentation. This is disallowed because it introduces a “slow type”. Learn more about “slow types”.
You can fix this error by removing the global type augmentation from your source.
commonJs
The package being published contains CommonJS code like require()
. This is
disallowed because JSR is ESM only.
You can fix this error by removing the CommonJS code from your source.
bannedTripleSlashDirectives
The package being published contains a triple slash directive that is not
allowed by JSR. JSR only allows triple slash directives that are
/// <reference types="..." />
directives.
/// <reference lib="..." />
directives and
/// <reference no-default-lib="true" />
are not allowed.
You can fix this error by removing the triple slash directive from your source.
bannedImportAssertion
The package being published contains the legacy “import assertions” syntax, which is not allowed by JSR. JSR only allows the new “import attributes” syntax.
import "./data.json" assert { type: "json" };
is not allowed.
import "./data.json" with { type: "json" };
is allowed.
You can fix this error by updating the import assertion to an import attribute,
by replacing assert
with with
.
fileTooLarge
The package being published contains a file that is too large. JSR only allows files that are less than 4MB in size. You can fix this error by removing the file from your package or by excluding it in your config file.
packageTooLarge
The package being published is too large. JSR only allows packages that are less than 20MB in size. You can fix this error by removing large files from your package or by excluding them in your config file.
If you are unable to exclude enough files to get your package under the limit, contact support to request a limit increase.
caseInsensitiveDuplicatePath
The package being published contains a file or directory with a path that is already used by another file or directory in the package, but with a different casing. JSR does not allow this because it can cause problems on case insensitive file systems like NTFS on Windows.
You can fix this error by removing one of the files or directories from your package, renaming one of the files or directories in your package, or excluding one of the files or directories in your config file.
missingConfigFile
The package being published does not contain a config file. JSR requires all
packages to contain a config file to read metadata like exports
.
You can fix this error by adding a config file to your package.
invalidConfigFile
The package being published contains a config file that was not valid JSON(C) (has syntax errors).
You can fix this error by fixing your config file to be valid JSON(C).
configFileNameMismatch
The package being published contains a config file that has a name
field that
does not match the name of the package being published. JSR requires the name
field of the config file to match the name of the package being published.
You can fix this error by changing the name
field of your config file to match
the name of the package being published.
configFileVersionMismatch
The package being published contains a config file that has a version
field
that does not match the version of the package being published. JSR requires the
version
field of the config file to match the version of the package being
published.
You can fix this error by changing the version
field of your config file to
match the version of the package being published.
configFileExportsInvalid
The package being published contains a config file that is either missing an
exports
field, or has an exports
field that is not valid.
Learn more about exports.
You can fix this error by updating the exports
field of your config file to be
one of the two valid forms:
{
"exports": "./mod.ts"
}
{
"exports": {
".": "./mod.ts",
"./greet": "./greet.ts"
}
}
graphError
The package being published references a module that does not exist, or has a syntax error. JSR requires all modules referenced from the entrypoint to be valid.
You can fix this error by fixing the module that has the error.
docError
The package being published fails to generate documentation with deno doc
.
This is likely because the package contains a syntax error.
If you think this is a bug, please contact support at help@jsr.io.
invalidJsrSpecifier
The package being published contains a module that references a JSR specifier
that is not valid. JSR specifiers must be in the form
jsr:@<scope>/<name>@<version>/<path>
or
jsr:/@<scope>/<name>@<version>/<path>
. You can fix this error by updating the
module to reference a valid JSR specifier.
invalidNpmSpecifier
The package being published contains a module that references an npm specifier
that is not valid. npm specifiers must be in the form
npm:<name>@<version>/<path>
or npm:/<name>@<version>/<path>
. You can fix
this error by updating the module to reference a valid npm specifier.
actorNotAuthorized
The package is being published with an access token that does not have permission to publish to the scope.
This can happen when publishing from GitHub Actions, if the GitHub repository being published from is not linked to the package you are trying to publish. You can fix this error by linking the GitHub repository to the package you are trying to publish in the package settings.
If you are not publishing from GitHub Actions, you can fix this error by using an access token that has permission to publish to the scope.
actorNotScopeMember
The package is being published with an access token corresponding to a user that is not a member of the scope.
This can happen when publishing from GitHub Actions if the user that invoked the Actions workflow is not a member of the scope, if publishing is restricted to scope members (default). You can fix this by adding the user to the scope, or by changing the GitHub Actions security settings on the scope to not require the publishing user to be a member of the scope.
If you are not publishing from GitHub Actions, you can fix this error by authenticating as a user that is a member of the scope, or by adding the user to the scope with at least the “member” role.
missingLicense
The package being published has not specified its license. JSR requires all
packages to specify a "license"
field in the configuration or contain a
license file.
You can fix this error by adding a "license"
field containing an
SPDX identifier. For example:
{
"name": "@scope/pkg",
"version": "1.0.0",
"license": "MIT",
"exports": "./mod.ts"
}
Alternatively, you may include a license file. This file must be at the root of your package and must be named one of the following:
LICENSE
LICENSE.md
LICENSE.txt
LICENCE
LICENCE.md
LICENCE.txt
Some common open source licenses can be found at choosealicense.com.
Excluded module error
After filtering files, you may encounter an excluded-module
error saying that
a module in the package’s module graph was excluded from publishing.
This may occur when you’ve accidentally excluded a module that is used in the
published code (for example, writing "exclude": ["**/*.ts"]
and then trying to
publish a package with a mod.ts
export). In this scenario, JSR is preventing
you from accidentally publishing a package that won’t work.
To fix the issue, ensure the module mentioned in the error message is not
excluded in exclude
and/or publish.exclude
in the config file, or don’t
reference it in any code used by your package’s exports.
You can find all files that are being included in the package by running the following command in your package directory:
npx jsr publish --dry-run
# or
deno publish --dry-run