Skip to content

@stephansama/multipublish

Publish packages to multiple providers easily

Open Table of contents
Terminal window
pnpm install @stephansama/multipublish
OptionAliasDescriptionType
--config-cPath to config filestring
--dry-dPerform a dry runboolean
--released-rPackages that have been updated and require a publisharray
--releasedFile-fFile denoting which packages have been updatedstring
--useChangesetStatus-sPath to changeset status file used to version releaseboolean
--verbose-vEnable verbose loggingboolean
--versionJsr-jUpdate version JSR configuration filesboolean

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:

PropertyTypeDefault
platforms (*)Platforms
tmpDirectorystring'.release'
useChangesetsbooleantrue

(*) Required.

Object containing the following properties:

PropertyTypeDefault
allowSlowTypesbooleantrue
defaultExcludeArray<string>
defaultIncludeArray<string>
experimentalGenerateJSRbooleanfalse
experimentalUpdateCatalogsbooleanfalse
tokenEnvironmentKeystring'JSR_AUTH_TOKEN'

All properties are optional.

Object containing the following properties:

PropertyTypeDefault
registrystring'https://registry.npmjs.org/'
strategy'.npmrc' | 'package.json''.npmrc'
tokenEnvironmentKeystring'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