HOWTO-Release
How to make a ScummVM release.
NOTE: This checklist simply works from top to bottom. No deviations, not jumping around, just follow it. And yes, I wrote this for myself (rootfather)
This is work in progress and needs to be completed!
All examples are based on the 2026.2.0 version. Don't forget to adapt to the adequate version number.
The ScummVM Tools are released very occasionally.
Definitions
- Rolling release: Rolling release happens every three months and is numbered as YYYY.NN.0, YYYY is a year, NN is a sequential number in that year. Like 2026.2.0 for the second rolling release in the year
- Minor release: Potentially could happen if we found critical bugs. Anyway, it is a tag on `master`. Numbered YYYY.NN.x, where `x` is the number of the minor release. For example, 2026.2.1
Preparations
Make sure there are no major release stopper bugs in the bugtracker.
Create a thread "2026.2.0 Release Preparations" on the #team-talk Discord channel and tag @devs one week and one day before the release date.
- Brainstorm the release nickname
- Ask to make sure that the NEWS.md file contains up-to-date list of changes.
Semi-automated Checks
Run make release-checks for performing several routine checks covered below:
- Icons and Shader packs
- The utility could offer to regenerate and upload those
- ADGF_TESTING is cleared for all games and demos
- IDE Projects
- The utility could offer to run
make ideprojects
- The utility could offer to run
- Translations
- The utility could offer to run
make android-translations - The utility could offer to run
make translations-dat
- The utility could offer to run
- Release Notes on FRS
- Put Release Notes into two files in the release directory, one is plain text, named "ReleaseNotes", and generate "ReleaseNotes.html", use markdowntohtml.com service, but copy the HTML body tags from the previous release.
- Engine data for Bagel, Nancy, MM, and Ultima
- The utility could explain what commands to use to regenerate these if it detect uncommitted changes
Generating the Icons and Shader packs
- Run
https://github.com/scummvm/scummvm-icons/blob/master/gen-set.pyto generate icons pack - Then upload the generated
LISTand thegui-icons-DDDDDDDD.datfiles to/.0/frs/icons/onwww.scummvm.org - Run. TODO, to generate shaders pack
- Then upload the generated
LIST-SHADERSand theshaders-DDDDDDDD.datfiles to/.0/frs/icons/onwww.scummvm.org
Preparing the source
Review the following port specific files for version updates:
- backends/platform/psp/README.PSP
Add the new release to the .metainfo.xml build script, regenerate:
- devtools/generate-metainfo.py
Review the release dates in the following port specific files:
- dists/org.scummvm.scummvm.metainfo.xml
- dists/win32/scummvm.gdf.xml
Make sure package descriptions are up-to-date:
- dists/redhat/scummvm.spec
Tagging release on master
Increase version on master, and commit
devtools/update-version.pl 2026 2 0
git commit -m "RELEASE: This is 2026.2.0" -a
Create annotated tag v2026.2.0 and push
git tag -a -m "Tag v2026.2.0" v2026.2.0
git push origin tag v2026.2.0
Creating source tarballs
Then you need to create and upload the tarballs.
devtools/dist-scummvm.sh scummvm 2026.2.0
devtools/dist-scummvm.sh scummvm-tools 2026.2.0
The files are generated in /tmp. Then upload the resulting scummvm-2026.2.0.tar.* and scummvm-2026.2.0.tar.zip to the FRS.
Follow the instructions at HOWTO-Release#Signing binaries in order to enable updates via (Win)Sparkle
Bump version on the master
Once we have a sanity check of the builds, e.g. win32 and macOS builds were passed and uploaded.
- Increase version on master to 2026.2.1git, and commit
devtools/update-version.pl 2026 2 1 git
git commit -m "RELEASE: This is 2026.2.1git" -a
Communications
Updating the Website
Update the website internally (i.e. update the version in the repository), but do not yet put these changes online.
- Edit
include/Constants.phpto update the global version. - Add a news item.
- Follow the instructions at HOWTO-Release#Signing binaries in order to enable updates via (Win)Sparkle
- Copy over the release files to FRS
- Set the OS for the newly uploaded binaries (click on the (i) next to each binary).
- -win32.exe as Windows binary
- -macosx.dmg as Mac binary
- .tar.bz2 as Linux, FreeBSD and Other binary
- -solaris-x86.tar.gz as Solaris binary
- Set the OS for the newly uploaded binaries (click on the (i) next to each binary).
- On the ScummVM Data spreadsheet
- On the
versionstab, add the new release to the bottom of the list - On the
compatibilitytab, replace DEV with the release number for all newly added games - On the
scummvm_downloadstab, for any releases that have been uploaded to FRS, change theversioncolumn to match the latest version. Verify that all ports that don't have the new version (yet) are set to "old", so they appear in the right section of our website. - WARNING: The website update script keeps track of the different sheets in the spreadsheet file based on an internal ID. You must use the exact same sheet for every release. This means that you have to temporarily duplicate the downloads sheet and constantly update it while the porters submit their builds - you don't want to all builds at once right before the release. As soon as the release is about to get published, copy over all content of the temporary scummvm_downloads sheet to the productive one. You must not rename the old sheet under any circumstances, it will break the website!
- On the
Updating the official documentation
- Add this tag to the Read The Doc admin settings to generate the documentation for this version.
- Open Read The Docs Portal
- Click on ScummVM
- Click on Versions
- Find the relevant tag like 'v2026.2.0'
- Press Activate
- Click on ⚙ Admin
- Click on Advanced Settings
- In Default version drop-down, select the new tag.
- Open Read The Docs Portal
News & Notification
Write a news blurb (or rather multiple to be used in the following). Usually, you want a bit longer one for the website, a list for Versiontracker, something with proper English sentences for Freshmeat, etc....
- Write a news item for our website (also to be used as a template for news items on other sites).
- Change version constants in include/Constants.php
- Put Release Notes into two files in the release directory, one is plain text, named "ReleaseNotes", another one is HTML, use markdowntohtml.com service but copy the HTML body tags from the previous release.
- Make sure to update the Release information in the datasheet
- Make sure Sparkle appcast is updated (see #Signing binaries)
- Update / notify various sites:
- Post about the release on our forums
- Post about the release on Facebook
- Post link to the news item to Twitter
- Put the updated web site online
- Update IRC and Discord channel topics
GitHub release
Use https://github.com/scummvm/scummvm/releases/new for creating a new GitHub release:
- Use the current tag as "base" for the release
- Use the current version number as "Release title" (format: 1.2.3, no leading "v")
- Use the current ReleaseNotes in Markdown format for the "Describe this release" field
- GitHub automatically attaches the matching source tarball in .zip and .tar.gz format, so no need to upload it on your own
Updating the wiki
- Update Template:StableVersion. This is used for links to the Compatibility page for the stable version and for the latest stable version info field for each platform.
- Move newly supported engines in the Complete engines in the latest stable version section on the Engines page.
- Add the first release field on the info box of the newly supported engines.
- Update Platforms page if status changed for some of the platforms (e.g. no release for the latest stable version). For these platforms the latest stable version info will also need to be changed if it was using the StableVersion template.
- Set the First Official Version field for new platforms.
- Update the support field on the info box of the newly supported games. Also change these games from Unsupported Games category to Supported Games category.
For the porters
Binaries
Get porters to make binaries.
- Porter must follow our filename convention, which goes like this: "scummvm-VERSION-PORT.EXTENSION". For example: "scummvm-1.1.0-macosx.dmg". Do not use special names like "EScummVM" or "ScummVMDS". The only exclusion from this requirement is Debian.
- Porters should pass "--enable-release" to configure in case their port is using the configure/make based build system. If their port is not using the configure/make based build system they should make sure they properly define RELEASE_BUILD when compiling their release binary. It is also noteworthy that "--disable-debug" should be passed in order to remove debugging information from the binary.
- Here is a list of files porters should include in their release archives:
AUTHORS
COPYING
LICENSES/* (all additional licenses)
COPYRIGHT
NEWS(.md)
README(.md) (generic ScummVM one)
localized NEWS and README files (from doc/) (optional)
If your port uses the new GUI, then copy from gui/themes directory the following files:
scummmodern.zip
scummclassic.zip
scummremastered.zip
residualvm.zip
translations.dat
Copy engine data from dists/engine-data
*.dat
grim-patch.lab
monkey4-patch.m4b
pred.dic
queen.tbl
sky.cpt
wintermute.zip
xeen.ccs
Copy your build binary Optionally copy your build-specific README
Porters need to upload binaries. To do this, we will use our own Nextcloud instance, so porters don't have to rely on third-party services. To do this:
- Create a new shared folder with upload permissions in the Nextcloud (ask rootfather when in doubt)
- Set a new password for this shared folder
- Mention this password in the mail to the mailing list, asking for the porters to submit their builds
For the macOS package see detailed instructions on HOWTO-Release/macOS_release_package.
Signing binaries
Put tarballs into directory archives/, run:
bin/generate_appcast archives/
bin/old_dsa_scripts/sign_update archives/scummvm-2026.2.0-win32.exe dsa_priv.pem
bin/old_dsa_scripts/sign_update archives/scummvm-2026.2.0-macosx.dmg dsa_priv.pem
The first line will generate file archives/release.xml. The following ones will just spit out DSA signatures.
Copy/paste signatures to dists/macosx/scummvm_appcast.xml in the main git repo.
Then run:
make publish-appcast
cd ../scummvm-web
git commit -m 'WEB: Sync appcast' -a