Skip to content

@stephansama/multipublish

Publish packages to multiple providers easily

Open Table of contents
Terminal window
pnpm install @stephansama/multipublish
Option Alias Description Type
--config -c Path to config file string
--dry -d Perform a dry run boolean
--released -r Packages that have been updated and require a publish array
--releasedFile -f File denoting which packages have been updated string
--useChangesetStatus -s Path to changeset status file used to version release boolean
--verbose -v Enable verbose logging boolean
--versionJsr -j Update version JSR configuration files boolean

You can configure multipublish by creating a configuration file (or object) in the root of your project. The following file formats are supported:

  • package.json
  • .multipublishrc.cjs
  • .multipublishrc.js
  • .multipublishrc.json
  • .multipublishrc.mjs
  • .multipublishrc.ts
  • .multipublishrc.yaml
  • .multipublishrc.yml
  • .multipublishrc
  • .config/.multipublishrc.json
  • .config/.multipublishrc.yaml
  • .config/.multipublishrc.yml
  • .config/.multipublishrc
  • .config/multipublishrc.cjs
  • .config/multipublishrc.js
  • .config/multipublishrc.json
  • .config/multipublishrc.mjs
  • .config/multipublishrc.ts
  • .config/multipublishrc.yaml
  • .config/multipublishrc.yml
  • .config/multipublishrc
  • multipublish.config.cjs
  • multipublish.config.js
  • multipublish.config.mjs
  • multipublish.config.ts
{
"$schema": "./node_modules/@stephansama/multipublish/config/schema.json",
"platforms": [
["jsr", { "experimentalGenerateJSR": true, "defaultExclude": ["!dist"] }],
[
"npm",
{
"registry": "https://npm.pkg.github.com",
"tokenEnvironmentKey": "GITHUB_TOKEN"
}
]
]
}

If publishing to the GitHub NPM registry, you must add packages to permissions when using a GitHub token. And allow write and read permissions for workflows (located in repo settings > actions > general).

permissions:
packages: write

When publishing to JSR, you must either have a valid jsr.json or deno.json, or allow experimentalGenerateJSR using the config option.

If you are using jsr this with changesets, please update your version script with a preversion script that calls the multipublish CLI in order to update your existing jsr configurations.

{
"scripts": {
"preversion": "multipublish --useChangesetStatus --versionJsr",
"version": "changeset version"
}
}

you can run multipublish after a changeset publish like so

- if: github.ref_name == 'main'
name: 🦋 Create Changeset Release
uses: changesets/action@v1
id: changesets
with:
commit: "chore: Update version for release"
title: "chore: Update version for release"
publish: pnpm run publish
createGithubReleases: true
- name: publish to other registries
if: steps.changesets.outputs.published == 'true'
run: |
echo "${{ steps.changesets.outputs.publishedPackages }}" | multipublish

Object containing the following properties:

Property Type Default
platforms (*) Platforms
tmpDirectory string '.release'
useChangesets boolean true

(*) Required.

Object containing the following properties:

Property Type Default
allowSlowTypes boolean true
defaultExclude Array<string>
defaultInclude Array<string>
experimentalGenerateJSR boolean false
experimentalUpdateCatalogs boolean false
tokenEnvironmentKey string 'JSR_AUTH_TOKEN'

All properties are optional.

Object containing the following properties:

Property Type Default
registry string 'https://registry.npmjs.org/'
strategy '.npmrc' | 'package.json' '.npmrc'
tokenEnvironmentKey string 'NODE_AUTH_TOKEN'

All properties are optional.

*Array of 'jsr' | 'npm' *or* Tuple:

  1. 'jsr'
  2. JsrPlatformOptions
or Tuple:
  1. 'npm'
  2. NpmPlatformOptions
items.*

Module Description

arguments

catalog

cli

config

detect

index

jsr

publish

release

schema

utilities