> ## Documentation Index
> Fetch the complete documentation index at: https://lunr-f6858e75.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Output formats

> Choose the right format for your release notes

## Overview

HelixCommit supports five output formats: Markdown, HTML, plain text, JSON, and YAML. Each format is optimized for different use cases, from GitHub releases to programmatic integrations.

## Markdown format

The default format, perfect for documentation sites, GitHub releases, and version control.

```bash theme={}
helixcommit generate --format markdown --out RELEASE_NOTES.md
```

### Example output

```markdown theme={}
## Release v1.2.1
_Released on 2025-11-13_

### Features
- **api**: Add user authentication endpoint (abc123)
- **ui**: Implement dark mode toggle (def456)
- Add support for custom templates (ghi789)

### Bug Fixes
- **parser**: Fix handling of multiline commit messages (jkl012)
- Resolve rate limiting in GitHub client (mno345)

### Breaking Changes
- **api**: Remove deprecated /v1/users endpoint (pqr678)

### Documentation
- Update API reference with new endpoints (stu901)

[View full changelog](https://github.com/owner/repo/compare/v1.2.0...v1.2.1)
```

### Features

<CardGroup cols={2}>
  <Card title="GitHub-compatible" icon="github">
    Renders perfectly in GitHub releases and README files
  </Card>

  <Card title="Human-readable" icon="eye">
    Clean, scannable format for developers and users
  </Card>

  <Card title="Linkable commits" icon="link">
    Commit SHAs are included for easy reference
  </Card>

  <Card title="Categorized sections" icon="list">
    Organized by commit type (features, fixes, etc.)
  </Card>
</CardGroup>

### Use cases

* **GitHub releases**: Copy directly to release descriptions
* **CHANGELOG.md**: Maintain version history
* **Documentation sites**: Embed in Mintlify, Docusaurus, etc.
* **Pull request descriptions**: Reference changes

<Tip>
  Markdown format includes compare URLs when GitHub integration is enabled, making it easy to see all changes between versions.
</Tip>

## HTML format

Professional HTML output ready for embedding in websites or sending via email.

```bash theme={}
helixcommit generate --format html --out changelog.html
```

### Example output

```html theme={}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Release Notes - v1.2.1</title>
  <style>
    body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
    .release { margin: 2rem 0; }
    .section { margin: 1.5rem 0; }
    h2 { color: #1a202c; }
    h3 { color: #2d3748; }
    ul { list-style: none; padding: 0; }
    li { margin: 0.5rem 0; }
    .commit-sha { color: #718096; font-family: monospace; }
  </style>
</head>
<body>
  <div class="release">
    <h2>Release v1.2.1</h2>
    <p class="date">Released on November 13, 2025</p>
    
    <div class="section">
      <h3>Features</h3>
      <ul>
        <li><strong>api:</strong> Add user authentication endpoint <span class="commit-sha">(abc123)</span></li>
        <li><strong>ui:</strong> Implement dark mode toggle <span class="commit-sha">(def456)</span></li>
      </ul>
    </div>
    
    <div class="section">
      <h3>Bug Fixes</h3>
      <ul>
        <li><strong>parser:</strong> Fix handling of multiline commit messages <span class="commit-sha">(jkl012)</span></li>
      </ul>
    </div>
  </div>
</body>
</html>
```

### Features

<CardGroup cols={2}>
  <Card title="Styled output" icon="palette">
    Includes CSS for professional appearance
  </Card>

  <Card title="Embeddable" icon="code">
    Drop into any website or email
  </Card>

  <Card title="Responsive" icon="mobile">
    Looks great on desktop and mobile
  </Card>

  <Card title="Printable" icon="print">
    Print-friendly layout
  </Card>
</CardGroup>

### Use cases

* **Product websites**: Embed in /changelog pages
* **Email campaigns**: Send formatted updates to users
* **Internal dashboards**: Display recent changes
* **PDF generation**: Convert to PDF for stakeholders

<Info>
  HTML output includes semantic markup for accessibility and SEO.
</Info>

### Customization

The HTML formatter uses Jinja2 templates. You can customize the styling by modifying the template:

