an abstract git commit graph
Home  
 

By Kelly West (kelly@bit-booster.com) and Julius Davies (julius@bit-booster.com), January 2026

Migrating to ControlFreak from YACC / Yet Another Commit Checker

Introduction

If you’re one of the many teams moving from YACC (Yet Another Commit Checker) to ControlFreak as your Bitbucket DC 10.x–compatible alternative -- welcome! This guide shows how to migrate your existing YACC merge and push rules into ControlFreak, so you can maintain the same developer workflow controls after upgrading.

Table of Contents

Background

Bitbucket DC 10.0.0 was released in September 2025, and as of January 2026, YACC has not released a Bitbucket 10.x–compatible version. If you need to upgrade to Bitbucket DC 10.x ControlFreak can help you preserve the critical rules and safeguards currently enforced by YACC.

This migration guide is intended for teams upgrading to Bitbucket 10.x who need their existing YACC rules to remain in place after the move. ControlFreak is Bitbucket 10.x compatible and can be configured to closely replicate the rules and behaviors you previously implemented in YACC.

Locating ControlFreak's Settings

At the global level we are similar to YACC. At the "project" and "repository" levels the ControlFreak settings are managed in a much different way compared to YACC.

Here is where ControlFreak's settings pages are located:

At the global level:
Bitbucket Settings --> Add-Ons --> ControlFreak
At the project level:
Project Settings --> Add-Ons --> ControlFreak
At the repository level:
Repository Settings --> Add-Ons --> ControlFreak
Bitbucket DC - Global Settings Screenshot:

 
Bitbucket DC - Repository Settings Screenshot (project settings works the same way):

Where did the "Hooks" and "Merge Checks" go?

