diff --git a/Cargo.lock b/Cargo.lock
index 7d4a2fc9..1e14ff02 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1048,7 +1048,7 @@ dependencies = [
 
 [[package]]
 name = "helix-core"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "ahash",
  "arc-swap",
@@ -1083,7 +1083,7 @@ dependencies = [
 
 [[package]]
 name = "helix-dap"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "fern",
@@ -1098,7 +1098,7 @@ dependencies = [
 
 [[package]]
 name = "helix-event"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "parking_lot",
  "tokio",
@@ -1106,7 +1106,7 @@ dependencies = [
 
 [[package]]
 name = "helix-loader"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "cc",
@@ -1125,7 +1125,7 @@ dependencies = [
 
 [[package]]
 name = "helix-lsp"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "futures-executor",
@@ -1147,11 +1147,11 @@ dependencies = [
 
 [[package]]
 name = "helix-parsec"
-version = "0.6.0"
+version = "23.10.0"
 
 [[package]]
 name = "helix-term"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -1193,7 +1193,7 @@ dependencies = [
 
 [[package]]
 name = "helix-tui"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "bitflags 2.4.1",
  "cassowary",
@@ -1209,7 +1209,7 @@ dependencies = [
 
 [[package]]
 name = "helix-vcs"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -1225,7 +1225,7 @@ dependencies = [
 
 [[package]]
 name = "helix-view"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "anyhow",
  "arc-swap",
@@ -2610,7 +2610,7 @@ dependencies = [
 
 [[package]]
 name = "xtask"
-version = "0.6.0"
+version = "23.10.0"
 dependencies = [
  "helix-core",
  "helix-loader",
diff --git a/Cargo.toml b/Cargo.toml
index f2cd9b76..6c006fbb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -40,6 +40,11 @@ tree-sitter = { version = "0.20", git = "https://github.com/tree-sitter/tree-sit
 nucleo = "0.2.0"
 
 [workspace.package]
+version = "23.10.0"
 edition = "2021"
+authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+categories = ["editor"]
+repository = "https://github.com/helix-editor/helix"
+homepage = "https://helix-editor.com"
 license = "MPL-2.0"
 rust-version = "1.70"
diff --git a/VERSION b/VERSION
deleted file mode 100644
index f5f8bffe..00000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-23.10
\ No newline at end of file
diff --git a/docs/releases.md b/docs/releases.md
index 84288675..e39cfd91 100644
--- a/docs/releases.md
+++ b/docs/releases.md
@@ -1,16 +1,23 @@
 ## Checklist
 
 Helix releases are versioned in the Calendar Versioning scheme:
-`YY.0M(.MICRO)`, for example, `22.05` for May of 2022. In these instructions
-we'll use `<tag>` as a placeholder for the tag being published.
+`YY.0M(.MICRO)`, for example, `22.05` for May of 2022, or in a patch release,
+`22.05.1`. In these instructions we'll use `<tag>` as a placeholder for the tag
+being published.
 
 * Merge the changelog PR
 * Add new `<release>` entry in `contrib/Helix.appdata.xml` with release information according to the [AppStream spec](https://www.freedesktop.org/software/appstream/docs/sect-Metadata-Releases.html)
 * Tag and push
     * `git tag -s -m "<tag>" -a <tag> && git push`
     * Make sure to switch to master and pull first
-* Edit the `VERSION` file and change the date to the next planned release
-    * Releases are planned to happen every two months, so `22.05` would change to `22.07`
+* Edit the `Cargo.toml` file and change the date in the `version` field to the next planned release
+    * Due to Cargo having a strict requirement on SemVer with 3 or more version
+      numbers, a `0` is required in the micro version; however, unless we are
+      publishing a patch release after a major release, the `.0` is dropped in
+      the user facing version.
+    * Releases are planned to happen every two months, so `22.05.0` would change to `22.07.0`
+    * If we are pushing a patch/bugfix release in the same month as the previous
+      release, bump the micro version, e.g. `22.07.0` to `22.07.1`
 * Wait for the Release CI to finish
     * It will automatically turn the git tag into a GitHub release when it uploads artifacts
 * Edit the new release
@@ -57,4 +64,4 @@ versions for convenience:
 > release. For the full log, check out the git log.
 
 Typically, small changes like dependencies or documentation updates, refactors,
-or meta changes like GitHub Actions work are left out.
\ No newline at end of file
+or meta changes like GitHub Actions work are left out.
diff --git a/helix-core/Cargo.toml b/helix-core/Cargo.toml
index f3797af2..800b7a5d 100644
--- a/helix-core/Cargo.toml
+++ b/helix-core/Cargo.toml
@@ -1,22 +1,22 @@
 [package]
 name = "helix-core"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "Helix editor core editing primitives"
+include = ["src/**/*", "README.md"]
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-description = "Helix editor core editing primitives"
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
-include = ["src/**/*", "README.md"]
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [features]
 unicode-lines = ["ropey/unicode_lines"]
 integration = []
 
 [dependencies]
-helix-loader = { version = "0.6", path = "../helix-loader" }
+helix-loader = { path = "../helix-loader" }
 
 ropey = { version = "1.6.1", default-features = false, features = ["simd"] }
 smallvec = "1.11"
diff --git a/helix-dap/Cargo.toml b/helix-dap/Cargo.toml
index b4dd5177..f7acb003 100644
--- a/helix-dap/Cargo.toml
+++ b/helix-dap/Cargo.toml
@@ -1,19 +1,20 @@
 [package]
 name = "helix-dap"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "DAP client implementation for Helix project"
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-description = "DAP client implementation for Helix project"
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-helix-core = { version = "0.6", path = "../helix-core" }
+helix-core = { path = "../helix-core" }
+
 anyhow = "1.0"
 log = "0.4"
 serde = { version = "1.0", features = ["derive"] }
diff --git a/helix-event/Cargo.toml b/helix-event/Cargo.toml
index 2dd4b512..c2032824 100644
--- a/helix-event/Cargo.toml
+++ b/helix-event/Cargo.toml
@@ -1,13 +1,13 @@
 [package]
 name = "helix-event"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
diff --git a/helix-loader/Cargo.toml b/helix-loader/Cargo.toml
index b32318d0..1a98e94b 100644
--- a/helix-loader/Cargo.toml
+++ b/helix-loader/Cargo.toml
@@ -1,14 +1,14 @@
 [package]
 name = "helix-loader"
-version = "0.6.0"
-description = "A post-modern text editor."
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "Build bootstrapping for Helix crates"
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [[bin]]
 name = "hx-loader"
diff --git a/helix-loader/build.rs b/helix-loader/build.rs
index 74ba2a2b..a4562c00 100644
--- a/helix-loader/build.rs
+++ b/helix-loader/build.rs
@@ -2,7 +2,17 @@ use std::borrow::Cow;
 use std::path::Path;
 use std::process::Command;
 
-const VERSION: &str = include_str!("../VERSION");
+const MAJOR: &str = env!("CARGO_PKG_VERSION_MAJOR");
+const MINOR: &str = env!("CARGO_PKG_VERSION_MINOR");
+const PATCH: &str = env!("CARGO_PKG_VERSION_PATCH");
+
+fn get_calver() -> String {
+    if PATCH == "0" {
+        format!("{MAJOR}.{MINOR}")
+    } else {
+        format!("{MAJOR}.{MINOR}.{PATCH}")
+    }
+}
 
 fn main() {
     let git_hash = Command::new("git")
@@ -12,9 +22,10 @@ fn main() {
         .filter(|output| output.status.success())
         .and_then(|x| String::from_utf8(x.stdout).ok());
 
+    let calver = get_calver();
     let version: Cow<_> = match &git_hash {
-        Some(git_hash) => format!("{} ({})", VERSION, &git_hash[..8]).into(),
-        None => VERSION.into(),
+        Some(git_hash) => format!("{} ({})", calver, &git_hash[..8]).into(),
+        None => calver.into(),
     };
 
     println!(
@@ -22,7 +33,6 @@ fn main() {
         std::env::var("TARGET").unwrap()
     );
 
-    println!("cargo:rerun-if-changed=../VERSION");
     println!("cargo:rustc-env=VERSION_AND_GIT_HASH={}", version);
 
     if git_hash.is_none() {
diff --git a/helix-lsp/Cargo.toml b/helix-lsp/Cargo.toml
index d9507f1b..66b67f8e 100644
--- a/helix-lsp/Cargo.toml
+++ b/helix-lsp/Cargo.toml
@@ -1,21 +1,21 @@
 [package]
 name = "helix-lsp"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "LSP client implementation for Helix project"
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-description = "LSP client implementation for Helix project"
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-helix-core = { version = "0.6", path = "../helix-core" }
-helix-loader = { version = "0.6", path = "../helix-loader" }
-helix-parsec = { version = "0.6", path = "../helix-parsec" }
+helix-core = { path = "../helix-core" }
+helix-loader = { path = "../helix-loader" }
+helix-parsec = { path = "../helix-parsec" }
 
 anyhow = "1.0"
 futures-executor = "0.3"
diff --git a/helix-parsec/Cargo.toml b/helix-parsec/Cargo.toml
index d2b6105e..21769121 100644
--- a/helix-parsec/Cargo.toml
+++ b/helix-parsec/Cargo.toml
@@ -1,14 +1,14 @@
 [package]
 name = "helix-parsec"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "Parser combinators for Helix"
+include = ["src/**/*", "README.md"]
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-description = "Parser combinators for Helix"
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
-include = ["src/**/*", "README.md"]
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [dependencies]
diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml
index eaed8375..33594c0f 100644
--- a/helix-term/Cargo.toml
+++ b/helix-term/Cargo.toml
@@ -1,16 +1,16 @@
 [package]
 name = "helix-term"
-version = "0.6.0"
 description = "A post-modern text editor."
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
-edition.workspace = true
-license.workspace = true
-categories = ["editor", "command-line-utilities"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
 include = ["src/**/*", "README.md"]
 default-run = "hx"
+version.workspace = true
+authors.workspace = true
+edition.workspace = true
+license.workspace = true
 rust-version.workspace = true
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [features]
 default = ["git"]
@@ -23,13 +23,13 @@ name = "hx"
 path = "src/main.rs"
 
 [dependencies]
-helix-core = { version = "0.6", path = "../helix-core" }
-helix-event = { version = "0.6", path = "../helix-event" }
-helix-view = { version = "0.6", path = "../helix-view" }
-helix-lsp = { version = "0.6", path = "../helix-lsp" }
-helix-dap = { version = "0.6", path = "../helix-dap" }
-helix-vcs = { version = "0.6", path = "../helix-vcs" }
-helix-loader = { version = "0.6", path = "../helix-loader" }
+helix-core = { path = "../helix-core" }
+helix-event = { path = "../helix-event" }
+helix-view = { path = "../helix-view" }
+helix-lsp = { path = "../helix-lsp" }
+helix-dap = { path = "../helix-dap" }
+helix-vcs = { path = "../helix-vcs" }
+helix-loader = { path = "../helix-loader" }
 
 anyhow = "1"
 once_cell = "1.18"
@@ -79,7 +79,7 @@ libc = "0.2.150"
 crossterm = { version = "0.27", features = ["event-stream", "use-dev-tty"] }
 
 [build-dependencies]
-helix-loader = { version = "0.6", path = "../helix-loader" }
+helix-loader = { path = "../helix-loader" }
 
 [dev-dependencies]
 smallvec = "1.11"
diff --git a/helix-tui/Cargo.toml b/helix-tui/Cargo.toml
index 602fa3e5..c6af90fc 100644
--- a/helix-tui/Cargo.toml
+++ b/helix-tui/Cargo.toml
@@ -1,22 +1,23 @@
 [package]
 name = "helix-tui"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
-description = """
-A library to build rich terminal user interfaces or dashboards
-"""
+description = """A library to build rich terminal user interfaces or dashboards"""
+include = ["src/**/*", "README.md"]
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
-include = ["src/**/*", "README.md"]
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [features]
 default = ["crossterm"]
 
 [dependencies]
+helix-view = { path = "../helix-view", features = ["term"] }
+helix-core = { path = "../helix-core" }
+
 bitflags = "2.4"
 cassowary = "0.3"
 unicode-segmentation = "1.10"
@@ -25,5 +26,3 @@ termini = "1.0"
 serde = { version = "1", "optional" = true, features = ["derive"]}
 once_cell = "1.18"
 log = "~0.4"
-helix-view = { version = "0.6", path = "../helix-view", features = ["term"] }
-helix-core = { version = "0.6", path = "../helix-core" }
diff --git a/helix-vcs/Cargo.toml b/helix-vcs/Cargo.toml
index 1152cf9a..ba38160f 100644
--- a/helix-vcs/Cargo.toml
+++ b/helix-vcs/Cargo.toml
@@ -1,19 +1,19 @@
 [package]
 name = "helix-vcs"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-helix-core = { version = "0.6", path = "../helix-core" }
-helix-event = { version = "0.6", path = "../helix-event" }
+helix-core = { path = "../helix-core" }
+helix-event = { path = "../helix-event" }
 
 tokio = { version = "1", features = ["rt", "rt-multi-thread", "time", "sync", "parking_lot", "macros"] }
 parking_lot = "0.12"
@@ -29,4 +29,4 @@ log = "0.4"
 git = ["gix"]
 
 [dev-dependencies]
-tempfile = "3.8"
\ No newline at end of file
+tempfile = "3.8"
diff --git a/helix-view/Cargo.toml b/helix-view/Cargo.toml
index 9fc83d4c..5fb6d96b 100644
--- a/helix-view/Cargo.toml
+++ b/helix-view/Cargo.toml
@@ -1,29 +1,30 @@
 [package]
 name = "helix-view"
-version = "0.6.0"
-authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+description = "UI abstractions for use in backends"
+version.workspace = true
+authors.workspace = true
 edition.workspace = true
 license.workspace = true
 rust-version.workspace = true
-description = "UI abstractions for use in backends"
-categories = ["editor"]
-repository = "https://github.com/helix-editor/helix"
-homepage = "https://helix-editor.com"
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 [features]
 default = []
 term = ["crossterm"]
 
 [dependencies]
+helix-core = { path = "../helix-core" }
+helix-event = { path = "../helix-event" }
+helix-loader = { path = "../helix-loader" }
+helix-lsp = { path = "../helix-lsp" }
+helix-dap = { path = "../helix-dap" }
+helix-vcs = { path = "../helix-vcs" }
+
 bitflags = "2.4"
 anyhow = "1"
-helix-core = { version = "0.6", path = "../helix-core" }
-helix-event = { version = "0.6", path = "../helix-event" }
-helix-loader = { version = "0.6", path = "../helix-loader" }
-helix-lsp = { version = "0.6", path = "../helix-lsp" }
-helix-dap = { version = "0.6", path = "../helix-dap" }
 crossterm = { version = "0.27", optional = true }
-helix-vcs = { version = "0.6", path = "../helix-vcs" }
 
 # Conversion traits
 once_cell = "1.18"
diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml
index ed118294..0a61536f 100644
--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -1,13 +1,19 @@
 [package]
 name = "xtask"
-version = "0.6.0"
-edition = "2021"
+version.workspace = true
+authors.workspace = true
+edition.workspace = true
+license.workspace = true
+rust-version.workspace = true
+categories.workspace = true
+repository.workspace = true
+homepage.workspace = true
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-helix-term = { version = "0.6", path = "../helix-term" }
-helix-core = { version = "0.6", path = "../helix-core" }
-helix-view = { version = "0.6", path = "../helix-view" }
-helix-loader = { version = "0.6", path = "../helix-loader" }
+helix-term = { path = "../helix-term" }
+helix-core = { path = "../helix-core" }
+helix-view = { path = "../helix-view" }
+helix-loader = { path = "../helix-loader" }
 toml = "0.7"