<Steps>
  <Step title="Locate the HTML formatter">
    ```bash theme={}
    # In your HelixCommit installation
    src/helixcommit/formatters/html.py
    ```
  </Step>

  <Step title="Modify the CSS">
    Edit the CSS section in the template to match your brand:

    ```python theme={}
    # html.py
    def render_html(changelog):
        template = """
        <style>
            body { font-family: 'Your Font', sans-serif; }
            h2 { color: #your-color; }
            /* Add your styles */
        </style>
        """
    ```
  </Step>

  <Step title="Use programmatically">
    ```python theme={}
    from helixcommit.formatters import html
    # Your custom formatter logic
    ```
  </Step>
</Steps>

## Text format

Plain text output for terminals, logs, and simple notifications.

```bash theme={}
helixcommit generate --format text --out CHANGES.txt
```

### Example output

```
================================================================================
Release v1.2.1
Released on 2025-11-13
================================================================================

FEATURES
--------
* api: Add user authentication endpoint (abc123)
* ui: Implement dark mode toggle (def456)
* Add support for custom templates (ghi789)

BUG FIXES
---------
* parser: Fix handling of multiline commit messages (jkl012)
* Resolve rate limiting in GitHub client (mno345)

BREAKING CHANGES
----------------
* api: Remove deprecated /v1/users endpoint (pqr678)

DOCUMENTATION
-------------
* Update API reference with new endpoints (stu901)

Full changelog: https://github.com/owner/repo/compare/v1.2.0...v1.2.1
```

### Features

<CardGroup cols={2}>
  <Card title="Terminal-friendly" icon="terminal">
    Perfect for CLI output and logs
  </Card>

  <Card title="Universal" icon="globe">
    Works everywhere, no formatting dependencies
  </Card>

  <Card title="Scriptable" icon="code">
    Easy to parse with shell scripts
  </Card>

  <Card title="Lightweight" icon="feather">
    Minimal file size
  </Card>
</CardGroup>

### Use cases

* **Slack/Discord bots**: Post updates to team channels
* **Email (plain text)**: Send simple text notifications
* **Log files**: Record releases in application logs
* **Git commit messages**: Include in merge commits
* **Terminal display**: Quick review during development

<Tip>
  Text format uses ASCII art for visual hierarchy without requiring special rendering.
</Tip>

## JSON format

Machine-readable JSON output for programmatic use, CI/CD pipelines, and custom tooling.

```bash theme={}
helixcommit generate --format json --out changelog.json
```

### Example output

```json theme={}
{
  "version": "v1.2.1",
  "date": "2025-11-13T12:00:00+00:00",
  "sections": [
    {
      "title": "Features",
      "items": [
        {
          "title": "Add user authentication endpoint",
          "type": "feat",
          "scope": "api",
          "breaking": false,
          "summary": null,
          "details": null,
          "notes": [],
          "references": {
            "commit": "abc123def",
            "pr": "https://github.com/owner/repo/pull/42"
          },
          "metadata": {
            "pr_number": 42
          }
        },
        {
          "title": "Implement dark mode toggle",
          "type": "feat",
          "scope": "ui",
          "breaking": false,
          "summary": null,
          "details": null,
          "notes": [],
          "references": {
            "commit": "def456ghi"
          },
          "metadata": {}
        }
      ]
    },
    {
      "title": "Bug Fixes",
      "items": [
        {
          "title": "Fix handling of multiline commit messages",
          "type": "fix",
          "scope": "parser",
          "breaking": false,
          "summary": null,
          "details": null,
          "notes": [],
          "references": {
            "commit": "jkl012mno"
          },
          "metadata": {}
        }
      ]
    }
  ],
  "metadata": {
    "compare_url": "https://github.com/owner/repo/compare/v1.2.0...v1.2.1"
  }
}
```

### Features

<CardGroup cols={2}>
  <Card title="Machine-readable" icon="code">
    Parse directly with any JSON library
  </Card>

  <Card title="Complete data" icon="database">
    Access all metadata, references, and details
  </Card>

  <Card title="Programmatic use" icon="gear">
    Build custom tools and integrations
  </Card>

  <Card title="CI/CD friendly" icon="rotate">
    Easy to process in automated pipelines
  </Card>
