Opening a new issue? Please read our issue guidelines first.

Contributing code? Check the code contribution guidelines.

Investigating bugs? These debugging commands can help.

Need help with git? git howto might be what you’re looking for.

Contributing code or data to Cataclysm: Dark Days Ahead is easy - simply fork the repository on our GitHub, make your changes, and then send us a pull request.

Cataclysm: Dark Days Ahead is released under the Creative Commons Attribution ShareAlike 3.0 license. The code and content of the game is free to use, modify, and redistribute for any purpose whatsoever. See for details. This means any contribution you make to the project will also be covered by the same license, and this license is irrevocable.


There are a couple of guidelines we suggest sticking to:

  • Add the repository as an upstream remote.
  • Keep your master branch clean. This means you can easily pull changes made to this repository into yours.
  • Create a new branch for each new feature or set of related bug fixes.
  • Never merge from your local branches into your master branch. Only update master by pulling from upstream/master.

Frequently Asked Questions

Why does git pull --ff-only result in an error?

If git pull --ff-only shows an error, it means that you’ve committed directly to your local master branch. To fix this, you can create a new branch with these commits, find the point at which you diverged from upstream/master, and then reset master to that point.

$ git pull --ff-only upstream master
 * branch            master     -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
$ git branch new_branch master          # mark the current commit with a tmp branch
$ git merge-base master upstream/master
cc31d0... # the last commit before we committed directly to master
$ git reset --hard cc31d0....
HEAD is now at cc31d0... ...

Now that master has been cleaned up, you can easily pull from upstream/master, and then continue working on new_branch.

$ git pull --ff-only upstream master
# gets changes from the "upstream" remote for the matching branch, in this case "master"
$ git checkout new_branch