diff --git a/doc/5.x-rc.md b/doc/5.x-rc.md
new file mode 100644
index 0000000000000000000000000000000000000000..c87837013264e9d498bea1dc9e6e035eff9079a9
--- /dev/null
+++ b/doc/5.x-rc.md
@@ -0,0 +1,132 @@
+# CiviCRM v5.x.0: Publish a release candidate
+
+## Pre-requisites
+
+ * Write access to all main CiviCRM git repos (civicrm-{core,packages,backdrop,drupal,joomla,wordpress})
+ * Access to CiviCRM Jenkins (https://test.civicrm.org)
+
+The user `releaser` on `latest.civicrm.org` has a suitable configuration in `~/src/master`.
+To start a session, login to that account and run:
+
+```
+eval "$(ssh-agent -s)"
+ssh-add ~/.ssh/id_rsa
+```
+
+## 1: Sanity checks
+
+* Note the original branch, such as `master`.
+* Note the intended version, such as `5.1` or `5.3`. (In the rest of this document, we'll refer to `5.X`, but `5.X` should be adjusted to circumstance.)
+* In `civicrm-core.git` repo, check that the code in `master` correctly references `5.X.0`:
+    * https://github.com/civicrm/civicrm-core/blob/master/xml/version.xml
+    * https://github.com/civicrm/civicrm-core/blob/master/sql/civicrm_generated.mysql
+    * https://github.com/civicrm/civicrm-core/tree/master/CRM/Upgrade/Incremental
+*  In Jenkins, review the scheduled tests for `master` and determine if anything should block the RC.
+    * https://test.civicrm.org/job/CiviCRM-Core-Matrix/
+    * https://test.civicrm.org/job/CiviCRM-Ext-Matrix/
+
+## 2: Bump version number on `master` to `5.X.beta1`
+
+```bash
+cd ~/src/master
+git checkout master
+git pull --ff-only origin master
+./tools/bin/scripts/set-version.php 5.X.beta1 --commit
+git push origin master
+```
+
+## 3: Make a branch
+
+For each git repo, we want to create a new branch for 5.X. This follows a naming convention:
+
+| repo | original branch | new branch |
+|------|-----------------|------------|
+|civicrm-core|master|5.X|
+|civicrm-packages|master|5.X|
+|civicrm-backdrop|1.x-master|1.x-5.X|
+|civicrm-drupal|6.x-master|6.x-5.X|
+|civicrm-drupal|7.x-master|7.x-5.X|
+|civicrm-drupal|8.x-master|8.x-5.X|
+|civicrm-joomla|master|5.X|
+|civicrm-wordpress|master|5.X|
+
+The commands `git scan branch` and `git scan push` will do this – if you have a copy of each repo.
+
+A safe way to make a clean copy of every repo is to create a new `dist` build (`civibuild create dist`). On `latest.civicrm.org`, there's already a copy in `~/src/master`. Either way, you should make sure it's up-to-date on all relevant branches -- then make new branches:
+
+```bash
+## Ensure that you have a clean, up-to-date copy of the `master` branch.
+cd ~/src/master
+git scan foreach -c 'pwd; git branch; echo'
+git scan up
+ 
+## Fixme: for now you need to manually add the extra drupal branches
+cd drupal
+git checkout 6.x-master && git pull origin 6.x-master
+git checkout 8.x-master && git pull origin 8.x-master
+git checkout 7.x-master && git pull origin 7.x-master
+cd ..
+ 
+## Make branches (preview)
+git scan branch 5.X master -p -n -T
+ 
+## Make branches (for real)
+git scan branch 5.X master -p
+ 
+## Push the branches (preview)
+git scan push -p origin 5.X -n -T
+ 
+## Push the branches (for real)
+git scan push -p origin 5.X
+```
+
+You might want to spot-check a few URLs to ensure the branches were published, e.g.
+
+ * https://github.com/civicrm/civicrm-backdrop/tree/1.x-5.X
+ * https://github.com/civicrm/civicrm-core/tree/5.X
+ * https://github.com/civicrm/civicrm-drupal/tree/6.x-5.X
+ * https://github.com/civicrm/civicrm-drupal/tree/7.x-5.X
+ * https://github.com/civicrm/civicrm-drupal/tree/8.x-5.X
+ * https://github.com/civicrm/civicrm-joomla/tree/5.X
+ * https://github.com/civicrm/civicrm-packages/tree/5.X
+ * https://github.com/civicrm/civicrm-wordpress/tree/5.X
+
+## 4: Setup automated processes
+
+ * Go to https://test.civicrm.org/job/CiviCRM-Core-Matrix/configure
+   * In the list of `CIVIVER`s, remove any old RC's. Add the current RC. (ex: `4.6 5.X master`)
+ * Go to https://test.civicrm.org/job/CiviCRM-Ext-Matrix/configure
+   * In the list of `CIVIVER`s, remove any old RC's. Add the current RC. (ex: `4.6 5.X master`)
+ * Go to https://test.civicrm.org/job/CiviCRM-Publish/configure
+   * In the list of `branchNames`, remove any old RC's. Add the current RC. (ex: `master 4.6 5.X`)
+   
+## 5: Publish tarballs
+
+ * Go to https://test.civicrm.org/job/CiviCRM-Publish/
+ * Check to see if the new branch is being built automatically. If not:
+   * Login (if you haven't already)
+   * Click "Build with parameters"
+   * For the branch name, enter your chosen `5.X`.
+
+## 6: Enable branch protection
+
+To prevent someone from accidentally deleting the new RC branch, enable protection:
+
+ * https://github.com/civicrm/civicrm-core/settings/branches
+ * https://github.com/civicrm/civicrm-packages/settings/branches
+ * https://github.com/civicrm/civicrm-backdrop/settings/branches
+ * https://github.com/civicrm/civicrm-drupal/settings/branches
+ * https://github.com/civicrm/civicrm-joomla/settings/branches
+ * https://github.com/civicrm/civicrm-wordpress/settings/branches
+
+## 7: Bump version number on `master` to  `5.Y.alpha1`
+
+The original branch, "master", should continue development with the next version, e.g. "5.Y".
+
+```bash
+cd ~/src/master
+git checkout master
+git pull --ff-only origin master
+./tools/bin/scripts/set-version.php 5.Y.alpha1 --commit
+git push origin master
+```