</CardGroup>

### Use cases

* **API responses**: Serve changelog data from your backend
* **CI/CD pipelines**: Parse and process release data programmatically
* **Custom tooling**: Build dashboards, notifications, or reports
* **Data analysis**: Aggregate and analyze release patterns
* **Slack/Discord bots**: Transform JSON into custom message formats

<Info>
  JSON format preserves all structured data including PR numbers, commit references, breaking change flags, and custom metadata.
</Info>

### Processing JSON output

```bash theme={}
# Extract just the version
helixcommit generate --format json | jq '.version'

# List all breaking changes
helixcommit generate --format json | jq '.sections[].items[] | select(.breaking == true)'

# Count items per section
helixcommit generate --format json | jq '.sections[] | {title: .title, count: (.items | length)}'
```

## YAML format

Human-readable structured output for configuration files, CI/CD pipelines, and tools that prefer YAML.

```bash theme={}
helixcommit generate --format yaml --out changelog.yaml
```

### Example output

```yaml theme={}
version: v1.2.1
date: '2025-11-13T12:00:00+00:00'
sections:
  - title: Features
    items:
      - title: Add user authentication endpoint
        type: feat
        scope: api
        breaking: false
        summary: null
        details: null
        notes: []
        references:
          commit: abc123def
          pr: https://github.com/owner/repo/pull/42
        metadata:
          pr_number: 42
      - title: Implement dark mode toggle
        type: feat
        scope: ui
        breaking: false
        summary: null
        details: null
        notes: []
        references:
          commit: def456ghi
        metadata: {}
  - title: Bug Fixes
    items:
      - title: Fix handling of multiline commit messages
        type: fix
        scope: parser
        breaking: false
        summary: null
        details: null
        notes: []
        references:
          commit: jkl012mno
        metadata: {}
metadata:
  compare_url: https://github.com/owner/repo/compare/v1.2.0...v1.2.1
```

### Features

<CardGroup cols={2}>
  <Card title="Human-readable" icon="eye">
    Easier to read than JSON with cleaner syntax
  </Card>

  <Card title="Configuration-friendly" icon="gear">
    Native format for many CI/CD tools and configs
  </Card>

  <Card title="Complete data" icon="database">
    Access all metadata, references, and details
  </Card>

  <Card title="Programmatic use" icon="code">
    Parse with any YAML library in any language
  </Card>
</CardGroup>

### Use cases

* **CI/CD pipelines**: Native format for GitHub Actions, GitLab CI, etc.
* **Configuration files**: Store release data alongside other YAML configs
* **Kubernetes**: Generate release metadata for deployments
* **Ansible/Terraform**: Integrate release data into infrastructure automation
* **Custom tooling**: Parse and process release data programmatically

<Info>
  YAML format preserves all structured data like JSON but with a cleaner, more readable syntax that's easier to edit manually.
</Info>

### Processing YAML output

```bash theme={}
# Extract just the version using yq
helixcommit generate --format yaml | yq '.version'

# List all breaking changes
helixcommit generate --format yaml | yq '.sections[].items[] | select(.breaking == true)'

# Count items per section
helixcommit generate --format yaml | yq '.sections[] | {"title": .title, "count": (.items | length)}'
```

## Format comparison

| Feature                 | Markdown                   | HTML                       | Text                | JSON                | YAML                |
| ----------------------- | -------------------------- | -------------------------- | ------------------- | ------------------- | ------------------- |
| **GitHub releases**     | ✅ Best                     | ⚠️ Renders but less common | ⚠️ Works but plain  | ❌ Not readable      | ❌ Not readable      |
| **Websites**            | ✅ Good (with processor)    | ✅ Best                     | ❌ Not recommended   | ✅ API responses     | ✅ API responses     |
| **Emails**              | ⚠️ Requires client support | ✅ Best                     | ✅ Good (universal)  | ❌ Not readable      | ❌ Not readable      |
| **Terminal**            | ✅ Good                     | ❌ Not readable             | ✅ Best              | ⚠️ Parseable        | ✅ Good              |
| **Chat apps**           | ✅ Good (Slack, Discord)    | ⚠️ Limited support         | ✅ Good              | ❌ Not readable      | ❌ Not readable      |
| **Documentation sites** | ✅ Best                     | ✅ Good                     | ❌ Not styled        | ❌ Not readable      | ❌ Not readable      |
| **Programmatic use**    | ⚠️ Requires parsing        | ⚠️ Requires parsing        | ⚠️ Requires parsing | ✅ Best              | ✅ Best              |
| **CI/CD pipelines**     | ✅ Good                     | ⚠️ Limited                 | ✅ Good              | ✅ Best              | ✅ Best (native)     |
| **File size**           | Small                      | Medium                     | Smallest            | Small               | Small               |
| **Customizable**        | Limited                    | Highly                     | Limited             | Via post-processing | Via post-processing |

