You may have been following MAME for a while but you may not know
about our release schedule and processes. This is largely our fault –
we haven’t been particularly transparent about our release process. In
fact, we didn’t even really have a formal release process for a lot of
the project’s lifetime. Since the release of MAME 0.156 on 26 November,
2014, MAME has been released on the last Wednesday of each month
according to the Gregorian calendar. Barring truly exceptional
circumstances, we plan to maintain this schedule.
Since MAME 0.179 (October 2016), we’ve implemented a three-day
feature freeze in the lead-up to each release. On the Sunday before the
release date, we begin stabilisation and preparations for the release.
After the feature freeze comes into effect, only important fixes are
integrated into the release, and basic functionality is tested in a
variety of Windows, Linux and Mac configurations. ROM/software
definitions are generally not updated between the feature freeze and the
release. The exceptions to this are corrections to errors if we find
any, and addition of completely new software lists for systems that have
recently been promoted to working. The freeze gives us a chance to do
some testing on a stable target and minimise the chance of a late change
causing problems with the release.
In technical terms, at the point of the feature freeze, we create a
branch off master called release0nnn, where
nnn is the portion of the version number after the dot.
Fixes going into the release are pushed or cherry-picked into this
branch while normal development continues on master. Anything
that doesn’t go into the release branch goes into the following release.
On release day, the final release version is tagged and merged back into
master, and the release branch is deleted. The release tag has
the form mame0nnn. The release branch is publicly
available in our main repository on github during the period between the
feature freeze and the release. All revisions from the release branch
are merged back into master after release, so no revision
information is lost and links to individual commits remain valid after
the release. We also coordinate with MAME Testers to add a version for the
following release when the freeze takes effect.
If you’re maintaining a project that tracks MAME releases (for
example a fork or a front-end), we’d like it if you base your releases
on our tagged release versions, and not on latest master during
the freeze period or immediately after the release. During the freeze
period, master may not contain all fixes going into the release,
and we also often use this period where we’re a whole month away from
the following release to integrate high impact changes to maximise
Assuming you’re using a git client and have a remote called
upstream that points to the official MAME repository at https://github.com/mamedev/mame.git,
you can fetch all current branches and tags with this command:
git fetch upstream
If you want to merge changes from the MAME 0.183 release branch into
your active branch during the freeze period later this month, use these
commands (substitute numbers for subsequent releases):
git fetch upstream
git merge upstream/release0183
After MAME 0.183 has been tagged, you can merge the final release
into your active branch with these commands:
git fetch upstream
git merge mame0183
You can remove stale remote branches that have been deleted from the
master repository with these commands:
git remote prune upstream
Note that this only removes references to stale remote branches from
your repository. If you’ve created tracking branches, you’ll need to
delete them with git branch -d.
If you aren’t using git, we recommend that you base your project on
official source packages either from our download page or from the
the the releases
page on github.