diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index ca61e4cd0..77eb03ed1 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -3,22 +3,40 @@
 
 A high-level view of the changes in each ConsensusJ binary release.
 
-== v0.5.12-SNAPSHOT
+== v0.5.12
 
-Released: Not yet
+Released: 2021-11-11
+
+=== Overview
+
+This release allows https://github.com/ConsensusJ/btcproxy[btcproxy] to use `org.consensusj.bitcoin.rx.jsonrpc.RxBitcoinClient` instead of its own implementation.
 
 === consensusj-analytics
 
 * Fix incorrect usage of JDK 9+ APIs
 * Use `Publisher` (rather than `Observable`) for result of `richListUpdates`
 
+=== consensusj-rx-jsonrpc
+
+* Add `RxJsonRpcClient::defer` method for making deferred calls to `CompletableFuture` async methods
+
 === consensusj-rx-zeromq
 
 * Rename `ZmqTopicPublisher` to `RxZmqContext` (a context has multiple publishers)
 * Rename `ZmqFlowable` to `ZMsgSocketFlowable`
 
+=== cj-btc-json
+
+* Rename `ChainTip::getActiveChainTip` method to `ChainTip::findActiveChainTip`
+* Add `ChainTip::findActiveChainTipOrElseThrow` method
+* Add `ChainTip::ofActive` for constructing from active height and hash
+
 === cj-btc-rx-jsonrpc
 
+* `RxBitcoinClient`: extend `BitcoinExtendedClient`
+* `RxBitcoinClient`: add constructor that takes `SSLSocketFactory`
+* `RxBitcoinClient`: Pull up methods from `RxBitcoinZmqService`
+* `RxBitcoinZmq*Service` constructors now take `RxBitcoinClient`
 * Replace usage of RxJava 3 internal class (`ObservableInterval`)
 * Improved propagation of errors and completions to clients
 * Add TxOutSetService (contains `Publisher` for `TxOutSetInfo`)
diff --git a/README.adoc b/README.adoc
index 8390d62a9..8ca8b9bf7 100644
--- a/README.adoc
+++ b/README.adoc
@@ -1,8 +1,8 @@
 = ConsensusJ
 Sean Gilligan <https://github.com/msgilligan>
-v0.5.11
+v0.5.12
 :description: ConsensusJ README document.
-:consensusj-version: 0.5.11
+:consensusj-version: 0.5.12
 :bitcoinj-version: 0.16-rc1
 :bitcoinj-apidoc: https://bitcoinj.org/javadoc/{bitcoinj-version}/
 :cj-apidoc: https://consensusj.github.io/consensusj/apidoc
diff --git a/cj-bitcoinj-dsl-gvy/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule b/cj-bitcoinj-dsl-gvy/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
index fcf587064..914d82492 100644
--- a/cj-bitcoinj-dsl-gvy/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
+++ b/cj-bitcoinj-dsl-gvy/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
@@ -1,3 +1,3 @@
 moduleName=ConsensusJ Groovy extensions for bitcoinj
-moduleVersion=0.5.12-SNAPSHOT
+moduleVersion=0.5.12
 extensionClasses=org.consensusj.bitcoin.dsl.groovy.categories.CoinCategory,org.consensusj.bitcoin.dsl.groovy.categories.NumberCategory
diff --git a/doc/release-process.adoc b/doc/release-process.adoc
index 8affaa302..aae1d87ec 100644
--- a/doc/release-process.adoc
+++ b/doc/release-process.adoc
@@ -8,9 +8,9 @@
 . Update `CHANGELOG.adoc`
 . Set versions
 .. `gradle.properties`
+.. `cj-bitcoinj-dsl-gvy` `ExtensionModule`
 .. `README.adoc` (check/set bitcoinj version variable, too)
-.. cj-bitcoinj-dsl-gvy `ExtensionModule`
-. Update `README.adoc` and other documentation as necessary 
+. Update `README.adoc` and other documentation as necessary
 . Commit version bump and changelog.
 . Make sure project directory is a clean checkout.
 . Full build, test
diff --git a/gradle.properties b/gradle.properties
index 9fe10a1ef..7ee4de357 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
-consensusjVersion = 0.5.12-SNAPSHOT
+consensusjVersion = 0.5.12
 
 # bitcoinj group, artifact, and version can be changed to use JitPack.io, etc
 bitcoinjGroup = org.bitcoinj