## Selecting the right format

<AccordionGroup>
  <Accordion title="For GitHub releases and repositories">
    **Use Markdown**

    ```bash theme={}
    helixcommit generate --format markdown --out RELEASE_NOTES.md
    ```

    Markdown is the native format for GitHub and renders beautifully in releases, README files, and issue comments.
  </Accordion>

  <Accordion title="For product websites and blogs">
    **Use HTML**

    ```bash theme={}
    helixcommit generate --format html --out public/changelog.html
    ```

    HTML gives you complete control over styling and integrates seamlessly into websites.
  </Accordion>

  <Accordion title="For Slack, Discord, or chat notifications">
    **Use Text or Markdown**

    ```bash theme={}
    # Plain text for maximum compatibility
    helixcommit generate --format text

    # Or Markdown if the platform supports it
    helixcommit generate --format markdown
    ```

    Most chat platforms support basic Markdown formatting.
  </Accordion>

  <Accordion title="For email notifications">
    **Use HTML for rich emails, Text for plain text**

    ```bash theme={}
    # HTML version for rich email clients
    helixcommit generate --format html --out email.html

    # Text version for plain text email
    helixcommit generate --format text --out email.txt
    ```

    Send both versions using multipart MIME for best compatibility.
  </Accordion>

  <Accordion title="For CI/CD logs and scripts">
    **Use Text or JSON**

    ```bash theme={}
    # Plain text for logs
    helixcommit generate --format text

    # JSON for programmatic processing
    helixcommit generate --format json
    ```

    Plain text displays well in logs, while JSON is ideal for parsing and automation.
  </Accordion>

  <Accordion title="For APIs and programmatic use">
    **Use JSON or YAML**

    ```bash theme={}
    helixcommit generate --format json --out changelog.json
    # or
    helixcommit generate --format yaml --out changelog.yaml
    ```

    JSON and YAML provide structured data that can be easily parsed by any programming language or tool. YAML is more readable, while JSON is more universal.
  </Accordion>

  <Accordion title="For CI/CD pipelines and configuration">
    **Use YAML**

    ```bash theme={}
    helixcommit generate --format yaml --out changelog.yaml
    ```

    YAML is the native format for GitHub Actions, GitLab CI, and many other CI/CD tools, making it easy to integrate release data.
  </Accordion>
</AccordionGroup>

## Advanced formatting options

### Controlling scopes

Show or hide commit scopes in all formats:

```bash theme={}
# With scopes (default)
helixcommit generate --include-scopes --format markdown
# Output: "**api**: Add authentication"

# Without scopes
helixcommit generate --no-include-scopes --format markdown
# Output: "Add authentication"
```

### Handling empty sections

HelixCommit automatically hides empty sections (e.g., if there are no breaking changes).

### Compare URLs

When GitHub integration is enabled, all formats include compare URLs:

```bash theme={}
helixcommit generate --format markdown
# Includes: [View full changelog](https://github.com/owner/repo/compare/v1.0.0...v2.0.0)
```

## Output examples

See complete examples for each format:

