Skip to content

Configuration

Complete guide to configuring Relizy.

Configuration File

Create a configuration file in your project root:

ts
import { defineConfig } from 'relizy'

export default defineConfig({
  monorepo: {
    versionMode: 'selective',
    packages: ['packages/*'],
  },
})
js
import { defineConfig } from 'relizy'

export default defineConfig({
  monorepo: {
    versionMode: 'selective',
    packages: ['packages/*'],
  },
})
json
{
  "monorepo": {
    "versionMode": "selective",
    "packages": ["packages/*"]
  }
}
json
{
  "name": "my-monorepo",
  "version": "1.0.0",
  "relizy": {
    "monorepo": {
      "versionMode": "selective",
      "packages": ["packages/*"]
    }
  }
}
yml
monorepo:
  versionMode: selective
  packages:
    - packages/*
toml
[monorepo]
versionMode = "selective"
packages = [ "packages/*" ]

Supported Formats

Relizy supports multiple configuration formats. It loaded with c12, check the documentation for more details.

  • relizy.config.ts (recommended)
  • relizy.config.js
  • relizy.config.mjs
  • relizy.config.json
  • relizy.config.yaml
  • relizy.config.yml
  • relizy.config.toml
  • And more...

Zero Configuration

Relizy works out of the box without any configuration (for single package):

bash
relizy release

Configuration is only needed for:

  • Monorepo settings (needs monorepo section with versionMode and packages glob patterns to find your packages)
  • Custom commit types
  • Multiple release strategies

Quick Start

Single Package

No configuration needed! Just run:

bash
relizy release --minor

Monorepo - Basic

ts
// relizy.config.ts
export default defineConfig({
  monorepo: {
    versionMode: 'selective',
    packages: ['packages/*'],
  },
})

Monorepo - Advanced

ts
// relizy.config.ts
export default defineConfig({
  projectName: 'My project', // replace the name in your root package.json (Useful for Twitter (X) and Slack posts)
  monorepo: {
    versionMode: 'selective',
    packages: ['packages/*'],
    ignorePackageNames: ['pacakge-a'],
  },
  bump: {
    dependencyTypes: ['dependencies', 'devDependencies'],
  },
  types: {
    feat: { title: '🎉 Features', semver: 'minor' },
    fix: { title: '🐛 Fixes', semver: 'patch' },
  },
  publish: {
    access: 'public',
    tag: 'latest',
  },
})

Configuration Sections

SectionDescription
monorepoMonorepo-specific settings
typesCommit type customization
bumpVersion bump settings
changelogChangelog generation settings
publishNPM publishing options
releaseRelease workflow settings
socialSocial media integration (Twitter, Slack)
prCommentPR comment settings
hooksLifecycle hooks for custom scripts
multiple-configsUsing multiple configuration files

TypeScript Support

Get full IntelliSense with TypeScript:

ts
import { defineConfig } from 'relizy'

export default defineConfig({
  // Full type checking and autocomplete
  monorepo: {
    versionMode: 'selective', // ← Autocompleted
  },
})

Multiple Configurations

Use different configs for different workflows:

bash
# Use default config
relizy release

# Use staging config
relizy release --config relizy.staging

# Uses relizy.staging.config.ts

Learn more in Multiple Configs.

Default Configuration

If no config file exists, Relizy uses these defaults:

ts
const defaultConfig = {
  cwd: process.cwd(),
  types: {
    feat: { title: '🚀 Enhancements', semver: 'minor' },
    perf: { title: '🔥 Performance', semver: 'patch' },
    fix: { title: '🩹 Fixes', semver: 'patch' },
    refactor: { title: '💅 Refactors', semver: 'patch' },
    docs: { title: '📖 Documentation', semver: 'patch' },
    build: { title: '📦 Build', semver: 'patch' },
    types: { title: '🌊 Types', semver: 'patch' },
    chore: { title: '🏡 Chore' },
    examples: { title: '🏀 Examples' },
    test: { title: '✅ Tests' },
    style: { title: '🎨 Styles' },
    ci: { title: '🤖 CI' },
  },
  templates: {
    commitMessage: 'chore(release): bump version to {{newVersion}}',
    tagMessage: 'Bump version to {{newVersion}}',
    tagBody: 'v{{newVersion}}',
    emptyChangelogContent: 'No relevant changes for this release',
    twitterMessage: '🚀 {{projectName}} {{newVersion}} is out!\n\n{{changelog}}\n\n{{releaseUrl}}\n{{changelogUrl}}',
    slackMessage: undefined,
    changelogTitle: '{{oldVersion}}...{{newVersion}}',
  },
  excludeAuthors: [],
  noAuthors: false,
  bump: {
    type: 'release',
    clean: true,
    dependencyTypes: ['dependencies'],
    yes: false,
  },
  changelog: {
    rootChangelog: true,
    includeCommitBody: true,
  },
  publish: {
    private: false,
    args: [],
  },
  tokens: {
    gitlab:
        process.env.RELIZY_GITLAB_TOKEN
        || process.env.GITLAB_TOKEN
        || process.env.GITLAB_API_TOKEN
        || process.env.CI_JOB_TOKEN,
    github:
        process.env.RELIZY_GITHUB_TOKEN
        || process.env.GITHUB_TOKEN
        || process.env.GH_TOKEN,
    twitter: {
      apiKey: process.env.RELIZY_TWITTER_API_KEY || process.env.TWITTER_API_KEY,
      apiKeySecret: process.env.RELIZY_TWITTER_API_KEY_SECRET || process.env.TWITTER_API_KEY_SECRET,
      accessToken: process.env.RELIZY_TWITTER_ACCESS_TOKEN || process.env.TWITTER_ACCESS_TOKEN,
      accessTokenSecret: process.env.RELIZY_TWITTER_ACCESS_TOKEN_SECRET || process.env.TWITTER_ACCESS_TOKEN_SECRET,
    },
    slack:
        process.env.RELIZY_SLACK_TOKEN
        || process.env.SLACK_TOKEN,
  },
  scopeMap: {},
  social: {
    twitter: {
      enabled: false,
      onlyStable: true,
    },
    slack: {
      enabled: false,
      onlyStable: true,
    },
  },
  prComment: {
    mode: 'append',
  },
  release: {
    commit: true,
    publish: true,
    changelog: true,
    push: true,
    clean: true,
    providerRelease: true,
    noVerify: false,
    gitTag: true,
    social: true,
    prComment: true,
  },
  logLevel: 'default',
}

Next Steps

Explore specific configuration sections:

Released under the MIT License.