diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml
index 73d5e3575a39..ff98a8868852 100644
--- a/.github/workflows/documentation.yaml
+++ b/.github/workflows/documentation.yaml
@@ -34,8 +34,8 @@ jobs:
paths: "**/*.c, **/*.cpp, **/*.fbs, **/*.h, **/*.hpp, **/*.js, **/*.md, **/*.py, **/*.rs, **/*.sh, **/*.toml, **/*.txt, **/*.wgsl, **/*.yml"
# Avoid crates.io rate-limiting, skip changelog PR links (so many), and skip speculative links
- # https://rerun-io.github.io/rerun/dev/bench/ often 404:s for unknown reasons
- linksToSkip: "https://crates.io/crates/.*, https://github.com/rerun-io/rerun/pull/.*, .*?speculative-link, https://www.rerun.io/docs/getting-started/installing-viewer, https://www.rerun.io/docs/howto/arrow-cpp-install, https://rerun-io.github.io/rerun/dev/bench/"
+ # TODO(##4085): https://rerun-io.github.io/rerun/dev/bench/ often 404:s for unknown reasons
+ linksToSkip: "https://crates.io/crates/.*, https://github.com/rerun-io/rerun/pull/.*, .*?speculative-link, https://rerun-io.github.io/rerun/dev/bench/"
retry: true
retryErrors: true
retryErrorsCount: 5
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5685be39605f..4346dd7bb19b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,10 +10,21 @@
* Python: `pip install rerun-sdk`
* Rust: `cargo add rerun` and `cargo install rerun-cli`
-* Online demo:
+* Online demo:
### Overview & Highlights
* The C++ SDK is finally here!
+ ```cpp
+ #include
+
+ int main() {
+ const auto rec = rerun::RecordingStream("rerun_example_points3d_simple");
+ rec.spawn().exit_on_failure();
+
+ rec.log("points", rerun::Points3D({{0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}}));
+ }
+ ```
+
* Add an integrated getting-started guide into the viewer splash screen
* Add a new and improved `spawn` method in the Rust SDK
* Add support for NV12-encoded images [#3541](https://github.com/rerun-io/rerun/pull/3541) (thanks [@zrezke](https://github.com/zrezke)!)
diff --git a/README.md b/README.md
index 0383a55fbac9..9bb958096088 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
# Build time aware visualizations of multimodal data
-Use the Rerun SDK (available in Python, Rust, and soon C++) to log data like images, tensors, point clouds, and text. Logs are streamed to the Rerun Viewer for live visualization or to file for later use.
+Use the Rerun SDK (available in Python, Rust, and C++) to log data like images, tensors, point clouds, and text. Logs are streamed to the Rerun Viewer for live visualization or to file for later use.
```py
import rerun as rr # pip install rerun-sdk
@@ -46,7 +46,7 @@ rr.log("path/to/points", rr.Points3D(positions, colors=colors))
## Getting started
* **Python**: `pip install rerun-sdk` or on [`conda`](https://github.com/conda-forge/rerun-sdk-feedstock)
* **Rust**: `cargo add rerun`
-* **C / C++**: [Coming soon](https://github.com/rerun-io/rerun/issues/2919)
+* **C++**: [Guide](https://www.rerun.io/docs/getting-started/cpp)
### Rerun Viewer binary
Both the Python and Rust library can start the Rerun Viewer, but to stream log data over the network or load our `.rrd` data files you also need the `rerun` binary.
diff --git a/crates/re_types/definitions/rerun/datatypes/uint32.fbs b/crates/re_types/definitions/rerun/datatypes/uint32.fbs
index 4dc8d00ce9a8..a129265ff45c 100644
--- a/crates/re_types/definitions/rerun/datatypes/uint32.fbs
+++ b/crates/re_types/definitions/rerun/datatypes/uint32.fbs
@@ -11,8 +11,7 @@ struct UInt32 (
"attr.arrow.transparent",
"attr.rust.derive": "Copy, PartialEq, Eq, PartialOrd, Ord",
"attr.rust.override_crate": "re_types_core",
- "attr.rust.tuple_struct",
- "attr.docs.unreleased"
+ "attr.rust.tuple_struct"
) {
value: uint32 (order: 100);
}
diff --git a/docs/code-examples/roundtrips.py b/docs/code-examples/roundtrips.py
index ae49051e6dc0..79a663619ae6 100755
--- a/docs/code-examples/roundtrips.py
+++ b/docs/code-examples/roundtrips.py
@@ -21,7 +21,7 @@
# for one or more specific SDKs.
opt_out_run = {
"any_values": ["cpp", "rust"], # Not yet implemented
- "custom_data": ["cpp"], # TODO(#2919): Not yet implemented in C++
+ "custom_data": ["cpp"], # TODO(emilk): Not yet implemented in C++
"extra_values": ["cpp", "rust"], # Missing examples
"image_advanced": ["cpp", "rust"], # Missing examples
"log_line": ["cpp", "rust", "py"], # Not a complete example -- just a single log line
diff --git a/docs/content/getting-started/logging-cpp.md b/docs/content/getting-started/logging-cpp.md
index 3c802d14046d..2a20ceb8f285 100644
--- a/docs/content/getting-started/logging-cpp.md
+++ b/docs/content/getting-started/logging-cpp.md
@@ -13,7 +13,7 @@ In a few lines of code, we'll go from a blank sheet to something you don't see e
This guide aims to go wide instead of deep.
There are links to other doc pages where you can learn more about specific topics.
-At any time, you can checkout the complete code listing for this tutorial [here](https://github.com/rerun-io/rerun/tree/latest/examples/cpp/dna/main.cpp?speculative-link) to better keep track of the overall picture.
+At any time, you can checkout the complete code listing for this tutorial [here](https://github.com/rerun-io/rerun/tree/latest/examples/cpp/dna/main.cpp) to better keep track of the overall picture.
To build the example from the repository, run:
```bash
diff --git a/docs/content/getting-started/logging-rust.md b/docs/content/getting-started/logging-rust.md
index d4b5b538180d..c8eb045fd986 100644
--- a/docs/content/getting-started/logging-rust.md
+++ b/docs/content/getting-started/logging-rust.md
@@ -333,7 +333,7 @@ You can also save a recording (or a portion of it) as you're visualizing it, dir
### Spawning the Viewer from your process
-If the Rerun Viewer is [installed](installing-viewer.md) and available in your `PATH`, you can use [`RecordingStream::spawn`](https://docs.rs/rerun/latest/rerun/struct.RecordingStream.html#method.spawn?speculative-link) to automatically start a viewer in a new process and connect to it over TCP.
+If the Rerun Viewer is [installed](installing-viewer.md) and available in your `PATH`, you can use [`RecordingStream::spawn`](https://docs.rs/rerun/latest/rerun/struct.RecordingStream.html#method.spawn) to automatically start a viewer in a new process and connect to it over TCP.
If an external viewer was already running, `spawn` will connect to that one instead of spawning a new one.
```rust
diff --git a/docs/content/howto/cpp-custom-component-batch-adapter.md b/docs/content/howto/cpp-custom-component-batch-adapter.md
index ffa01c10c02f..4c2e791d338b 100644
--- a/docs/content/howto/cpp-custom-component-batch-adapter.md
+++ b/docs/content/howto/cpp-custom-component-batch-adapter.md
@@ -1,6 +1,5 @@
---
title: C++ Custom Component Batch Adapter
order: 7
-# TODO(#3962): update link
-redirect: https://github.com/rerun-io/rerun/blob/6b2cf6dbf29124a10f2fc909e02f5fee7cbd0cbe/examples/cpp/custom_component_adapter/README.md
+redirect: https://github.com/rerun-io/rerun/blob/latest/examples/cpp/custom_component_adapter/README.md
---
diff --git a/docs/content/reference/sdk-operating-modes.md b/docs/content/reference/sdk-operating-modes.md
index 570d03654fcc..e37a981fc4ad 100644
--- a/docs/content/reference/sdk-operating-modes.md
+++ b/docs/content/reference/sdk-operating-modes.md
@@ -24,7 +24,7 @@ Call [`rr.spawn`](https://ref.rerun.io/docs/python/stable/common/initialization_
#### Rust
-[`RecordingStream::spawn`](https://docs.rs/rerun/latest/rerun/struct.RecordingStream.html#method.spawn?speculative-link) spawns a new Rerun Viewer process using an executable available in your PATH, then streams all the data to it via TCP. If an external viewer was already running, `spawn` will connect to that one instead of spawning a new one.
+[`RecordingStream::spawn`](https://docs.rs/rerun/latest/rerun/struct.RecordingStream.html#method.spawn) spawns a new Rerun Viewer process using an executable available in your PATH, then streams all the data to it via TCP. If an external viewer was already running, `spawn` will connect to that one instead of spawning a new one.
#### C++
diff --git a/docs/content/reference/types/datatypes/uint32.md b/docs/content/reference/types/datatypes/uint32.md
index ae0546514d3a..29656ee2e286 100644
--- a/docs/content/reference/types/datatypes/uint32.md
+++ b/docs/content/reference/types/datatypes/uint32.md
@@ -6,7 +6,7 @@ A 32bit unsigned integer.
## Links
- * 🐍 [Python API docs for `UInt32`](https://ref.rerun.io/docs/python/stable/common/datatypes?speculative-link#rerun.datatypes.UInt32)
- * 🦀 [Rust API docs for `UInt32`](https://docs.rs/rerun/latest/rerun/datatypes/struct.UInt32.html?speculative-link)
+ * 🐍 [Python API docs for `UInt32`](https://ref.rerun.io/docs/python/stable/common/datatypes#rerun.datatypes.UInt32)
+ * 🦀 [Rust API docs for `UInt32`](https://docs.rs/rerun/latest/rerun/datatypes/struct.UInt32.html)
diff --git a/examples/cpp/README.md b/examples/cpp/README.md
index 3c05967b881e..fe32b388a579 100644
--- a/examples/cpp/README.md
+++ b/examples/cpp/README.md
@@ -1,6 +1,6 @@
# Rerun C++ Examples
The simplest example is [`minimal`](minimal/main.cpp). You may want to start there
-using the accompanying [`C++ Quick Start`](https://www.rerun.io/docs/getting-started/cpp?speculative-link) guide.
+using the accompanying [`C++ Quick Start`](https://www.rerun.io/docs/getting-started/cpp) guide.
## Build all examples
The CMake target `examples` is a convenient alias for building all CMake examples in one go.
diff --git a/examples/cpp/minimal/README.md b/examples/cpp/minimal/README.md
index 673c637f68d1..e5455628a2fb 100644
--- a/examples/cpp/minimal/README.md
+++ b/examples/cpp/minimal/README.md
@@ -15,8 +15,7 @@ thumbnail: https://static.rerun.io/minimal/0e47ac513ab25d56cf2b493128097d499a07e
The simplest example of how to use Rerun, showing how to log a point cloud.
-# TODO(#3962): Update Link to C++
-This is part of the [Quick Start guide](https://www.rerun.io/docs/getting-started/rust).
+This is part of the [Quick Start guide](https://www.rerun.io/docs/getting-started/cpp).
To build it from a checkout of the repository (requires a Rust toolchain):
```bash
diff --git a/rerun_cpp/README.md b/rerun_cpp/README.md
index 0dedb8657384..4a10dac89c23 100644
--- a/rerun_cpp/README.md
+++ b/rerun_cpp/README.md
@@ -1,6 +1,6 @@
# Rerun C++ SDK
-Read our [getting-started guide](https://www.rerun.io/docs/getting-started/cpp?speculative-link) for information on how to use the Rerun C++ SDK.
+Read our [getting-started guide](https://www.rerun.io/docs/getting-started/cpp) for information on how to use the Rerun C++ SDK.
## Development
### Requirements
diff --git a/rerun_cpp/src/rerun.hpp b/rerun_cpp/src/rerun.hpp
index e5a313fc58d8..378e5b74107c 100644
--- a/rerun_cpp/src/rerun.hpp
+++ b/rerun_cpp/src/rerun.hpp
@@ -1,6 +1,6 @@
// The Rerun C++ SDK.
//
-// For more information, read our [getting-started guide](https://www.rerun.io/docs/getting-started/cpp?speculative-link)
+// For more information, read our [getting-started guide](https://www.rerun.io/docs/getting-started/cpp)
// or visit .
#pragma once