ControlFreak does not distinguish between commits that arrive via pull-request vs. those that arrive via "git push". All commits are treated the same (including edits "directly on the glass" via Bitbucket's web UI).

At first this can be confusing for users migrating from YACC because ControlFreak will not appear under the "Hooks" or "Merge checks" Bitbucket screens. Instead, all rules are managed via ControlFreak's own settings pages.

This is good because it means you only maintain a single set of your push and merge rules. With YACC you need to carefully copy all of your "Hook" settings over to your "Merge check" settings to maintain consistent policy. With ControlFreak this is automatic since we treat all commits the same. A commit is a commit!

Remapping YACC Settings to ControlFreak Settings

Based on YACC's public documentation as of January 2026 (https://appfire.atlassian.net/wiki/spaces/YACC/pages/152928570/Configuration+overview), we recommend the following configuration mappings.

  1. Configuration

    Overriding global configuration
    Maps closely to ControlFreak's Global Configuration Lock setting. In particular, this feature can be reasonably approximated via ControlFreak's "Configuration Locks - All Projects" page.
    Scan All Commits in Pull Request (yes/no)
    Mapping unnecessary. There is no need to map this setting. ControlFreak always scans all commits in pull requests.
    Enable dry run mode (yes/no)
    Mapping unnecessary. This setting is pointless.
    Skip checks on cross-repository pull requests (yes/no)
    Mapping unnecessary. This setting makes absolutely no sense, and goes against everything we stand for.
  2. Commits

  3. Require Committer Matches Valid User (yes/no)
    Maps exactly to ControlFreak's checkbox:
    • [x] Committer must be a valid Bitbucket User.
    As far as we can tell, YACC is not able to check the "Author" field of commit messages, whereas ControlFreak checks both "Author" and "Committer".
     

    Screenshot of ControlFreak's author and committer checks
    Require Matching Committer Email (yes/no)
    Mapping unnecessary. ControlFreak's author and committer checks, when enabled, always checks the email addresses.
    Require Matching Committer Name (yes/no)
    Maps exactly (but inverted) to ControlFreak's checkbox:
    • [x] Author/Committer validation should only validate the user's email address.
    Yes becomes no, and vice versa.
    Committer Email Regex (regex)
    Mapping unnecessary. We do not think this is a good idea, and it was probably a legacy setting from before YACC learned how to do lookups against Bitbucket's user directory.
    Commit Message Regex (regex)
    Maps exactly to ControlFreak's checkbox and text field:
    • Commit Messages Must: [x] Match regex: [   ]
    Because this setting is under our Jira Policy section, to ensure the same behaviour as YACC you must select all branches and tags, including the "[x] All others" branch option. ControlFreak enables Java's MULTILINE and DOTALL modes for this regex.

    Note: even though this whole section in ControlFreak's configuration is called "Jira Policy", the regex control does not require Jira. If you uncheck all of ControlFreak's "Jira References Must" checkboxes ControlFreak happily operates without any awareness or connection to Jira.

    ControlFreak does not require Jira to enforce the commit message regex rule as long as all 4 of these checkboxes are unchecked, despite the rule falling under our "Jira Policy" section.
  4. Jira Issues

    Jira App Link (selection)
    Mapping unnecessary. ControlFreak is smart enough to figure out on its own which Jira Application Link to use to validate each Jira reference it observes in your commit messages.
    Require Valid Jira Issue(s) (yes/no)
    Maps perfectly to ControlFreak's two separate checkboxes (both need to be checked):
    1. Commit messages must:   [x] Reference at least one Jira ticket.
      This is an "offline" check - ControlFreak scans the commit message for a textual match.
    2. Jira references must:   [x] Exist in Jira.
      This is the "online check". It takes each Jira reference found in the commit message and queries Jira to see if it exists.

     

    Screenshot of a few of ControlFreak's Jira policy controls.
    Require Matching Jira Issue In Branch Name (yes/no)
    Maps exactly to ControlFreak's checkbox:
    • New Branch Names Must Match:   [x] An existing Jira ticket.
    Ignore Unknown Jira Project Keys (yes/no)
    Maps exactly to ControlFreak's text input field:
    • Jira Project Blacklist: [AES, GMT, ISO, RFC, SHA, UTC, UTF,].
    ControlFreak also allows administrators to customize this list globally, per project, and per repository. Setting it blank is equivalent to checking "No" in YACC. Defaults to the values listed above.
    Issue JQL Matcher (text field)
    Maps exactly to ControlFreak's checkbox and text field:
    • Jira references must:   [x] Match JQL: [   ]
  5. Branches

    Branch Name Regex (text field)
    Maps exactly to ControlFreak's checkbox and text field:
    • New Branch Names Must Match:   [x] Regex: [   ]
  6. Exclusions

    Exclude Personal Repositories (yes/no)
    Maps perfectly (but inverted) to a pair of ControlFreak's checkboxes at the very top of ControlFreak's settings page. If it's set to "Yes" in YACC, make sure both of these checkboxes are unchecked in ControlFreak (which happens to be our default setting).
    • ControlFreak Enabled For:
      • Personal Repos:   [x] Enabled
      • Personal Forks:   [x] Enabled
    Unlike YACC, ControlFreak distinguishes between both normal repositories and personal repositories, as well as forks and non-forks.
     

    Screenshot of ControlFreak's "Enable/Disable" control.
    Exclude Commits From Bitbucket UI (yes/no))
    Mapping unnecessary. This goes against everything we stand for. Commits are commits, and ControlFreak always scans them all.
    Exclude Merge Commits (yes/no)
    Maps exactly to ControlFreak's dropdown field:
    • Jira Policy Applies To:   [ Regular Commits (and ignores merge commits) ]
    Exclude Commit by Regex (text field)
    Maps exactly to ControlFreak's text field:
    • Exclude commits by regex:   [    ]
    Note: if you only want to exempt commits from Jira policy instead of from everything you can also use ControlFreak's Ignore commit messages that [Start with/End with] the text: [   ] control (under the "Jira Policy" section). It's not as flexible as regex, but it's often good enough to get the job done. And this way all the authorship checks remain in place.
    Exclude Branch by Regex (text field)
    Maps exactly to ControlFreak's text field:
    • Exclude branches by regex:   [    ]
    Exclude Service User Commits (yes/no)
    Maps exactly to ControlFreak's "Yes / No" option:
    • Exempt Service Accounts: [ ] Yes   [X] No   [ ] No, but skip author/committer metadata checks
    Exclude User (text field)
    Maps exactly to ControlFreak's text field:
    • Exempt Users:   [    ]
    Exclude Group (text field)
    Maps exactly to ControlFreak's text field:
    • Exempt Groups:   [    ]
  7. Error Messages

    Header (text field)
    Maps exactly to ControlFreak's text field:
    • Custom Info Message:   [    ]
    Committer Email Error (text field)
    Mapping unnecessary. ControlFreak does not allow users to customize the error message for this.
    Committer Email Regex Error (text field)
    Mapping unnecessary. ControlFreak does not use regex to validate author or committer email addresses, and instead validates them using Bitbucket's own user lookup service, which itself is typically connected to an organization's Active Directory.
    Committer Name Error (text field)
    Mapping unnecessary. ControlFreak does not allow users to customize the error message for this.
    Commit Regex Error (text field)
    Maps exactly to ControlFreak's text field:
    • Regex Custom Failure Message:   [    ]
    Issue JQL Matcher Error (text field)
    Mapping unnecessary. ControlFreak does not allow users to customize the error message for this.
    No Jira Issue Error (text field)
    Mapping unnecessary. ControlFreak does not allow users to customize the error message for this.
    Footer (text field)
    Mapping unnecessary. ControlFreak does not currently provide this feature.
  8. Advanced Options

    Jira Authentication User
    Maps perfectly to ControlFreak's two fields:
    • Jira Impersonation - When To Use:   [  ] Never   [  ] Service Accounts Only   [x] Always
    • Jira Impersonation Account:   [    ]
    To configure this setting so that it behaves the same as YACC you must choose the "[x] Always" option.
    Allow Lower Case Jira Issue Keys
    Mapping unnecessary. ControlFreak does not currently provide this feature.

Automating The Migration

At this time we do not have any tools or scripts for automating the migration.

We are looking for a champion to collaborate with us on this. Please email us at support@bit-booster.com if this is something that interests you.

We are especially interested in working with large customers (500+ users) that already have experience managing their YACC settings via REST.

Comparing ControlFreak and YACC

At a high level ControlFreak is more powerful, with more features, and better support. ControlFreak is also maintained by its original developer team. The same developers that started working on ControlFreak in 2016 are still working on ControlFreak in 2026, whereas YACC has been sold twice (to Mohami in 2020, and to AppFire in 2022). AppFire maintains a huge roster of apps (180+), but less than 10% of these (16) are for Bitbucket. And as of January 20th, 2026, not a single one of AppFire's 16 Bitbucket apps are compatible with Bitbucket 10.x.

Feature Comparison

The feature comparison table below is an honest comparison. We did not omit any YACC features. We made sure to carefully capture every important push and merge related rule available in both products.

Feature YACC ControlFreak
Supported platforms
Bitbucket Cloud No YES
Bitbucket DC 10.x No YES
Bitbucket DC 9.x YES YES
Bitbucket DC 8.x YES YES
Bitbucket DC 7.x Not Actively Maintained YES
GitHub No 2026 Roadmap
Commit checks
Require Jira reference in commit message YES YES
Verify Jira properties (e.g., status, assignee, JQL) JQL Only YES
Jira user impersonation YES YES
Regex check YES YES
Author/Committer validation Committer Only YES
Customize error messages YES YES
Branch creation
Restrict to repository admins No YES
Require Jira reference in branch name YES YES
Case sensitivity check No YES
Regex check YES YES
Tag management checks
Restrict to repository admins No YES
Case sensitivity check No YES
Regex check No YES
File blocking
Block by file size No YES
Block by file type No YES
Workflow management
Require rebases No YES
Require squashes No YES
Require PR approvals No YES
Block self-approvals No YES
Require no disapprovals No YES
Management / Security features
Can exempt users/groups YES YES
Can exempt service accounts YES YES
Project / Repository overrides YES YES
Rest API YES YES
Audit Trail Partial * YES
  * YACC only records repository and project level configuration changes in Bitbucket's built-in audit trail. YACC does not record configuration changes at the global level (the most important).
 

Price Comparison

Bitbucket DC, per year ($USD)
User Tier YACC ControlFreak
25 users$410$150
50 users$800$300
100 users$1,450$600
250 users$3,100$1,250
500 users$4,900$2,000
1,000 users$8,800$3,000
2,000 users$16,800$6,000
3,000 users$20,200$9,000
4,000 users$22,800$12,000
5,000 users$25,400$15,000
   

 

Brief History of Two Bitbucket Plugins

2014
Sean Ford's free open source "Yet Another Commit Checker" is available for Stash 3.x.
2015 - September
Atlassian Stash is renamed to Bitbucket Server and Bitbucket DC
2017 - August
We submit ControlFreak to Atlassian's annual hackathon (codegeist). We title our submission: Yet another another ANOTHER JIRA hook for Bitbucket. We publish ControlFreak to Marketplace as a paid plugin.
2017 - September
We realize having the only paid "Jira Hook" style plugin among around 3 other free plugins was perhaps not our brightest idea. We switch ControlFreak to free.
2020 - September
Mohami acquires YACC / Yet Another Commit Checker from Sean Ford. YACC has over 2800+ installs at this point. Just like they did with the free "Commit Graph" plugin in 2018, Mohami immediately switches YACC to paid.
2020 - October
The tables have turned: ControlFreak is now the only free "Jira Hook" style plugin among many paid ones. Free plugins are a rare bird at this point thanks to all the extra costs required to fully support Bitbucket Data Center (e.g., annual load testing and certification).
2022 - September
AppFire acquires all of Mohami's Bitbucket apps (except Soteri).
2024 - August
ControlFreak switches to paid.
2026 - Now
You managed to read to the very bottom of this migration guide. Hello!