Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0589f2c
perf(platforms): Load platform list client-side instead of per page (…
mydea Oct 15, 2026
136020d
docs(python): Update integration minimum versions for SDK 3.0 (#19853)
ericapisani Oct 15, 2026
b8e03d4
docs(dotnet): Use the OTLP exporter in the Azure Functions guide (#19…
jamescrosswell Oct 15, 2026
78e811d
Bump API schema to {"messag (#19999)
sentry-api-schema-updater[bot] Oct 15, 2026
82ab95f
Bump API schema to 2ae04130 (#20000)
sentry-api-schema-updater[bot] Oct 15, 2026
f3a5dcc
Bump API schema to 2ac86ef1 (#20005)
sentry-api-schema-updater[bot] Oct 15, 2026
84cdbd0
Bump API schema to 8da67f72 (#20006)
sentry-api-schema-updater[bot] Oct 15, 2026
6e45c33
ci(api-schema): Authenticate and validate the schema SHA before bumpi…
sentry-junior[bot] Oct 15, 2026
caef8cf
Bump API schema to 537966de (#20007)
sentry-api-schema-updater[bot] Oct 15, 2026
287a75a
Bump API schema to b03c02fb (#20008)
sentry-api-schema-updater[bot] Oct 15, 2026
5612a13
Bump API schema to 48eb3714 (#20009)
sentry-api-schema-updater[bot] Oct 15, 2026
8ab1e1f
docs(java): Note that direct Logs and Metrics APIs are ungated since …
sentry-junior[bot] Oct 15, 2026
8a682ff
Bump API schema to 74806daa (#20018)
sentry-api-schema-updater[bot] Oct 15, 2026
568c26b
Bump API schema to 6dac846f (#20019)
sentry-api-schema-updater[bot] Oct 15, 2026
938419a
docs(android): Harmonize Android Navigation and Jetpack Compose docs …
0xadam-brown Oct 16, 2026
af5631f
Bump API schema to c1046d1c (#20024)
sentry-api-schema-updater[bot] Oct 16, 2026
e10066a
Bump API schema to 323c73b4 (#20025)
sentry-api-schema-updater[bot] Oct 16, 2026
82c3e79
docs(unreal): Match options page and settings paths to regrouped plug…
tustanivsky Oct 16, 2026
664acb9
docs(javascript): Note that generateObject and streamObject aren't tr…
RulaKhaled Oct 16, 2026
82a2cf7
docs(dart): Use SENTRY_AUTH_TOKEN env var for Dart Plugin auth token …
sentry-junior[bot] Oct 16, 2026
d4afd8d
docs(dashboards): Document threshold interval scaling for widgets (#1…
sentry-junior[bot] Oct 16, 2026
f00a2b8
Bump API schema to 7e86985c (#20036)
sentry-api-schema-updater[bot] Oct 16, 2026
e788f37
Bump API schema to 54bf83fc (#20038)
sentry-api-schema-updater[bot] Oct 16, 2026
f0e499c
Bump API schema to 7fb093da (#20039)
sentry-api-schema-updater[bot] Oct 16, 2026
2df7e79
Bump API schema to de3e9904 (#20040)
sentry-api-schema-updater[bot] Oct 16, 2026
da70c58
Bump API schema to 75ec634c (#20041)
sentry-api-schema-updater[bot] Oct 16, 2026
8398c8e
Bump API schema to f8bf85ea (#20042)
sentry-api-schema-updater[bot] Oct 16, 2026
d9ffbfa
Bump API schema to ac36e531 (#20043)
sentry-api-schema-updater[bot] Oct 16, 2026
9a5d3be
Bump API schema to fc470a5b (#20044)
sentry-api-schema-updater[bot] Oct 16, 2026
66f0fd9
Bump API schema to 1f096498 (#20045)
sentry-api-schema-updater[bot] Oct 16, 2026
09642c2
Bump API schema to 81b0732b (#20046)
sentry-api-schema-updater[bot] Oct 16, 2026
c440878
Bump API schema to 7c51e556 (#20048)
sentry-api-schema-updater[bot] Oct 16, 2026
290554a
Bump API schema to b1eac6b0 (#20049)
sentry-api-schema-updater[bot] Oct 16, 2026
6792002
feat(python): Add 2.x to 3.x SDK migration guide (#19969)
sentrivana Oct 19, 2026
ce17701
feat(upload): Resumable uploads (#19923)
jjbayer Oct 19, 2026
2c275d5
feat(upload): Mention feature flag (#20071)
jjbayer Oct 19, 2026
a9167ef
Fix trailing slashes in links (#19907)
mydea Oct 19, 2026
6478a50
docs(attachments): Flatten flame graph node references (#20073)
philprime Oct 19, 2026
4da5537
okhttp spring autoconfig documentation (#19555)
lbloder Oct 19, 2026
7eb49c0
feat(python): Add versioned span streaming pages for 3.0 (#19831)
sentrivana Oct 19, 2026
39005e3
feat(upload): Table of common error codes (#20072)
jjbayer Oct 19, 2026
f92f029
docs(sveltekit): Document the buildTimeInstrumentation option (#20078)
s1gr1d Oct 19, 2026
bce878c
Bump API schema to 2adfc005 (#20087)
sentry-api-schema-updater[bot] Oct 19, 2026
bedeeab
Bump API schema to 76ed6d40 (#20088)
sentry-api-schema-updater[bot] Oct 19, 2026
ceba0db
Bump API schema to 0dbafd12 (#20090)
sentry-api-schema-updater[bot] Oct 19, 2026
1e9e04d
docs(tracing): Document new trace waterfall features (#19993)
nsdeschenes Oct 19, 2026
aa4eaa2
Bump API schema to ca7b22fe (#20091)
sentry-api-schema-updater[bot] Oct 19, 2026
1d88487
docs(cloudflare): Document withSentry from @sentry/nextjs/cloudflare …
JPeer264 Oct 19, 2026
99854f0
Bump API schema to 527d8368 (#20096)
sentry-api-schema-updater[bot] Oct 19, 2026
8bc1c16
feat(home): Add Pi Durable to agent integrations (#20077)
cleptric Oct 19, 2026
5e3af62
fix(combinators): Add the new combinator syntax (#19953)
wmak Oct 19, 2026
02a3256
ref(docs): Remove SplitLayout component and its remaining wrappers (#…
sentry-junior[bot] Oct 19, 2026
50999f2
Bump API schema to c8e163b2 (#20100)
sentry-api-schema-updater[bot] Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .claude/skills/technical-docs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,6 @@ Good best practice:

## Sentry Docs Specific Patterns

### SplitLayout Usage

Use `<SplitLayout>` for side-by-side text/code when:
- The code directly illustrates the text
- Both are needed to understand the concept

Don't use when:
- Showing a directory structure (use plain code block)
- The text is just "here's an example" (just show the code)

### PlatformLink Usage

Link to related docs rather than repeating content:
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/bump-api-schema-sha.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,17 @@ jobs:

filepath="src/build/resolveOpenAPI.ts"

sha="$(curl -sSl -H 'Accept: application/vnd.github.VERSION.sha' 'https://api.github.com/repos/getsentry/sentry-api-schema/commits/main')"
# Authenticate to avoid the low unauthenticated rate limit, and fail on
# HTTP errors so an error body never gets written in as the SHA.
sha="$(curl -sSL --fail \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H 'Accept: application/vnd.github.VERSION.sha' \
'https://api.github.com/repos/getsentry/sentry-api-schema/commits/main')"

if [[ ! "$sha" =~ ^[0-9a-f]{40}$ ]]; then
echo "::error::Expected a 40-character commit SHA from the GitHub API, got: $sha"
exit 1
fi
echo "Latest commit to 'getsentry/sentry-api-schema' is $sha"

sed -i -e "s|^const SENTRY_API_SCHEMA_SHA =.*$|const SENTRY_API_SCHEMA_SHA = '$sha';|g" "$filepath"
Expand Down
2 changes: 1 addition & 1 deletion app/not-found.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default function NotFound() {
{isDeveloperDocs ? (
<DevelopDocsHeader pathname="/" searchPlatforms={[]} />
) : (
<Header pathname="/" searchPlatforms={[]} noSearch platforms={[]} />
<Header pathname="/" searchPlatforms={[]} noSearch />
)}
<main id="main" className="px-8 pt-28">
<h1 className="font-medium text-3xl mb-4">Page Not Found</h1>
Expand Down
10 changes: 10 additions & 0 deletions app/platforms.json/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {extractPlatforms, getDocsRootNode} from 'sentry-docs/docTree';

// Emitted as a static file at build time. Client components load this list
// lazily instead of every page embedding it.
export const dynamic = 'force-static';

export async function GET() {
const rootNode = await getDocsRootNode();
return Response.json(extractPlatforms(rootNode));
}
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ When using `Crashpad` as the crash-capturing backend in the Native SDK, the file

SDKs **MAY** attach a `flamegraph.json` file containing aggregated call trees, such as those captured for application hangs. The attachment **MUST** use `attachment_type: "event.flamegraph"` and `content_type: "application/json"`.

The format reuses profiling frame objects and debug metadata to support symbolication. Tree nodes describe aggregated call paths and sample counts.
The format reuses profiling frame objects and debug metadata to support symbolication. A flat node table describes aggregated call paths and sample counts. Child references use node indices to avoid deeply nested JSON and allow iterative processing without recursive traversal.

#### Flame Graph Attachment Transport

Expand All @@ -190,13 +190,14 @@ Event context such as release, environment, SDK identity, device, OS, and hang d

#### Flame Graph Payload

The top-level object describes one collection of call trees and their shared frame table.
The top-level object describes one collection of call trees and their shared frame and node tables.

| Field | Type | Requirement | Description |
| ------------ | ---------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `version` | String | **REQUIRED** | `"1"` for this wire format. |
| `platform` | String | **REQUIRED** | Existing Sentry platform identifier. Used as the default platform for frames. Native Apple frames use `"cocoa"`. |
| `frames` | Array of frame objects | **REQUIRED** | Non-empty frame table using the same frame objects as a [V2 profile chunk](/sdk/telemetry/profiles/#profile-data). |
| `nodes` | Array of node objects | **REQUIRED** | Non-empty flat node table. Child and root references are zero-based indices into this array. |
| `trees` | Array of tree objects | **REQUIRED** | Non-empty collection of independent call trees. |
| `debug_meta` | Debug Meta object | **REQUIRED** for native frames with known images | Existing debug metadata for the process that produced the diagnostic. See [Native Symbolication](#flame-graph-native-symbolication). |

Expand All @@ -216,21 +217,23 @@ A tree object groups root nodes that share the same sample population. Each obje

| Field | Type | Requirement | Description |
| ------------------- | -------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| `roots` | Array of nodes | **REQUIRED** | Non-empty forest of call paths. Roots are the oldest retained callers. |
| `roots` | Array of integers | **REQUIRED** | Non-empty list of zero-based indices into `nodes`. Roots are the oldest retained callers. |
| `thread_id` | String | **OPTIONAL** | Actual source thread identifier, if known. Uses the string representation used by profiling samples. |
| `thread_attributed` | Boolean | **OPTIONAL** | Whether the diagnostic source identifies this tree's thread as responsible for the reported issue, such as a hang. Omit when unknown. |

Each tree is an independent sample population. Producers **MUST** include `thread_id` only when the source provides a thread identifier.

##### Flame Graph Nodes

Each node describes one frame occurrence in a call path.
Each entry in the top-level `nodes` array describes one frame occurrence in a call path.

| Field | Type | Requirement | Description |
| -------------- | -------------- | ------------ | -------------------------------------------------------------------------------- |
| `frame_id` | Integer | **REQUIRED** | Zero-based index into `frames`. **MUST** be between `0` and `frames.length - 1`. |
| `sample_count` | Integer | **REQUIRED** | Positive inclusive count of samples containing this call-path prefix. |
| `children` | Array of nodes | **OPTIONAL** | Direct callees. Defaults to `[]` when omitted. |
| `children` | Array of integers | **OPTIONAL** | Zero-based indices into `nodes` for direct callees. Defaults to `[]` when omitted. |

Root and child indices **MUST** be between `0` and `nodes.length - 1`. Node references **MUST** form independent trees without cycles or shared nodes. Recursive calls use separate nodes that **MAY** reference the same `frame_id`.

Paths **MUST** run from caller to callee. Each root-to-leaf path is one observed call path, potentially ending before the true bottom or top of the stack if the source was incomplete.

Expand All @@ -248,13 +251,13 @@ Frame addresses **MUST** follow the existing [`instruction_addr` and `addr_mode`

Symbolication **MUST** preserve captured addresses, addressing modes, and debug images. Resolved function names and source locations **MUST** populate the standard profiling frame fields. Unresolved frames **MUST** retain their original data.

Consumers **MUST** track symbolication state and skip symbolication for already-processed payloads. If symbolication is rerun, it **MUST** start from the original, unexpanded frames and trees.
Consumers **MUST** track symbolication state and skip symbolication for already-processed payloads. If symbolication is rerun, it **MUST** start from the original, unexpanded frames, nodes, and trees.

##### Flame Graph Inline Frames

Compiler-inlined functions share a physical stack frame with their caller. [Native symbolication](/ingestion/symbolicator/#native-symbolication) can recover these functions as separate logical frames.

A processor that expands inline frames **MUST** replace each affected node occurrence with a caller-to-callee chain, assign the original `sample_count` to every node in that chain, and attach the original children to its innermost node. The expansion **MUST** preserve the tree's total sample count. Frame-table changes **MUST** update all affected indices.
A processor that expands inline frames **MUST** replace each affected node occurrence with a caller-to-callee chain, assign the original `sample_count` to every node in that chain, and attach the original children to its innermost node. The expansion **MUST** preserve the tree's total sample count. Frame-table changes **MUST** update all affected `frame_id` values. Node-table changes **MUST** update all affected `roots` and `children` indices.

#### Flame Graph Example

Expand Down Expand Up @@ -290,21 +293,21 @@ This example contains 10 samples. Six continue from `main` into `process` and fo
"lineno": 42
}
],
"nodes": [
{
"frame_id": 0,
"sample_count": 10,
"children": [1]
},
{
"frame_id": 1,
"sample_count": 6
}
],
"trees": [
{
"thread_attributed": true,
"roots": [
{
"frame_id": 0,
"sample_count": 10,
"children": [
{
"frame_id": 1,
"sample_count": 6
}
]
}
]
"roots": [0]
}
]
}
Expand Down Expand Up @@ -349,46 +352,7 @@ Attachment placeholders use item type `"attachment"` with content type `"applica

SDKs **MUST** send placeholders in the same envelope as the event the file is attached to.

**Workflow:**

1. If an attachment is larger than ~100 MiB, upload it to the [TUS](https://tus.io/protocols/resumable-upload#creation-with-upload)-conformant upload endpoint:
1. Create the upload:

```shell
curl -X POST https://o0.ingest.sentry.io/api/0/upload/ \
--header "Tus-Resumable: 1.0.0" \
--header "Upload-Length: ${FILE_SIZE}" \
--header "Upload-Metadata: sentry $(echo -n '{"attachment_type":"event.attachment"}' | base64)"
```

The `Upload-Metadata` header follows the [TUS metadata format](https://tus.io/protocols/resumable-upload#upload-metadata). Sentry recognizes a single key, `sentry`, the value of which **MUST** be the Base64 encoding of a UTF-8 JSON object describing the attachment:

```json
{
"attachment_type": "event.attachment"
}
```

| Field | Type | Required | Description |
| ----------------- | ------ | ------------ | ------------------------------------------------------------------ |
| `attachment_type` | String | **REQUIRED** | One of the values listed in [Attachment Types](#attachment-types). |

1. Get the location response header:
```
HTTP/1.1 201 Created
Location: https://o0.ingest.sentry.io/api/0/upload/24e533e02ec3bc40c387f1a0e460e216/
Tus-Resumable: 1.0.0
```
1. Upload the file:
```shell
curl -X PATCH https://o0.ingest.sentry.io/api/0/upload/24e533e02ec3bc40c387f1a0e460e216/ \
--header "Tus-Resumable: 1.0.0" \
--header "Content-Type: application/offset+octet-stream" \
--header "Upload-Offset: 0" \
--data @myfile.log
```

1. Upon successful upload, attach a placeholder item to the event envelope, using the `Location` header from the upload response.
See [Resumable Uploads](/sdk/telemetry/attachments/upload/) for a detailed guide on how to obtain an attachment placeholder.

</SpecSection>

Expand Down
Loading
Loading