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
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
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.
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):
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!
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.
-
- 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.
- 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.
-
- 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):
-
Commit messages must: [x] Reference at least one Jira ticket.
This is an "offline" check - ControlFreak scans the commit message for
a textual match.
- 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: [ ]
-
- Branch Name Regex (text field)
- Maps exactly to ControlFreak's checkbox and text field:
-
New Branch Names Must Match: [x] Regex: [ ]
-
- 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:
- Exclude Group (text field)
- Maps exactly to ControlFreak's text field:
-
- Header (text field)
- Maps exactly to ControlFreak's text field:
- 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.
-
- 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.
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.
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 |
| 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 |
| 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 |
| Restrict to repository admins |
No |
YES |
| Require Jira reference in branch name |
YES |
YES |
| Case sensitivity check |
No |
YES |
| Regex check |
YES |
YES |
| Restrict to repository admins |
No |
YES |
| Case sensitivity check |
No |
YES |
| Regex check |
No |
YES |
| Block by file size |
No |
YES |
| Block by file type |
No |
YES |
| Require rebases |
No |
YES |
| Require squashes |
No |
YES |
| Require PR approvals |
No |
YES |
| Block self-approvals |
No |
YES |
| Require no disapprovals |
No |
YES |
| 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 |
| | | |
- 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!
|