diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd4a3c8..b9a8493 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+
+# [v0.31.0](https://github.com/aDotInTheVoid/rustdoc-types/releases/tag/v0.31.0) - 2024-10-13
+
+**Breaking Change**: `Id` is now a `u32` instead of a `String` ([rust#130078](https://github.com/rust-lang/rust/pull/130078))
+
+- Format Version: 35
+- Upstream Commit: [`05c0591321f9956c1f0df4785d3737f40cffb598`](https://github.com/rust-lang/rust/commit/05c0591321f9956c1f0df4785d3737f40cffb598)
+- Diff: [v0.30.0...v0.31.0](https://github.com/aDotInTheVoid/rustdoc-types/compare/v0.30.0...v0.31.0)
+
# [v0.30.0](https://github.com/aDotInTheVoid/rustdoc-types/releases/tag/v0.30.0) - 2024-09-13
diff --git a/COMMIT.txt b/COMMIT.txt
index 9f5c7d2..00a6688 100644
--- a/COMMIT.txt
+++ b/COMMIT.txt
@@ -1 +1 @@
-f2696ab4d3095bb6ad6197e55855ebdf00f50b80
+05c0591321f9956c1f0df4785d3737f40cffb598
diff --git a/Cargo.toml b/Cargo.toml
index 0e1c40a..75a5d02 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "rustdoc-types"
-version = "0.30.0"
+version = "0.31.0"
edition = "2018"
license = "MIT OR Apache-2.0"
description = "Types for rustdoc's json output"
diff --git a/src/lib.rs b/src/lib.rs
index cfdcc04..04345a6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize};
/// This integer is incremented with every breaking change to the API,
/// and is returned along with the JSON blob as [`Crate::format_version`].
/// Consuming code should assert that this value matches the format version(s) that it supports.
-pub const FORMAT_VERSION: u32 = 34;
+pub const FORMAT_VERSION: u32 = 35;
/// The root of the emitted JSON blob.
///
@@ -296,9 +296,9 @@ pub enum AssocItemConstraintKind {
/// Rustdoc makes no guarantees about the inner value of Id's. Applications
/// should treat them as opaque keys to lookup items, and avoid attempting
/// to parse them, or otherwise depend on any implementation details.
-#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
+#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
// FIXME(aDotInTheVoid): Consider making this non-public in rustdoc-types.
-pub struct Id(pub String);
+pub struct Id(pub u32);
/// The fundamental kind of an item. Unlike [`ItemEnum`], this does not carry any aditional info.
///
@@ -677,7 +677,7 @@ pub struct FunctionHeader {
/// on unwinding for more info.
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Abi {
- // We only have a concrete listing here for stable ABI's because their are so many
+ // We only have a concrete listing here for stable ABI's because there are so many
// See rustc_ast_passes::feature_gate::PostExpansionVisitor::check_abi for the list
/// The default ABI, but that can also be written explicitly with `extern "Rust"`.
Rust,
@@ -1168,7 +1168,7 @@ pub struct ProcMacro {
pub kind: MacroKind,
/// Helper attributes defined by a macro to be used inside it.
///
- /// Defined only for attribute & derive macros.
+ /// Defined only for derive macros.
///
/// E.g. the [`Default`] derive macro defines a `#[default]` helper attribute so that one can
/// do: