This is an automated email from the ASF dual-hosted git repository.

kparisa pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iggy-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 0fdcb2bd8 docs: add a quickstart and update wording for 0.9.0 (#108)
0fdcb2bd8 is described below

commit 0fdcb2bd8ab0a45e0ec6d68bfde843e3f91596ad
Author: Justin Mclean <[email protected]>
AuthorDate: Thu Sep 17 11:51:12 2026 +1000

    docs: add a quickstart and update wording for 0.9.0 (#108)
    
    Adds a one-file Rust quickstart and points the Get Started button and
    docs card to it. Adds a server compatibility table to the SDK
    introduction. Replaces pre-release wording and pins image and package
    versions to the 0.9.0 release. Please merge once 0.9.0 is published.
    
    Co-authored-by: Justin Mclean <[email protected]>
---
 content/docs/ai/mcp.mdx                       |   6 +-
 content/docs/cli/start.mdx                    |  14 ++--
 content/docs/clustering/vsr.mdx               |   2 +-
 content/docs/connectors/introduction.mdx      |   2 +-
 content/docs/connectors/runtime.mdx           |   2 +-
 content/docs/introduction/about.mdx           |  14 ++--
 content/docs/introduction/getting-started.mdx |   6 +-
 content/docs/introduction/meta.json           |   2 +-
 content/docs/introduction/quickstart.mdx      | 107 ++++++++++++++++++++++++++
 content/docs/sdk/csharp/intro.mdx             |   4 +-
 content/docs/sdk/go/intro.mdx                 |   6 +-
 content/docs/sdk/introduction.mdx             |  16 ++++
 content/docs/sdk/java/examples.mdx            |   2 +-
 content/docs/sdk/java/intro.mdx               |  19 ++---
 content/docs/sdk/node/examples.mdx            |   2 +-
 content/docs/sdk/node/intro.mdx               |   9 +--
 content/docs/sdk/php/intro.mdx                |   2 +-
 content/docs/sdk/python/examples.mdx          |   2 +-
 content/docs/server/docker.mdx                |  14 ++--
 content/docs/server/introduction.mdx          |   2 +-
 content/docs/web_ui/start.mdx                 |  12 +--
 src/app/(home)/page.tsx                       |   2 +-
 src/components/architecture-diagrams.tsx      |   2 +-
 23 files changed, 182 insertions(+), 67 deletions(-)

diff --git a/content/docs/ai/mcp.mdx b/content/docs/ai/mcp.mdx
index 22d3f4e64..c9fba97b0 100644
--- a/content/docs/ai/mcp.mdx
+++ b/content/docs/ai/mcp.mdx
@@ -15,7 +15,7 @@ IGGY_MCP_IGGY_USERNAME=iggy IGGY_MCP_IGGY_PASSWORD=iggy cargo 
run --bin iggy-mcp
 
 These are the development credentials configured in that guide. Use your 
broker's credentials or a PAT when connecting to an existing installation.
 
-The [docker image](https://hub.docker.com/r/apache/iggy-mcp) is available, and 
can be fetched via `docker pull apache/iggy-mcp:edge`.
+The [docker image](https://hub.docker.com/r/apache/iggy-mcp) is available, and 
can be fetched via `docker pull apache/iggy-mcp:0.5.0`.
 
 ## Configuration
 
@@ -215,7 +215,7 @@ docker run -d --name iggy-server --network iggy-mcp \
   -e IGGY_ROOT_USERNAME=iggy -e IGGY_ROOT_PASSWORD=iggy \
   -e IGGY_TCP_ADDRESS=0.0.0.0:8090 \
   -e IGGY_NODE_ADVERTISED_ADDRESS=iggy-server \
-  apache/iggy:edge
+  apache/iggy:0.9.0
 ```
 
 After the broker is ready, run the MCP server on the same network:
@@ -227,7 +227,7 @@ docker run --rm --network iggy-mcp -e 
IGGY_MCP_TRANSPORT=http \
   -e IGGY_MCP_IGGY_USERNAME=iggy \
   -e IGGY_MCP_IGGY_PASSWORD=iggy \
   -p 127.0.0.1:8082:8082 \
-  apache/iggy-mcp:edge
+  apache/iggy-mcp:0.5.0
 ```
 
 The HTTP endpoint uses the configured Iggy account for every MCP client. This 
example publishes it only on the host loopback interface.
diff --git a/content/docs/cli/start.mdx b/content/docs/cli/start.mdx
index eacef4a2a..037ec987f 100644
--- a/content/docs/cli/start.mdx
+++ b/content/docs/cli/start.mdx
@@ -11,22 +11,22 @@ This page covers installing the CLI, connecting to a 
server, authenticating, and
 
 ### Cargo
 
-These docs target server 0.9.0 and the CLI built from the same source 
checkout. The CLI has its own version number. From the root of that checkout, 
install it with:
+These docs target server 0.9.0 and CLI 0.14.0, which was released with it. The 
CLI has its own version number, so use the version that matches your server. 
Install it from crates.io with:
 
 ```bash
-cargo install --path core/cli --locked
+cargo install iggy-cli --version 0.14.0 --locked
 ```
 
-A published edge package is also available from crates.io. Version 
`0.14.0-edge.7` predates the new durability flags and CLI fixes documented 
here; use the source build for those commands:
+This builds and installs the `iggy` binary. With 
[cargo-binstall](https://github.com/cargo-bins/cargo-binstall), you can 
download a prebuilt binary instead. It builds from source if there isn't one 
for your platform:
 
 ```bash
-cargo install iggy-cli --version 0.14.0-edge.7
+cargo binstall iggy-cli --version 0.14.0
 ```
 
-This builds and installs the `iggy` binary. If you have 
[cargo-binstall](https://github.com/cargo-bins/cargo-binstall), it can fetch a 
matching prebuilt binary when one is available, otherwise it falls back to 
compilation:
+To build it from source instead, use the same checkout as your server and run 
this from its root:
 
 ```bash
-cargo binstall iggy-cli --version 0.14.0-edge.7
+cargo install --path core/cli --locked
 ```
 
 ### Docker
@@ -34,7 +34,7 @@ cargo binstall iggy-cli --version 0.14.0-edge.7
 The official `apache/iggy` image ships the CLI alongside the server, installed 
as `/usr/local/bin/iggy`. The image entrypoint is the server, so override it to 
run the CLI:
 
 ```bash
-docker run --rm -it --network host --entrypoint iggy apache/iggy:edge -u iggy 
-p iggy ping
+docker run --rm -it --network host --entrypoint iggy apache/iggy:0.9.0 -u iggy 
-p iggy ping
 ```
 
 `--network host` works on **Linux**. On macOS and Windows, point the CLI at 
the host instead: `--tcp-server-address host.docker.internal:8090`.
diff --git a/content/docs/clustering/vsr.mdx b/content/docs/clustering/vsr.mdx
index 24ec83596..9f145c69d 100644
--- a/content/docs/clustering/vsr.mdx
+++ b/content/docs/clustering/vsr.mdx
@@ -66,7 +66,7 @@ The Rust SDK needs no feature flags. Depend on the published 
crate:
 
 ```toml
 [dependencies]
-iggy = "0.11.0-edge.7"
+iggy = "0.11.0"
 tokio = { version = "1", features = ["full"] }
 ```
 
diff --git a/content/docs/connectors/introduction.mdx 
b/content/docs/connectors/introduction.mdx
index 77f1150c0..390015c16 100644
--- a/content/docs/connectors/introduction.mdx
+++ b/content/docs/connectors/introduction.mdx
@@ -5,7 +5,7 @@ description: "The connector runtime: dynamically loaded source 
and sink plugins,
 
 The highly performant and modular runtime for statically typed, yet 
dynamically loaded connectors. Ingest the data from the external sources and 
push it further to the Iggy streams, or fetch the data from the Iggy streams 
and push it further to the external sources. Create your own Rust plugins by 
simply implementing either the `Source` or `Sink` trait and build custom 
pipelines for the data processing.
 
-The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:edge`.
+The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:0.5.0`.
 
 ## Architecture
 
diff --git a/content/docs/connectors/runtime.mdx 
b/content/docs/connectors/runtime.mdx
index d89e62523..074a80d34 100644
--- a/content/docs/connectors/runtime.mdx
+++ b/content/docs/connectors/runtime.mdx
@@ -14,7 +14,7 @@ By default, runtime will look for the configuration file, to 
decide which connec
 
 Set the broker credentials and connector configuration directory before 
starting the runtime. The embedded default has an empty connector directory and 
cannot start unchanged. For a complete setup, follow the [quick 
start](/docs/connectors/introduction#quick-start).
 
-The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:edge`.
+The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:0.5.0`.
 
 ## How configuration is resolved
 
diff --git a/content/docs/introduction/about.mdx 
b/content/docs/introduction/about.mdx
index 6d40d11d3..9b6fab912 100644
--- a/content/docs/introduction/about.mdx
+++ b/content/docs/introduction/about.mdx
@@ -51,7 +51,7 @@ Historical startup screenshot from server 0.5.0. See 
[configuration](/docs/serve
 - Optional server-side as well as client-side **data encryption** using 
AES-256-GCM
 - Optional metadata support in the form of **message headers**
 - Prometheus metrics and **OpenTelemetry** logs & traces in the [connector 
runtime](/docs/connectors/observability). Server export has [known 
limitations](/docs/server/configuration#telemetry).
-- Built-in **[CLI](/docs/cli/start)** to manage the streaming server 
installable via `cargo install iggy-cli --version 0.14.0-edge.7 --locked`
+- Built-in **[CLI](/docs/cli/start)** to manage the streaming server 
installable via `cargo install iggy-cli --version 0.14.0 --locked`
 - Built-in **[Web UI](/docs/web_ui/start)** dashboard (Svelte) that can be 
embedded directly in the server binary or run as a standalone container
 - Built-in **[benchmarking app](/docs/server/benchmarking)** to test the 
performance, with published results on the [benchmarks 
dashboard](https://benchmarks.iggy.apache.org)
 - **Single binary deployment** without an external broker or database; 
operating-system libraries are still required by dynamically linked builds
@@ -75,14 +75,14 @@ Historical startup screenshot from server 0.5.0. See 
[configuration](/docs/serve
 
 The interactive CLI is implemented under `core/cli`, to provide the best 
developer experience. This is a great addition to the Web UI, especially for 
developers who prefer using the console tools.
 
-Iggy CLI can be installed with `cargo install iggy-cli --version 0.14.0-edge.7 
--locked` and then simply accessed by typing `iggy` in your terminal. It 
supports named connection contexts (profiles) for managing multiple server 
connections, shell completions for bash/zsh/fish/elvish/powershell, and 
session-based login through platform credential stores on Linux, macOS and 
Windows when the default `login-session` feature is enabled.
+Iggy CLI can be installed with `cargo install iggy-cli --version 0.14.0 
--locked` and then simply accessed by typing `iggy` in your terminal. It 
supports named connection contexts (profiles) for managing multiple server 
connections, shell completions for bash/zsh/fish/elvish/powershell, and 
session-based login through platform credential stores on Linux, macOS and 
Windows when the default `login-session` feature is enabled.
 
 ### Web UI
 
 The Web UI provides a comprehensive dashboard for the Iggy server, built with 
SvelteKit and TypeScript. It can run in two modes:
 
 - **Embedded** - compiled into the server binary (with the `iggy-web` feature 
and [built static assets](/docs/web_ui/start)), served at the `/ui` endpoint 
when `http.web_ui = true`
-- **Standalone** - as a separate container via `docker pull 
apache/iggy-web-ui:edge`
+- **Standalone** - as a separate container via `docker pull 
apache/iggy-web-ui:0.4.0`
 
 Features include stream/topic/partition management, a message browser with 
JSON/string/XML decoders, and user listing and creation with initial 
permissions. Editing or deleting existing users and changing their permissions 
are placeholders. The logs and terminal pages are also placeholders, and the 
server settings page has a disabled Save action rather than an operational 
configuration editor.
 
@@ -92,17 +92,17 @@ Iggy provides a highly performant and modular 
**[runtime](/docs/connectors/runti
 
 The source tree contains 16 sinks and 4 sources. Sinks include PostgreSQL, 
MongoDB, Elasticsearch, ClickHouse, InfluxDB, Apache Iceberg, Delta Lake, 
Quickwit and S3. Sources include PostgreSQL, Elasticsearch, InfluxDB and random 
data generation. See the [connectors 
documentation](/docs/connectors/introduction) for the full catalog.
 
-The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:edge`.
+The [docker image](https://hub.docker.com/r/apache/iggy-connect) is available, 
and can be fetched via `docker pull apache/iggy-connect:0.5.0`.
 
 ## Model Context Protocol
 
 The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open 
protocol that standardizes how applications provide context to LLMs. The 
**[Iggy MCP Server](/docs/ai/mcp)** is an implementation of the MCP protocol 
for message streaming infrastructure. It exposes 40+ tools covering streams, 
topics, partitions, messages, consumer groups, users, and more. It supports 
both HTTP and stdio transports, making it compatible with tools like Claude 
Desktop and other MCP clients.
 
-The [docker image](https://hub.docker.com/r/apache/iggy-mcp) is available, and 
can be fetched via `docker pull apache/iggy-mcp:edge`.
+The [docker image](https://hub.docker.com/r/apache/iggy-mcp) is available, and 
can be fetched via `docker pull apache/iggy-mcp:0.5.0`.
 
 ### Docker
 
-The official Apache Iggy images can be found on [Docker 
Hub](https://hub.docker.com/r/apache/iggy). These docs prepare for server 
0.9.0. Use `docker pull apache/iggy:0.9.0` when that release is available, or 
`docker pull apache/iggy:edge` for a development image. SDK and tooling 
versions are independent of the server version; the CLI command above pins a 
published edge version.
+The official Apache Iggy images can be found on [Docker 
Hub](https://hub.docker.com/r/apache/iggy). These docs target server 0.9.0. Use 
`docker pull apache/iggy:0.9.0`, or `docker pull apache/iggy:edge` for a 
development image. SDK and tooling versions are independent of the server 
version.
 
 You can also find the images for all the different tooling such as Connectors, 
MCP Server etc. [here](https://hub.docker.com/u/apache?page=1&search=iggy).
 
@@ -130,7 +130,7 @@ ulimits:
 Or when running with `docker run`:
 
 ```
-docker run --cap-add=SYS_NICE --security-opt seccomp=unconfined --ulimit 
memlock=-1:-1 -p 8090:8090 -e IGGY_TCP_ADDRESS=0.0.0.0:8090 -e 
IGGY_NODE_ADVERTISED_ADDRESS=localhost apache/iggy:edge
+docker run --cap-add=SYS_NICE --security-opt seccomp=unconfined --ulimit 
memlock=-1:-1 -p 8090:8090 -e IGGY_TCP_ADDRESS=0.0.0.0:8090 -e 
IGGY_NODE_ADVERTISED_ADDRESS=localhost apache/iggy:0.9.0
 ```
 
 ### Helm Charts
diff --git a/content/docs/introduction/getting-started.mdx 
b/content/docs/introduction/getting-started.mdx
index 645502cbf..102deb8bc 100644
--- a/content/docs/introduction/getting-started.mdx
+++ b/content/docs/introduction/getting-started.mdx
@@ -5,6 +5,8 @@ description: "A first program with the low-level Rust SDK: 
create a stream and t
 
 ## Before we start
 
+On Linux the server needs kernel 5.19 or newer. macOS has no kernel 
requirement. Under WSL2, run `wsl --update` first. See [System 
requirements](/docs/server/introduction#system-requirements) for the details.
+
 This tutorial uses the **low-level Rust SDK** to show how things work under 
the hood - creating streams, topics, sending and polling messages step by step. 
This is great for understanding the fundamentals.
 
 For real-world applications, you might typically prefer the **[high-level 
SDK](/docs/sdk/rust/high-level-sdk)**, which provides `IggyProducer` and 
`IggyConsumer` builders with auto-batching, consumer groups, offset management, 
reconnection, and retry logic out of the box. Check the [Stream 
Builder](/docs/sdk/rust/stream-builder) docs for the most ergonomic API.
@@ -21,7 +23,7 @@ The completed sample can be found in the 
[repository](https://github.com/apache/
 
 For our purpose, we will focus on the basic scenario in order to keep things 
simple. Before we begin implementing the consumer and producer apps, we need to 
start the Iggy streaming server.
 
-This guide targets server **0.9.0**. Once that release is published, you can 
use its [official Docker image](https://hub.docker.com/r/apache/iggy). During 
release preparation, use a matching `edge` build or the source build below:
+This guide targets server **0.9.0**. Use its [official Docker 
image](https://hub.docker.com/r/apache/iggy):
 
 ```bash
 docker run --rm \
@@ -95,7 +97,7 @@ From that point on, we will focus on implementing the message 
streaming between
 
 ## Building the producer
 
-We will begin with installing the Iggy client crate - use the SDK from the 
same source checkout as your server. With `iggy-sample` beside the `iggy` 
repository, execute `cargo add iggy --path ../iggy/core/sdk` in your terminal. 
Published SDK releases can expose different APIs. Next, install 
[tokio.rs](https://tokio.rs) dependency with `cargo add tokio --features 
macros,rt-multi-thread,time` as we will use the asynchronous runtime. 
Eventually, modify your `main.rs`, so it looks like this:
+We will begin with installing the Iggy client crate - execute `cargo add iggy` 
in your terminal. Next, install [tokio.rs](https://tokio.rs) dependency with 
`cargo add tokio --features macros,rt-multi-thread,time` as we will use the 
asynchronous runtime. Eventually, modify your `main.rs`, so it looks like this:
 
 ```rust
 use std::error::Error;
diff --git a/content/docs/introduction/meta.json 
b/content/docs/introduction/meta.json
index 8c36d433d..bc9eadbb9 100644
--- a/content/docs/introduction/meta.json
+++ b/content/docs/introduction/meta.json
@@ -1,4 +1,4 @@
 {
   "title": "Introduction",
-  "pages": ["about", "concepts", "architecture", "getting-started"]
+  "pages": ["about", "concepts", "architecture", "quickstart", 
"getting-started"]
 }
diff --git a/content/docs/introduction/quickstart.mdx 
b/content/docs/introduction/quickstart.mdx
new file mode 100644
index 000000000..06717b541
--- /dev/null
+++ b/content/docs/introduction/quickstart.mdx
@@ -0,0 +1,107 @@
+---
+title: Quickstart
+description: "Run the Iggy server and send and receive your first message with 
the Rust SDK, in one file."
+---
+
+This page gets a server running and a message sent and received, in one file. 
To build separate producer and consumer applications step by step, see [Getting 
started](/docs/introduction/getting-started). For other languages, see the [SDK 
section](/docs/sdk/introduction).
+
+On Linux the server needs kernel 5.19 or newer. macOS has no kernel 
requirement. See [System 
requirements](/docs/server/introduction#system-requirements).
+
+## Start the server
+
+```bash
+docker run --rm \
+  --cap-add=SYS_NICE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 \
+  -p 8090:8090 \
+  -e IGGY_TCP_ADDRESS=0.0.0.0:8090 \
+  -e IGGY_NODE_ADVERTISED_ADDRESS=localhost \
+  -e IGGY_ROOT_USERNAME=iggy -e IGGY_ROOT_PASSWORD=iggy \
+  apache/iggy:0.9.0
+```
+
+See [Docker & Helm](/docs/server/docker) for what each option does.
+
+## Send and receive a message
+
+Create a project and add the SDK and the async runtime:
+
+```bash
+cargo new iggy-quickstart
+cd iggy-quickstart
+cargo add iggy
+cargo add tokio --features macros,rt-multi-thread
+```
+
+Replace `src/main.rs` with:
+
+```rust
+use iggy::prelude::*;
+use std::str::FromStr;
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    let client = 
IggyClient::from_connection_string("iggy://iggy:[email protected]:8090")?;
+    client.connect().await?;
+
+    // Re-running this example is fine: an existing stream or topic is not an 
error.
+    match client.create_stream("my-stream").await {
+        Ok(_) | Err(IggyError::StreamNameAlreadyExists(_)) => {}
+        Err(e) => return Err(e.into()),
+    }
+    // Every topic knob rides `TopicCreateOptions`; fields left as `None`
+    // resolve against the server's defaults at admission.
+    match client
+        .create_topic(
+            &"my-stream".try_into()?,
+            "my-topic",
+            &TopicCreateOptions {
+                partitions_count: Some(1),
+                message_expiry: Some(IggyExpiry::NeverExpire),
+                ..TopicCreateOptions::default()
+            },
+        )
+        .await
+    {
+        Ok(_) | Err(IggyError::TopicNameAlreadyExists(_, _)) => {}
+        Err(e) => return Err(e.into()),
+    }
+
+    let msg = IggyMessage::from_str("hello world")?;
+    client
+        .send_messages(
+            &"my-stream".try_into()?,
+            &"my-topic".try_into()?,
+            &Partitioning::partition_id(0),
+            &mut [msg],
+        )
+        .await?;
+    println!("Message sent");
+
+    let polled = client
+        .poll_messages(
+            &"my-stream".try_into()?,
+            &"my-topic".try_into()?,
+            Some(0),
+            &Consumer::default(),
+            &PollingStrategy::next(),
+            10,
+            true,
+        )
+        .await?;
+
+    for message in &polled.messages {
+        let payload = std::str::from_utf8(&message.payload)?;
+        println!("Offset: {}, Payload: {}", message.header.offset, payload);
+    }
+
+    Ok(())
+}
+```
+
+Run it with `cargo run`. Partition IDs are **0-based**, so the first partition 
of a topic is partition `0`.
+
+## Next steps
+
+- Build a producer and a consumer as two applications: [Getting 
started](/docs/introduction/getting-started).
+- Use the producer and consumer builders with batching and offset management: 
[High-level SDK](/docs/sdk/rust/high-level-sdk).
+- Use another language: [SDK section](/docs/sdk/introduction).
diff --git a/content/docs/sdk/csharp/intro.mdx 
b/content/docs/sdk/csharp/intro.mdx
index 916b05c41..78d68244c 100644
--- a/content/docs/sdk/csharp/intro.mdx
+++ b/content/docs/sdk/csharp/intro.mdx
@@ -10,10 +10,10 @@ The SDK is built around the `IIggyClient` interface, which 
aggregates every feat
 ## Installation
 
 ```bash
-dotnet add package Apache.Iggy --version 0.9.0-edge.9
+dotnet add package Apache.Iggy --version 0.9.0
 ```
 
-The SDK targets .NET 8 and .NET 10 (`net8.0` and `net10.0`). Stable `0.8.0` 
uses TCP framing that predates the server 0.9.0 protocol. These pages prepare 
for server 0.9.0 and use the `0.9.0-edge.9` prerelease, which includes both 
topic durability options. When building from source, use the server and SDK 
from the same checkout.
+The SDK targets .NET 8 and .NET 10 (`net8.0` and `net10.0`). Version `0.9.0` 
matches the server 0.9.0 protocol and includes both topic durability options. 
Version `0.8.0` uses the older TCP framing. When building from source, use the 
server and SDK from the same checkout.
 
 To use the source SDK with these release-preparation examples, run from the 
Iggy checkout root:
 
diff --git a/content/docs/sdk/go/intro.mdx b/content/docs/sdk/go/intro.mdx
index 7a120bdf8..43fff6a4a 100644
--- a/content/docs/sdk/go/intro.mdx
+++ b/content/docs/sdk/go/intro.mdx
@@ -7,7 +7,7 @@ The Iggy Go SDK is a client library for interacting with the 
Iggy server from Go
 
 ## Server compatibility
 
-The SDK and the server must speak the same wire protocol. Tagged releases up 
to `v0.8.0` predate VSR (and the current API) and pair only with servers of the 
same era. The current SDK speaks VSR only. This page prepares for server 
`0.9.0`; use a compatible SDK release or edge version. When working from 
source, build the SDK and the server from the same repository checkout.
+The SDK and the server must speak the same wire protocol. Tagged releases up 
to `v0.8.0` predate VSR (and the current API) and pair only with servers of the 
same era. The current SDK speaks VSR only. This page targets server `0.9.0`; 
use a compatible SDK release or edge version. When working from source, build 
the SDK and the server from the same repository checkout.
 
 ## Installation
 
@@ -17,10 +17,10 @@ The current source requires Go 1.25 or newer. Run these 
commands from your appli
 go get github.com/apache/iggy/foreign/go
 ```
 
-`go get` without a version does not automatically select prereleases. For 
prerelease testing, pin a compatible VSR edge version, for example:
+To pin the release that matches server 0.9.0:
 
 ```bash
-go get github.com/apache/iggy/foreign/[email protected]
+go get github.com/apache/iggy/foreign/[email protected]
 ```
 
 For unreleased changes, use the local SDK replacement shown in the [repository 
examples](/docs/sdk/go/examples). A published edge tag need not contain every 
change in your checkout.
diff --git a/content/docs/sdk/introduction.mdx 
b/content/docs/sdk/introduction.mdx
index ee2a8a716..f81cec984 100644
--- a/content/docs/sdk/introduction.mdx
+++ b/content/docs/sdk/introduction.mdx
@@ -20,6 +20,22 @@ Python, C++, and PHP wrap the Rust SDK, so they inherit all 
transport protocols
 
 The Rust SDK is always the first to receive new features.
 
+## Server compatibility
+
+Server 0.9.0 introduced a new binary wire protocol shared by all SDKs, and the 
SDKs don't fall back to the older one. Use the SDK version that matches your 
server:
+
+| Component | Server 0.9.0 | Server 0.8.0 |
+|-----------|--------------|--------------|
+| Rust SDK (`iggy`) | `0.11.0` | `0.10.0` |
+| CLI (`iggy-cli`) | `0.14.0` | `0.13.0` |
+| Python SDK (`apache-iggy`) | `0.9.0` | `0.8.0` |
+| Java SDK (`org.apache.iggy:iggy`) | `0.9.0` | `0.8.0` |
+| Node.js SDK (`apache-iggy`) | `0.10.0` | `0.8.0` |
+| Go SDK (`github.com/apache/iggy/foreign/go`) | `v0.9.0` | `v0.8.0` |
+| C# SDK (`Apache.Iggy`) | `0.9.0` | `0.8.0` |
+
+The C++ and PHP SDKs are not published to a registry. Build them from the same 
source checkout as the server.
+
 ## Prerequisites
 
 The examples below use the `iggy`/`iggy` root credentials. For a new local 
development instance, with no `IGGY_ROOT_USERNAME` or `IGGY_ROOT_PASSWORD` 
overrides, use:
diff --git a/content/docs/sdk/java/examples.mdx 
b/content/docs/sdk/java/examples.mdx
index 441b8abc4..735c34802 100644
--- a/content/docs/sdk/java/examples.mdx
+++ b/content/docs/sdk/java/examples.mdx
@@ -7,7 +7,7 @@ Runnable examples live in the 
[examples/java](https://github.com/apache/iggy/tre
 
 ## Starting the server
 
-These examples prepare for server **0.9.0** and speak the VSR (Viewstamped 
Replication) wire protocol. Build the SDK and server from the same checkout for 
unreleased changes. The examples log in as `iggy`/`iggy`. From the repository 
root, start a disposable development server with no `IGGY_ROOT_USERNAME` or 
`IGGY_ROOT_PASSWORD` overrides:
+These examples target server **0.9.0** and speak the VSR (Viewstamped 
Replication) wire protocol. Build the SDK and server from the same checkout for 
unreleased changes. The examples log in as `iggy`/`iggy`. From the repository 
root, start a disposable development server with no `IGGY_ROOT_USERNAME` or 
`IGGY_ROOT_PASSWORD` overrides:
 
 ```bash
 cargo run --bin iggy-server -- --fresh --with-default-root-credentials
diff --git a/content/docs/sdk/java/intro.mdx b/content/docs/sdk/java/intro.mdx
index 884aae570..c954d5a46 100644
--- a/content/docs/sdk/java/intro.mdx
+++ b/content/docs/sdk/java/intro.mdx
@@ -7,30 +7,22 @@ The Iggy Java SDK is a client library for interacting with 
the Iggy server from
 
 ## Server compatibility
 
-This documentation prepares for server **0.9.0**. The TCP transport speaks the 
VSR (Viewstamped Replication) wire protocol. The released Java artifact `0.8.0` 
uses the older protocol; use the `0.9.0-SNAPSHOT` build below for the 
pre-release SDK. When working from source, build the SDK and the server from 
the same repository checkout.
+This documentation targets server **0.9.0** and SDK **0.9.0**. The TCP 
transport speaks the VSR (Viewstamped Replication) wire protocol. The Java 
artifact `0.8.0` uses the older protocol. When working from source, build the 
SDK and the server from the same repository checkout.
 
 ## Installation
 
-Use Java 17 or newer. These examples use the ASF snapshot repository until the 
`0.9.0` artifact is published to Maven Central.
+Use Java 17 or newer. The SDK is published to Maven Central.
 
 ### Maven
 
-Add the repository and dependency under the `project` element in `pom.xml`:
+Add the dependency under the `project` element in `pom.xml`:
 
 ```xml
-<repositories>
-    <repository>
-        <id>apache-snapshots</id>
-        
<url>https://repository.apache.org/content/repositories/snapshots/</url>
-        <snapshots><enabled>true</enabled></snapshots>
-    </repository>
-</repositories>
-
 <dependencies>
     <dependency>
         <groupId>org.apache.iggy</groupId>
         <artifactId>iggy</artifactId>
-        <version>0.9.0-SNAPSHOT</version>
+        <version>0.9.0</version>
     </dependency>
 </dependencies>
 ```
@@ -40,11 +32,10 @@ Add the repository and dependency under the `project` 
element in `pom.xml`:
 ```groovy
 repositories {
     mavenCentral()
-    maven { url = 
uri('https://repository.apache.org/content/repositories/snapshots/') }
 }
 
 dependencies {
-    implementation 'org.apache.iggy:iggy:0.9.0-SNAPSHOT'
+    implementation 'org.apache.iggy:iggy:0.9.0'
 }
 ```
 
diff --git a/content/docs/sdk/node/examples.mdx 
b/content/docs/sdk/node/examples.mdx
index a338baac0..51bf3c5f9 100644
--- a/content/docs/sdk/node/examples.mdx
+++ b/content/docs/sdk/node/examples.mdx
@@ -16,7 +16,7 @@ Examples are available in the 
[examples/node](https://github.com/apache/iggy/tre
 
 ## Running the examples
 
-These examples target server **0.9.0**. Start the server from the same source 
checkout; see [Getting started](/docs/introduction/getting-started) for 
prerequisites:
+These examples target server **0.9.0**. See [Getting 
started](/docs/introduction/getting-started) for prerequisites:
 
 ```bash
 cargo run --bin iggy-server -- --fresh --with-default-root-credentials
diff --git a/content/docs/sdk/node/intro.mdx b/content/docs/sdk/node/intro.mdx
index 717a947b8..5226b2eaa 100644
--- a/content/docs/sdk/node/intro.mdx
+++ b/content/docs/sdk/node/intro.mdx
@@ -5,12 +5,12 @@ description: "The Node.js and TypeScript SDK, from 
installation to keeping clien
 
 The Iggy Node.js SDK is a client library that allows you to interact with the 
Iggy API from your Node.js and TypeScript applications. It communicates with 
the Iggy server over TCP or TLS using the binary protocol. The package is 
available on [npm](https://www.npmjs.com/package/apache-iggy) and the source 
code can be found on 
[GitHub](https://github.com/apache/iggy/tree/master/foreign/node).
 
-These docs target server **0.9.0**. Use the Node SDK's `edge` package with 
server 0.9.0 or `edge`; the stable Node package 0.8.0 uses the older protocol. 
The current SDK speaks only the VSR wire protocol and doesn't fall back to 
older formats.
+These docs target server **0.9.0** and Node SDK **0.10.0**. The Node package 
0.8.0 uses the older protocol. The current SDK speaks only the VSR wire 
protocol and doesn't fall back to older formats.
 
 ## Installation
 
 ```bash
-npm install apache-iggy@edge
+npm install [email protected]
 ```
 
 ## Quick start
@@ -18,16 +18,15 @@ npm install apache-iggy@edge
 The samples below expect an Iggy server on `127.0.0.1:8090`. See [Getting 
started](/docs/introduction/getting-started) for the server prerequisites:
 
 ```bash
-# Development image for the 0.9.0 release
 docker run --rm \
   --cap-add=SYS_NICE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 \
   -p 8090:8090 \
   -e IGGY_TCP_ADDRESS=0.0.0.0:8090 \
   -e IGGY_NODE_ADVERTISED_ADDRESS=localhost \
   -e IGGY_ROOT_USERNAME=iggy -e IGGY_ROOT_PASSWORD=iggy \
-  apache/iggy:edge
+  apache/iggy:0.9.0
 
-# Or from the matching repository root
+# Or from a 0.9.0 source checkout
 cargo run --bin iggy-server -- --fresh --with-default-root-credentials
 ```
 
diff --git a/content/docs/sdk/php/intro.mdx b/content/docs/sdk/php/intro.mdx
index 37857efe2..6651e479e 100644
--- a/content/docs/sdk/php/intro.mdx
+++ b/content/docs/sdk/php/intro.mdx
@@ -34,7 +34,7 @@ On macOS the library is `libiggy_php.dylib`.
 
 ## Quick start
 
-The sample below targets Iggy 0.9.0 on `127.0.0.1:8090`. When testing 
unreleased SDK changes, build the server from the same source checkout:
+The sample below targets Iggy 0.9.0 on `127.0.0.1:8090`. Start the server:
 
 ```bash
 # Server 0.9.0
diff --git a/content/docs/sdk/python/examples.mdx 
b/content/docs/sdk/python/examples.mdx
index 7852bb261..f04f76f1f 100644
--- a/content/docs/sdk/python/examples.mdx
+++ b/content/docs/sdk/python/examples.mdx
@@ -11,7 +11,7 @@ Working examples are available in the 
[examples/python](https://github.com/apach
 
 ## Running the examples
 
-These examples target Iggy 0.9.0. For unreleased changes, use the server and 
Python SDK from the same source checkout:
+These examples target Iggy 0.9.0. Start the server:
 
 ```bash
 # Server 0.9.0
diff --git a/content/docs/server/docker.mdx b/content/docs/server/docker.mdx
index f8e7e9414..663385633 100644
--- a/content/docs/server/docker.mdx
+++ b/content/docs/server/docker.mdx
@@ -5,7 +5,7 @@ description: "Run the Iggy server from the official Docker 
images, and deploy it
 
 ## Docker
 
-You can easily run the Iggy server with Docker - the official images can be 
found [here](https://hub.docker.com/r/apache/iggy), use `docker pull 
apache/iggy:edge` while preparing for 0.9.0, or `apache/iggy:0.9.0` once 
released.
+You can easily run the Iggy server with Docker - the official images can be 
found [here](https://hub.docker.com/r/apache/iggy), use `docker pull 
apache/iggy:0.9.0`, or `apache/iggy:latest` for the newest stable release.
 
 These properties of the published image matter for deployment:
 
@@ -20,7 +20,7 @@ The examples use a permissive syscall profile and unlimited 
locked memory for de
 ```yaml
 services:
   iggy:
-    image: apache/iggy:edge
+    image: apache/iggy:0.9.0
     container_name: iggy
     restart: unless-stopped
     cap_add:
@@ -59,7 +59,7 @@ docker run -d --name iggy \
   -e IGGY_NODE_ADVERTISED_ADDRESS=localhost \
   -p 8090:8090 -p 3000:3000 \
   -v iggy:/app/local_data \
-  apache/iggy:edge
+  apache/iggy:0.9.0
 ```
 
 ### Why these capabilities?
@@ -106,12 +106,12 @@ Helm charts for Kubernetes deployment are available in 
the [repository](https://
 ### Quick start
 
 ```bash
-helm install iggy ./helm/charts/iggy --set server.image.tag=edge
+helm install iggy ./helm/charts/iggy --set server.image.tag=0.9.0
 ```
 
 ### Chart components
 
-- **Server Deployment** - runs `apache/iggy` with the pod security context the 
server needs: seccomp profile `Unconfined` (for `io_uring`) plus the `IPC_LOCK` 
capability (for memory locking). Listener addresses are set to `0.0.0.0` via 
`server.env`, and the data volume mounts at `/app/local_data`. The chart 
supplies `IGGY_NODE_ADVERTISED_ADDRESS` as the in-cluster Service DNS name; 
override it with `server.advertisedAddress` when clients arrive through a 
LoadBalancer or an Ingress. The s [...]
+- **Server Deployment** - runs `apache/iggy` with the pod security context the 
server needs: seccomp profile `Unconfined` (for `io_uring`) plus the `IPC_LOCK` 
capability (for memory locking). Listener addresses are set to `0.0.0.0` via 
`server.env`, and the data volume mounts at `/app/local_data`. The chart 
supplies `IGGY_NODE_ADVERTISED_ADDRESS` as the in-cluster Service DNS name; 
override it with `server.advertisedAddress` when clients arrive through a 
LoadBalancer or an Ingress. The s [...]
 - **Server Service** - exposes the `http` (3000), `quic` (8080/UDP), `tcp` 
(8090), and `websocket` (8092) ports.
 - **Web UI Deployment + Service** - a separate `apache/iggy-web-ui` deployment 
on port 3050, enabled by default (`ui.enabled`).
 - **Secret** - root user credentials from `server.users.root` (default 
`iggy`/`changeit`). Point `server.users.root.existingSecret.name` at your own 
Secret in production; `usernameKey` and `passwordKey` select its keys.
@@ -157,7 +157,7 @@ ui:
   enabled: true
   image:
     repository: apache/iggy-web-ui
-    tag: "edge"
+    tag: "0.4.0"
 
 podSecurityContext:
   seccompProfile:
@@ -174,5 +174,5 @@ resources: {}
 Save the excerpt as `my-values.yaml`, customize it for your environment, and 
deploy with:
 
 ```bash
-helm install iggy ./helm/charts/iggy -f my-values.yaml --set 
server.image.tag=edge
+helm install iggy ./helm/charts/iggy -f my-values.yaml --set 
server.image.tag=0.9.0
 ```
diff --git a/content/docs/server/introduction.mdx 
b/content/docs/server/introduction.mdx
index e8b87fe4d..f19c5aad9 100644
--- a/content/docs/server/introduction.mdx
+++ b/content/docs/server/introduction.mdx
@@ -7,7 +7,7 @@ Iggy server is the most important part of the system as it's 
responsible for han
 
 <ServerEcosystem />
 
-The releases are published to GitHub and can be found 
[here](https://github.com/apache/iggy/tags). The official Docker images can be 
found [here](https://hub.docker.com/r/apache/iggy), use `docker pull 
apache/iggy:edge` while preparing for 0.9.0, or `apache/iggy:0.9.0` once 
released.
+The releases are published to GitHub and can be found 
[here](https://github.com/apache/iggy/tags). The official Docker images can be 
found [here](https://hub.docker.com/r/apache/iggy), use `docker pull 
apache/iggy:0.9.0`, or `apache/iggy:latest` for the newest stable release.
 
 If you compile the source code in release mode, linking takes longer because 
[LTO](https://doc.rust-lang.org/cargo/reference/profiles.html#lto) is enabled 
in the `[profile.release]` section of the workspace 
[Cargo.toml](https://github.com/apache/iggy/blob/master/Cargo.toml).
 
diff --git a/content/docs/web_ui/start.mdx b/content/docs/web_ui/start.mdx
index 9d5e23afa..25fd07586 100644
--- a/content/docs/web_ui/start.mdx
+++ b/content/docs/web_ui/start.mdx
@@ -7,7 +7,7 @@ Iggy Web UI provides a comprehensive dashboard for Iggy server. 
It allows you to
 
 ![Web UI](/img/iggy_web_ui.png)
 
-These instructions target Iggy server 0.9.0. The container examples use `edge` 
while the release is being prepared. Use the matching source checkout for local 
builds.
+These instructions target Iggy server 0.9.0. Use a matching source checkout 
for local builds.
 
 ## How it connects
 
@@ -47,8 +47,8 @@ If the server is compiled without the `iggy-web` feature and 
`web_ui = true`, a
 Start an Iggy server with HTTP enabled, as shown in [Getting 
started](/docs/introduction/getting-started), then run the Web UI as a separate 
container:
 
 ```bash
-docker pull apache/iggy-web-ui:edge
-docker run -e PUBLIC_IGGY_API_URL=http://localhost:3000 -p 3050:3050 
apache/iggy-web-ui:edge
+docker pull apache/iggy-web-ui:0.4.0
+docker run -e PUBLIC_IGGY_API_URL=http://localhost:3000 -p 3050:3050 
apache/iggy-web-ui:0.4.0
 ```
 
 `PUBLIC_IGGY_API_URL` is consumed by the browser: if the Iggy server also runs 
in Docker, use the host-published HTTP port here, not the container's network 
alias.
@@ -91,7 +91,7 @@ Here's the full example of the `docker-compose.yml` file that 
starts the Iggy se
 ```yaml
 services:
   iggy:
-    image: apache/iggy:edge
+    image: apache/iggy:0.9.0
     container_name: iggy
     restart: unless-stopped
     cap_add:
@@ -125,7 +125,7 @@ services:
       - iggy:/app/local_data
 
   init-iggy:
-    image: apache/iggy:edge
+    image: apache/iggy:0.9.0
     container_name: init-iggy
     networks:
       - iggy
@@ -144,7 +144,7 @@ services:
       "
 
   iggy-web-ui:
-    image: apache/iggy-web-ui:edge
+    image: apache/iggy-web-ui:0.4.0
     container_name: iggy-web-ui
     restart: unless-stopped
     environment:
diff --git a/src/app/(home)/page.tsx b/src/app/(home)/page.tsx
index cb6fbba73..0b84c57b0 100644
--- a/src/app/(home)/page.tsx
+++ b/src/app/(home)/page.tsx
@@ -182,7 +182,7 @@ export default function HomePage() {
           {/* CTA Buttons */}
           <div className="mx-auto mt-14 flex max-w-3xl flex-col flex-wrap 
items-center justify-center gap-5 sm:flex-row">
             <Link
-              href="/docs/introduction/getting-started"
+              href="/docs/introduction/quickstart"
               className="inline-flex items-center rounded-lg bg-[#ff9103] px-8 
py-3.5 text-lg font-semibold text-[#0e0f11] transition-colors 
hover:bg-[#ffa703]"
             >
               Get Started
diff --git a/src/components/architecture-diagrams.tsx 
b/src/components/architecture-diagrams.tsx
index 58b7484a0..0e0bb7bac 100644
--- a/src/components/architecture-diagrams.tsx
+++ b/src/components/architecture-diagrams.tsx
@@ -1128,7 +1128,7 @@ export function DocsHero() {
   ];
 
   const links = [
-    { title: "Getting Started", href: "/docs/introduction/getting-started", 
desc: "Install, configure, send your first messages", icon: "M13 10V3L4 
14h7v7l9-11h-7z" },
+    { title: "Getting Started", href: "/docs/introduction/quickstart", desc: 
"Run the server and send your first message", icon: "M13 10V3L4 
14h7v7l9-11h-7z" },
     { title: "Architecture", href: "/docs/introduction/architecture", desc: 
"Thread-per-core, io_uring, partition ownership", icon: "M4 5a1 1 0 011-1h14a1 
1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zm0 8a1 1 0 011-1h6a1 1 0 011 1v2a1 1 
0 01-1 1H5a1 1 0 01-1-1v-2zm10 0a1 1 0 011-1h4a1 1 0 011 1v2a1 1 0 01-1 1h-4a1 
1 0 01-1-1v-2z" },
     { title: "Connectors", href: "/docs/connectors/introduction", desc: 
"Source & sink plugins for data integration", icon: "M8 7h12m0 0l-4-4m4 4l-4 
4m0 6H4m0 0l4 4m-4-4l4-4" },
     { title: "SDKs", href: "/docs/sdk/introduction", desc: "Rust, Python, 
Java, Go, Node.js, C#, C++, PHP", icon: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" 
},

Reply via email to