Formats

Release Hub supports multiple configuration formats so you can choose the style that best fits your workflow.

Below are fully working examples for each supported format:

JSON

{
  "$schema": "https://cdn.jsdelivr.net/npm/release-hub@latest/schema/release-hub.schema.json",
  "dryRun": false,
  "defaultReleaseType": "patch",
  "targets": {
    "node": true,
    "deno": true,
    "jsr": false
  },
  "sync": [["node", "deno"]],
  "hooks": {
    "before:init": "echo Starting release...",
    "after:push": ["echo Pushed!", "git status"]
  }
}

TypeScript / JavaScript

ESM

import { defineConfig } from 'release-hub/config';

export default defineConfig({
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
});

or

export default {
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
};

JavaScript (ESM) with Type Checking

// @ts-check
/** @type {import("release-hub/config").Config} */
const config = {
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
};

export default config;

CommonJS

const { defineConfig } = require('release-hub/config');

module.exports = defineConfig({
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
});

or

module.exports = {
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
};

JavaScript (CJS) with Type Checking

// @ts-check
/** @type {import("release-hub/config").Config} */
module.exports = {
  dryRun: false,
  defaultReleaseType: 'minor',
  targets: {
    node: true,
    jsr: true,
  },
  sync: [['node', 'jsr']],
  hooks: {
    'before:init': 'echo Preparing...',
    'after:commit': ['echo Commit done'],
  },
};

TypeScript configs are compiled automatically at runtime using Jiti, so you don’t need to build manually.

package.json

You can also define a lightweight config directly inside your package.json

{
  "name": "my-project",
  "version": "1.0.0",
  "release-hub": {
    "defaultReleaseType": "minor",
    "targets": { "node": true },
    "hooks": {
      "after:push": "echo 'Release pushed!'"
    }
  }
}