<Tabs>
  <Tab title="Markdown">
    <Frame>
      ```markdown theme={}
      ## Release v2.0.0
      _Released on 2025-11-13_

      ### Breaking Changes
      - **api**: Change authentication flow to OAuth2 (abc123)

      ### Features
      - **ui**: Add dashboard analytics (def456)
      - **api**: Implement rate limiting (ghi789)

      ### Bug Fixes
      - Fix memory leak in background tasks (jkl012)

      [View full changelog](https://github.com/owner/repo/compare/v1.0.0...v2.0.0)
      ```
    </Frame>
  </Tab>

  <Tab title="HTML">
    <Frame>
      ```html theme={}
      <!DOCTYPE html>
      <html>
      <head>
        <title>Release v2.0.0</title>
        <style>
          body { max-width: 800px; margin: 0 auto; padding: 2rem; }
          h2 { border-bottom: 2px solid #e2e8f0; padding-bottom: 0.5rem; }
        </style>
      </head>
      <body>
        <h2>Release v2.0.0</h2>
        <p><em>Released on November 13, 2025</em></p>
        <!-- ... -->
      </body>
      </html>
      ```
    </Frame>
  </Tab>

  <Tab title="Text">
    <Frame>
      ```text theme={}
      ================================================================================
      Release v2.0.0
      Released on 2025-11-13
      ================================================================================

      BREAKING CHANGES
      ----------------
      * api: Change authentication flow to OAuth2 (abc123)

      FEATURES
      --------
      * ui: Add dashboard analytics (def456)
      * api: Implement rate limiting (ghi789)

      BUG FIXES
      ---------
      * Fix memory leak in background tasks (jkl012)
      ```
    </Frame>
  </Tab>

  <Tab title="JSON">
    <Frame>
      ```json theme={}
      {
        "version": "v2.0.0",
        "date": "2025-11-13T00:00:00+00:00",
        "sections": [
          {
            "title": "Breaking Changes",
            "items": [
              {
                "title": "Change authentication flow to OAuth2",
                "type": "feat",
                "scope": "api",
                "breaking": true,
                "references": { "commit": "abc123" }
              }
            ]
          },
          {
            "title": "Features",
            "items": [
              {
                "title": "Add dashboard analytics",
                "type": "feat",
                "scope": "ui",
                "breaking": false,
                "references": { "commit": "def456" }
              },
              {
                "title": "Implement rate limiting",
                "type": "feat",
                "scope": "api",
                "breaking": false,
                "references": { "commit": "ghi789" }
              }
            ]
          },
          {
            "title": "Bug Fixes",
            "items": [
              {
                "title": "Fix memory leak in background tasks",
                "type": "fix",
                "scope": null,
                "breaking": false,
                "references": { "commit": "jkl012" }
              }
            ]
          }
        ],
        "metadata": {
          "compare_url": "https://github.com/owner/repo/compare/v1.0.0...v2.0.0"
        }
      }
      ```
    </Frame>
  </Tab>

  <Tab title="YAML">
    <Frame>
      ```yaml theme={}
      version: v2.0.0
      date: '2025-11-13T00:00:00+00:00'
      sections:
        - title: Breaking Changes
          items:
            - title: Change authentication flow to OAuth2
              type: feat
              scope: api
              breaking: true
              references:
                commit: abc123
        - title: Features
          items:
            - title: Add dashboard analytics
              type: feat
              scope: ui
              breaking: false
              references:
                commit: def456
            - title: Implement rate limiting
              type: feat
              scope: api
              breaking: false
              references:
                commit: ghi789
        - title: Bug Fixes
          items:
            - title: Fix memory leak in background tasks
              type: fix
              scope: null
              breaking: false
              references:
                commit: jkl012
      metadata:
        compare_url: https://github.com/owner/repo/compare/v1.0.0...v2.0.0
      ```
    </Frame>
  </Tab>
</Tabs>

## Next steps

<CardGroup cols={2}>
  <Card title="Configuration" icon="gear" href="/configuration" color="#F6A02D">
    Customize output with configuration options
  </Card>

  <Card title="Examples" icon="code" href="/examples" color="#0A6ACB">
    See format selection in real-world scenarios
  </Card>

  <Card title="GitHub integration" icon="github" href="/github-integration" color="#F26419">
    Add PR links and compare URLs
  </Card>

  <Card title="CLI reference" icon="terminal" href="/cli-reference" color="#0A6ACB">
    Complete list of formatting options
  </Card>
</CardGroup>
