diff --git a/Cargo.lock b/Cargo.lock
index 9d07a50b..13f2ad2d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2616,7 +2616,7 @@ dependencies = [
 
 [[package]]
 name = "homestar-invocation"
-version = "0.2.0"
+version = "0.3.0"
 dependencies = [
  "anyhow",
  "async-recursion",
@@ -2645,7 +2645,7 @@ dependencies = [
 
 [[package]]
 name = "homestar-runtime"
-version = "0.2.0"
+version = "0.3.0"
 dependencies = [
  "anyhow",
  "assert_cmd",
@@ -2763,7 +2763,7 @@ dependencies = [
 
 [[package]]
 name = "homestar-schemas"
-version = "0.2.0"
+version = "0.3.0"
 dependencies = [
  "homestar-invocation",
  "homestar-runtime",
@@ -2776,7 +2776,7 @@ dependencies = [
 
 [[package]]
 name = "homestar-wasm"
-version = "0.2.0"
+version = "0.3.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -2806,7 +2806,7 @@ dependencies = [
 
 [[package]]
 name = "homestar-workflow"
-version = "0.2.0"
+version = "0.3.0"
 dependencies = [
  "fxhash",
  "homestar-invocation",
diff --git a/Cargo.toml b/Cargo.toml
index d243f730..e70c6ce9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,7 +24,7 @@ edition = "2021"
 license = "Apache-2.0"
 repository = "https://github.com/ipvm-wg/homestar"
 rust-version = "1.75.0"
-version = "0.2.0"
+version = "0.3.0"
 
 [workspace.dependencies]
 anyhow = { version = "1.0", features = ["backtrace"] }
diff --git a/homestar-invocation/CHANGELOG.md b/homestar-invocation/CHANGELOG.md
index 3b1788c6..062b0a6b 100644
--- a/homestar-invocation/CHANGELOG.md
+++ b/homestar-invocation/CHANGELOG.md
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.3.0](https://github.com/ipvm-wg/homestar/compare/homestar-invocation-v0.2.0...homestar-invocation-v0.3.0) - 2024-03-13
+
+### Added
+- finish interpreter ([#595](https://github.com/ipvm-wg/homestar/pull/595))
+
+### Fixed
+- Update nonce schema with IPLD bytes ([#593](https://github.com/ipvm-wg/homestar/pull/593))
+
+### Other
+- handle nonce as incoming string/arraybuf ([#611](https://github.com/ipvm-wg/homestar/pull/611))
+- test json/ipld/nonce ([#610](https://github.com/ipvm-wg/homestar/pull/610))
+- poll DHT in background when worker runs up a workflow + dual-stack webserver ([#590](https://github.com/ipvm-wg/homestar/pull/590))
+
 ## [0.2.0](https://github.com/ipvm-wg/homestar/compare/homestar-invocation-v0.1.1...homestar-invocation-v0.2.0) - 2024-02-20
 
 ### Added
diff --git a/homestar-runtime/CHANGELOG.md b/homestar-runtime/CHANGELOG.md
index 72a695b5..167b0813 100644
--- a/homestar-runtime/CHANGELOG.md
+++ b/homestar-runtime/CHANGELOG.md
@@ -6,6 +6,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.3.0](https://github.com/ipvm-wg/homestar/compare/homestar-runtime-v0.2.0...homestar-runtime-v0.3.0) - 2024-03-13
+
+### Added
+- log the creation of the key file in `init`
+- default `key-file` path to output directory
+- support generating PEM encoded ed25519 keys from `init`
+- translate `InquireError` to `miette::Result` in `init`
+- recursively create config directory on `init`
+- output a cleaner error when an invalid seed is passed to `init`
+- support configuring key using `init` command
+- run `init` command non-interactively if a TTY isn't detected
+- add `--no-input` to `init` command
+- add `--force` to `init` command for forcing destructive operations
+- add `--quiet` flag to `init` command
+- support `--dry-run` for `init` command
+- add `init` command for initializing a settings file
+- load settings from a well-known config file
+- finish interpreter ([#595](https://github.com/ipvm-wg/homestar/pull/595))
+
+### Fixed
+- cleanup empty key file when bailing out of generating secp256k1
+- parse ed25519 keys using the old strategy as a fallback
+- use `ed25519-dalek` for parsing PEM-encoded PKCS[#8](https://github.com/ipvm-wg/homestar/pull/8) ed25519 keys
+- only constrain `inquire` and `derive_builder` by minor version
+- hide `IpfsSettings` behind "ipfs" feature
+- set `truncate(true)` when forcefully overwriting the config
+- Update nonce schema with IPLD bytes ([#593](https://github.com/ipvm-wg/homestar/pull/593))
+
+### Other
+- Add workflow spans and every cli logging ([#603](https://github.com/ipvm-wg/homestar/pull/603))
+- *(schemas)* update OpenRPC API doc and JSON schemas
+- handle nonce as incoming string/arraybuf ([#611](https://github.com/ipvm-wg/homestar/pull/611))
+- [chore(cargo)](deps): Bump toml from 0.8.10 to 0.8.11 ([#612](https://github.com/ipvm-wg/homestar/pull/612))
+- document that a random seed will be chosen if `key-seed` is unset
+- document that if unset, a default path is used with `key-file`
+- update help text for `key-file` to say it'll generate a key
+- prompt for the key file as a `String` instead of `PathBuf`
+- add a test for writing the generated config file + key
+- split `force` field out of `OutputMode::File`
+- remove `KeyTypeArg` in favor of using `KeyType`
+- remove unneeded `defaults.toml`
+- add simple tests for `init` command
+- remove out of date TODO in `init.rs`
+- remove unneeded `#[allow(dead_code)]` in `settings.rs`
+- wrap all `init` args in `InitArgs` and consolidate handling
+- sort imports in `cli/init.rs`
+- remove docs link to private `homestar_runtime::db::pool`
+- improve error for passing `--no-input` to `init` with no key
+- remove extraneous `...` destructuring of `Command::Init`
+- change `--config` flag to `--output` for `init` command
+- move handling of `init` command to `init.rs`
+- fix comments listing supported public key types
+- *(schemas)* update OpenRPC API doc and JSON schemas
+- *(schemas)* update OpenRPC API doc and JSON schemas
+- poll DHT in background when worker runs up a workflow + dual-stack webserver ([#590](https://github.com/ipvm-wg/homestar/pull/590))
+- [chore(cargo)](deps): Bump config from 0.13.4 to 0.14.0 ([#588](https://github.com/ipvm-wg/homestar/pull/588))
+- [chore(cargo)](deps): Bump nix from 0.27.1 to 0.28.0 ([#587](https://github.com/ipvm-wg/homestar/pull/587))
+
 ## [0.2.0](https://github.com/ipvm-wg/homestar/compare/homestar-runtime-v0.1.1...homestar-runtime-v0.2.0) - 2024-02-20
 
 ### Added
diff --git a/homestar-runtime/Cargo.toml b/homestar-runtime/Cargo.toml
index 68e631da..1884eeeb 100644
--- a/homestar-runtime/Cargo.toml
+++ b/homestar-runtime/Cargo.toml
@@ -74,11 +74,11 @@ flume = { version = "0.11", default-features = false, features = ["async"] }
 fnv = { version = "1.0", default-features = false }
 futures = { workspace = true }
 hickory-resolver = { version = "0.24", default-features = false }
-homestar-invocation = { version = "0.2", path = "../homestar-invocation", features = [
+homestar-invocation = { version = "0.3", path = "../homestar-invocation", features = [
   "diesel",
 ] }
-homestar-wasm = { version = "0.2", path = "../homestar-wasm", default-features = false }
-homestar-workflow = { version = "0.2", path = "../homestar-workflow" }
+homestar-wasm = { version = "0.3", path = "../homestar-wasm", default-features = false }
+homestar-workflow = { version = "0.3", path = "../homestar-workflow" }
 homestar-workspace-hack = { workspace = true }
 http = "0.2"
 http-serde = "1.1"
@@ -208,7 +208,7 @@ vergen = { version = "8.3", default-features = false, features = [
 [dev-dependencies]
 assert_cmd = "2.0"
 criterion = "0.5"
-homestar-invocation = { version = "0.2", path = "../homestar-invocation", features = [
+homestar-invocation = { version = "0.3", path = "../homestar-invocation", features = [
   "diesel",
   "test-utils",
 ] }
diff --git a/homestar-schemas/Cargo.toml b/homestar-schemas/Cargo.toml
index e3b21cfb..d45b40b3 100644
--- a/homestar-schemas/Cargo.toml
+++ b/homestar-schemas/Cargo.toml
@@ -6,11 +6,11 @@ edition = { workspace = true }
 rust-version = { workspace = true }
 
 [dependencies]
-homestar-invocation = { version = "0.2", path = "../homestar-invocation", default-features = false }
-homestar-runtime = { version = "0.2", path = "../homestar-runtime", default-features = false, features = [
+homestar-invocation = { version = "0.3", path = "../homestar-invocation", default-features = false }
+homestar-runtime = { version = "0.3", path = "../homestar-runtime", default-features = false, features = [
   "websocket-notify",
 ] }
-homestar-workflow = { version = "0.2", path = "../homestar-workflow", default-features = false }
+homestar-workflow = { version = "0.3", path = "../homestar-workflow", default-features = false }
 homestar-workspace-hack = { workspace = true }
 schemars = { workspace = true }
 serde = { workspace = true }
diff --git a/homestar-wasm/CHANGELOG.md b/homestar-wasm/CHANGELOG.md
index 19dd0156..366afe29 100644
--- a/homestar-wasm/CHANGELOG.md
+++ b/homestar-wasm/CHANGELOG.md
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.3.0](https://github.com/ipvm-wg/homestar/compare/homestar-wasm-v0.2.0...homestar-wasm-v0.3.0) - 2024-03-13
+
+### Added
+- finish interpreter ([#595](https://github.com/ipvm-wg/homestar/pull/595))
+
+### Other
+- Add workflow spans and every cli logging ([#603](https://github.com/ipvm-wg/homestar/pull/603))
+- handle incoming as Wit integer, but argument is float ([#609](https://github.com/ipvm-wg/homestar/pull/609))
+- handle ref/non-ref case with rigor ([#608](https://github.com/ipvm-wg/homestar/pull/608))
+- doc interpreter ([#607](https://github.com/ipvm-wg/homestar/pull/607))
+- poll DHT in background when worker runs up a workflow + dual-stack webserver ([#590](https://github.com/ipvm-wg/homestar/pull/590))
+- wasmtime 17->18 ([#585](https://github.com/ipvm-wg/homestar/pull/585))
+
 ## [0.2.0](https://github.com/ipvm-wg/homestar/compare/homestar-wasm-v0.1.1...homestar-wasm-v0.2.0) - 2024-02-20
 
 ### Other
diff --git a/homestar-wasm/Cargo.toml b/homestar-wasm/Cargo.toml
index 3539f06c..03f26539 100644
--- a/homestar-wasm/Cargo.toml
+++ b/homestar-wasm/Cargo.toml
@@ -25,7 +25,7 @@ async-trait = { workspace = true }
 atomic_refcell = { workspace = true }
 enum-as-inner = { workspace = true }
 heck = "0.4"
-homestar-invocation = { version = "0.2", path = "../homestar-invocation" }
+homestar-invocation = { version = "0.3", path = "../homestar-invocation" }
 homestar-workspace-hack = { workspace = true }
 indexmap = { workspace = true }
 itertools = { workspace = true }
diff --git a/homestar-workflow/CHANGELOG.md b/homestar-workflow/CHANGELOG.md
index ea0123c9..6ba2d758 100644
--- a/homestar-workflow/CHANGELOG.md
+++ b/homestar-workflow/CHANGELOG.md
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.3.0](https://github.com/ipvm-wg/homestar/compare/homestar-workflow-v0.2.0...homestar-workflow-v0.3.0) - 2024-03-13
+
+### Other
+- handle nonce as incoming string/arraybuf ([#611](https://github.com/ipvm-wg/homestar/pull/611))
+
 ## [0.2.0](https://github.com/ipvm-wg/homestar/compare/homestar-workflow-v0.1.1...homestar-workflow-v0.2.0) - 2024-02-20
 
 ### Added
diff --git a/homestar-workflow/Cargo.toml b/homestar-workflow/Cargo.toml
index a9a46741..a75471f7 100644
--- a/homestar-workflow/Cargo.toml
+++ b/homestar-workflow/Cargo.toml
@@ -19,7 +19,7 @@ doctest = true
 
 [dependencies]
 fxhash = { version = "0.2", default-features = false }
-homestar-invocation = { version = "0.2", path = "../homestar-invocation" }
+homestar-invocation = { version = "0.3", path = "../homestar-invocation" }
 homestar-workspace-hack = { workspace = true }
 indexmap = { workspace = true }
 libipld = { workspace = true }
@@ -28,7 +28,7 @@ serde = { workspace = true }
 thiserror = { workspace = true }
 
 [dev-dependencies]
-homestar-invocation = { version = "0.2", path = "../homestar-invocation", features = [
+homestar-invocation = { version = "0.3", path = "../homestar-invocation", features = [
   "test-utils",
 ] }
 json = "0.12"