Skip to content

Commit 959edf2

Browse files
docs(develop-docs): Add SDK deprecation playbook (#17137)
## DESCRIBE YOUR PR Add a new "Deprecating an SDK" playbook to the SDK Lifecycle section of develop-docs. This covers the full lifecycle of deprecating an entire SDK — from impact analysis through repo archival and post-EOL documentation cleanup. The playbook is organized into 3 phases with 13 steps: - **Phase 1: Build the Case** — Assess industry/usage, quantify revenue impact, identify migration paths, get approval - **Phase 2: Execute the Deprecation** — Final release, public announcement, close backlog, update README/docs, deprecate on package registry, archive repo, notify stakeholders - **Phase 3: Post-EOL Cleanup** — Documentation cleanup (noindex, draft, redirects) Derived from real-world Cordova and Xamarin deprecation processes, incorporating lessons learned from both. Also updates 5 existing pages with cross-links: - `api-architecture.mdx` — Links the existing one-liner about SDK deprecation to the new playbook - `sdk-lifecycle/index.mdx` — Updated description - `breaking-changes.mdx`, `dropping-platform-support.mdx`, `aligning-cross-sdk-changes.mdx` — Added to Related resources **Note:** Some files have whitespace-only changes (blank lines added before bullet lists). These are Prettier auto-formatting corrections applied when the files were edited — not manual changes. ## IS YOUR CHANGE URGENT? - [ ] Urgent deadline (GA date, etc.): - [ ] Other deadline: - [x] None: Not urgent, can wait up to 1 week+ ## PRE-MERGE CHECKLIST - [ ] Checked Vercel preview for correctness, including links - [ ] PR was reviewed and approved by any necessary SMEs (subject matter experts) - [ ] PR was reviewed and approved by a member of the [Sentry docs team](https://github.com/orgs/getsentry/teams/docs) --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4291363 commit 959edf2

6 files changed

Lines changed: 180 additions & 2 deletions

File tree

develop-docs/sdk/getting-started/playbooks/coordination/aligning-cross-sdk-changes.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ spec_changelog:
2323
This playbook guides SDK teams through coordinating changes that affect multiple Sentry SDKs. It covers proposal writing, cross-team review, semantic conventions coordination, sequencing decisions, progress tracking, and documentation coordination. By following these steps, multi-SDK rollouts will be coordinated, predictable, and minimize surprises for users.
2424

2525
Related resources:
26+
2627
- [Cross-SDK Coordination standard](/sdk/getting-started/standards/coordination-maintenance#cross-sdk-coordination) — coordination requirements and process
2728
- [Managing Linear Projects](/sdk/getting-started/playbooks/coordination/managing-linear-projects) — how to set up and run each per-SDK project created in step 5
2829
- [Planning and Scoping standard](/sdk/getting-started/standards/planning-scoping) — design-first gate, risk identification, and project naming requirements
2930
- [Semantic conventions process](/sdk/getting-started/standards/api-architecture#semantic-conventions-process) — process for new attributes
3031
- [Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) — related playbook for API changes
32+
- [Deprecating an SDK](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-sdk) — related playbook for full SDK deprecation
3133

3234
---
3335

@@ -36,6 +38,7 @@ Related resources:
3638
#### 1. Write a proposal
3739

3840
You **MUST** create an RFC or Linear initiative describing:
41+
3942
- What's changing and why
4043
- Which SDKs are affected
4144
- Proposed rollout order
@@ -47,6 +50,7 @@ An RFC or initiative proposal is a design document and triggers the [Design-Firs
4750
#### 2. Allow cross-SDK review period
4851

4952
You **MUST** allow a minimum of 1 week for all affected SDK teams to review and comment on the proposal. This ensures all teams have time to:
53+
5054
- Assess implementation complexity for their SDK
5155
- Identify platform-specific concerns
5256
- Propose alternative approaches if needed
@@ -62,12 +66,14 @@ After the conventions PR is approved, you **MUST** wait 3 business days before i
6266
Choose a rollout strategy:
6367

6468
**Option A: By adoption/maturity (Recommended)**
69+
6570
- Lower risk (learn from early implementations)
6671
- Longer timeline
6772
- Best for complex features or experimental changes
6873
- This is the default approach for most cross-SDK changes
6974

7075
**Option B: All-at-once**
76+
7177
- Clean story for users (feature arrives everywhere simultaneously)
7278
- Harder to coordinate across teams
7379
- Best for critical security fixes or simple changes
@@ -81,6 +87,7 @@ Any change or enhancement requiring alignment across multiple SDKs **MUST** be t
8187
You **SHOULD** use the [`sentry-sdk-skills:linear-initiative`](https://github.com/getsentry/sdk-skills?tab=readme-ov-file#available-skills) skill to automate the creation of the Linear sub-initiative and per-SDK projects.
8288

8389
If not using the skill, you **MUST** manually:
90+
8491
- Create a sub-initiative under the appropriate parent initiative in Linear
8592
- For each SDK team involved, create a separate **project** under this sub-initiative, named per the [Project Naming](/sdk/getting-started/standards/planning-scoping#project-naming) standard (`[Effort name] [SDK name]`)
8693
- You **MUST NOT** use a single project with multiple issues, as the project is only completed once **all** SDK teams finish their work
@@ -94,6 +101,7 @@ This approach ensures accurate per-team progress tracking while maintaining visi
94101
If the change or alignment is of interest to SDK users or customers, you **MAY** create one public GitHub issue to track community interest and questions.
95102

96103
This public issue **MAY** be omitted for changes that are:
104+
97105
- Too trivial to warrant public communication
98106
- Should not be disclosed to customers or the public yet
99107
- Internal implementation details without user-facing impact
@@ -111,13 +119,15 @@ If not using the skill, each SDK team implements independently.
111119
Documentation PRs **SHOULD** ship together or in clear sequence — not piecemeal. Users **MUST NOT** see docs for a change that hasn't reached their SDK yet.
112120

113121
Options:
122+
114123
- Hold all docs PRs until all SDKs ship
115124
- Use platform-specific content that only appears when the SDK supports it
116125
- Clearly label which SDK versions support the feature
117126

118127
#### 8. Conduct async retro after full rollout (optional)
119128

120129
After all SDKs have shipped, you **SHOULD** conduct an async retrospective documenting:
130+
121131
- What worked well
122132
- What to improve for next time
123133
- Unexpected challenges

develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes.mdx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ spec_changelog:
2323
This playbook guides SDK maintainers through deciding whether a change is breaking and, if so, how to ship it with minimum friction for users. It covers classifying changes, estimating product impact, planning the release, and writing migration guidance. By following these steps, users will have clear migration paths and the SDK update experience will be as smooth as possible.
2424

2525
Related resources:
26+
2627
- [Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — when a major release is required and what every breaking change must include
2728
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — the deprecation stages and timelines
2829
- [Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) — step-by-step deprecation workflow
30+
- [Deprecating an SDK](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-sdk) — full SDK deprecation process
2931
- [Release and Versioning](/sdk/getting-started/standards/release-versioning) — SemVer requirements and release tooling
3032

3133
---
@@ -39,20 +41,23 @@ Determine whether the change is breaking. If the answer is unclear after reviewi
3941
There are four categories of changes that warrant scrutiny:
4042

4143
**API surface changes** — changes users need to adapt their code to:
44+
4245
- Dropping or renaming part of the public API
4346
- Dropping or renaming a function argument
4447
- Changing an argument's type without accepting the previous type
4548

4649
When the public/private boundary is unclear, look for evidence of external usage. Check if the API appears in user-facing docs, search public repositories for usage (e.g., via GitHub code search), or recall if you have seen it used in issue reproduction examples.
4750

4851
**Product impact changes** — changes that alter how data appears in Sentry without requiring code changes from the user:
52+
4953
- **Grouping** — changes to event data used by the server's grouping algorithm
5054
- **Dashboards** — renaming or removing span attributes users may be filtering on
5155
- **Alerts** — attribute changes that could cause alerts to start or stop firing
5256
- **Insights** — changes to metrics surfaced in the Insights module (e.g., Web or Mobile Vitals)
5357
- **Issue detection** — changes to span emission that influence server-side issue detection
5458

5559
**Behavior changes** — changes that don't require code changes but significantly affect user experience:
60+
5661
- Changes that affect the user's event or span quota (e.g., auto-enabling an integration)
5762
- Changes that might result in events being dropped (e.g., modifying payload trimming limits)
5863

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
---
2+
title: Deprecating an SDK
3+
spec_id: sdk/playbooks/deprecating-an-sdk
4+
spec_version: 1.0.0
5+
spec_status: candidate
6+
spec_depends_on:
7+
- id: sdk/getting-started/standards/api-architecture
8+
version: ">=1.0.0"
9+
- id: sdk/getting-started/standards/coordination-maintenance
10+
version: ">=1.0.0"
11+
spec_changelog:
12+
- version: 1.0.0
13+
date: 2026-03-26
14+
summary: Initial playbook — full SDK deprecation lifecycle from impact analysis through repo archival and documentation cleanup
15+
---
16+
17+
<SpecRfcAlert />
18+
19+
<SpecMeta />
20+
21+
## Overview
22+
23+
This playbook guides SDK maintainers through deprecating an entire SDK. Unlike [deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) or [dropping a platform version](/sdk/getting-started/playbooks/sdk-lifecycle/dropping-platform-support), deprecating an SDK means ending all active development and eventually archiving the repository. It covers impact analysis, approval, final release, public announcement, documentation updates, package registry deprecation, repo archival, and post-EOL cleanup.
24+
25+
Related resources:
26+
27+
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-changes-and-deprecations) — deprecation timeline and requirements
28+
- [Documenting decisions](/sdk/getting-started/standards/coordination-maintenance#documenting-decisions) — traceability requirement for decisions
29+
- [Cutting a Release](/sdk/getting-started/playbooks/sdk-lifecycle/cutting-a-release) — release process for the final release
30+
- [Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) — related playbook for API-level deprecation
31+
- [Dropping Platform or Language Version Support](/sdk/getting-started/playbooks/sdk-lifecycle/dropping-platform-support) — related playbook for version-level support drops
32+
33+
Two examples of this are [sentry-cordova](https://github.com/getsentry/sentry-cordova) (archived March 2026, users migrated to Capacitor, React Native, or Flutter) and [sentry-xamarin](https://github.com/getsentry/sentry-xamarin) (archived after Xamarin reached end of life, users migrated to .NET MAUI via `sentry-dotnet`).
34+
35+
---
36+
37+
## Steps
38+
39+
### Phase 1: Build the Case
40+
41+
Before committing to a deprecation, build a clear evidence-based case that justifies the decision and identifies alternatives for affected users.
42+
43+
#### 1. Assess industry and usage
44+
45+
Before proposing to deprecate an SDK, you **MUST** gather and document evidence covering:
46+
47+
- **Upstream project health**: Has the platform reached end of life? Is it still actively maintained? Has corporate sponsorship been withdrawn?
48+
- **Usage data**: How many orgs, DSNs, and projects actively use the SDK? Is usage growing or declining?
49+
- **Package download trends**: Compare the SDK's download numbers against alternatives using registry-specific statistics (e.g., [npmtrends](https://npmtrends.com/), PyPI Stats, NuGet Gallery, Maven Central)
50+
51+
Use internal data tools (analytics dashboards, usage queries) to gather org and DSN counts.
52+
53+
#### 2. Quantify revenue impact
54+
55+
You **MUST** calculate the true at-risk revenue, not the total ARR of orgs that happen to use the SDK:
56+
57+
- Identify orgs that use the SDK exclusively (no other Sentry SDKs) — this is the true at-risk segment
58+
- Compare ongoing maintenance cost against the revenue the SDK protects
59+
- Document the opportunity cost — what could the same engineering time deliver if invested in higher-growth SDKs?
60+
61+
#### 3. Identify migration paths
62+
63+
You **MUST** confirm that affected users have a viable path forward:
64+
65+
- List alternative SDKs (successor SDK, competing platforms with Sentry support)
66+
- Verify that an upstream migration path exists (e.g., framework-provided migration guides)
67+
- Determine whether Sentry-specific migration guidance is needed or if upstream guides are sufficient
68+
69+
#### 4. Get approval
70+
71+
Work with the engineering manager responsible for the SDK to get approval. The decision **MUST** be documented in Linear or GitHub per the [Documenting decisions](/sdk/getting-started/standards/coordination-maintenance#documenting-decisions) standard.
72+
73+
---
74+
75+
### Phase 2: Execute the Deprecation
76+
77+
Once approved, execute these steps in sequence. The order matters — cut the final release before announcing, and announce before archiving.
78+
79+
#### 5. Cut a final release
80+
81+
You **SHOULD** cut a final release with up-to-date dependencies to give users a stable baseline. Follow the [Cutting a Release](/sdk/getting-started/playbooks/sdk-lifecycle/cutting-a-release) playbook. Even if the release contains no new features, a clean final release is better than leaving users on a months-old version. The changelog **SHOULD** note that this is the final planned release and that the SDK is entering deprecation.
82+
83+
#### 6. Create a public deprecation announcement
84+
85+
You **MUST** open a GitHub issue on the SDK repo explaining:
86+
87+
- That the SDK is being deprecated
88+
- Why (upstream EOL, low usage, maintenance burden — keep it factual)
89+
- What alternatives users should migrate to, with links
90+
- Any remaining support timeline (e.g., security-only fixes for N months)
91+
92+
Pin this issue so it's visible to anyone who visits the repo. This is the single canonical place for users to understand the deprecation and ask questions.
93+
94+
#### 7. Close backlog with consistent messaging
95+
96+
You **MUST** close all open issues and PRs with a uniform note that references the announcement issue and names the alternatives. Every issue and PR **MUST** get this note — don't leave some closed without explanation. Use `state_reason: not_planned` where supported by the platform.
97+
98+
#### 8. Update the README
99+
100+
You **MUST** add a prominent deprecation notice at the top of the README. On GitHub, use the `> [!IMPORTANT]` callout:
101+
102+
```markdown
103+
> [!IMPORTANT]
104+
> This SDK is no longer maintained. We recommend migrating to
105+
> [Alternative A](link), [Alternative B](link), or [Alternative C](link).
106+
```
107+
108+
The notice **MUST** name the successor SDKs with links.
109+
110+
#### 9. Update documentation
111+
112+
You **MUST** add a deprecation alert to **all** pages under the SDK's documentation tree on the docs site:
113+
114+
```mdx
115+
<Alert level="warning" title="Deprecation Notice">
116+
This SDK is no longer maintained. If you are starting a new project or
117+
planning a migration, consider using [Alternative A](/path), [Alternative
118+
B](/path), or [Alternative C](/path) instead.
119+
</Alert>
120+
```
121+
122+
Don't delete documentation pages immediately — users on existing versions still need them.
123+
124+
#### 10. Deprecate on the package registry
125+
126+
You **MUST** mark the package as deprecated on its public registry so users see the notice at install time. The deprecation message **MUST** name the successor SDKs. Not every registry supports formal deprecation — where no mechanism exists, update the project description and README instead.
127+
128+
#### 11. Archive the GitHub repo
129+
130+
Archive the repository to make it read-only. Update the repo description to reflect the deprecation.
131+
132+
#### 12. Notify internal stakeholders
133+
134+
You **MUST** notify support, customer-facing, and go-to-market teams so they can proactively communicate with affected customers. High-impact deprecations **SHOULD** include a blog post or public announcement to reach users who don't regularly check changelogs.
135+
136+
---
137+
138+
### Phase 3: Post-EOL Cleanup
139+
140+
After the SDK has been archived for a while, clean up the documentation footprint.
141+
142+
#### 13. Clean up documentation
143+
144+
After a grace period (6–12 months post-archival), you **SHOULD**:
145+
146+
- Set `noindex: true` on the SDK's doc pages to remove them from search engine indexing
147+
- Set `draft: true` to hide them from site navigation
148+
- Keep content accessible via direct URL for users still on old versions
149+
- Consider adding redirects from the SDK's doc URLs to the successor SDK or a migration page
150+
151+
---
152+
153+
## Referenced Standards
154+
155+
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-changes-and-deprecations) — deprecation timeline and stages
156+
- [Documenting decisions](/sdk/getting-started/standards/coordination-maintenance#documenting-decisions) — traceability requirement
157+
- [Cutting a Release](/sdk/getting-started/playbooks/sdk-lifecycle/cutting-a-release) — release process for the final release
158+
159+
---
160+
161+
<SpecChangelog />

develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/dropping-platform-support.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ spec_changelog:
2323
This playbook guides SDK maintainers through dropping support for a platform or language version in a way that minimizes user disruption. It covers evidence gathering, deprecation announcements, maintenance periods, and eventual removal. By following these steps, users will have clear migration paths and sufficient notice before breaking changes occur.
2424

2525
Related resources:
26+
2627
- [Platform/language version support policy](/sdk/getting-started/standards/coordination-maintenance#platformlanguage-version-support-policy) — support policy and requirements
2728
- [Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — process for removal in major versions
2829
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — deprecation timeline
30+
- [Deprecating an SDK](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-sdk) — when deprecating the entire SDK, not just a platform version
2931

3032
---
3133

develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: SDK Lifecycle
3-
description: Releasing, deprecating APIs, dropping platform support, and introducing breaking changes.
3+
description: Releasing, deprecating APIs and SDKs, dropping platform support, and introducing breaking changes.
44
sidebar_order: 4
55
---
66

develop-docs/sdk/getting-started/standards/api-architecture.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Deprecations of public APIs, integrations, and supported platforms follow three
101101
2. **Keep it working** for at least one subsequent minor release (e.g., deprecated in X.Y, still functional in X.(Y+1)).
102102
3. **Remove** only in the next major release (X+1.0).
103103

104-
Deprecating an entire SDK is a bigger deal — it requires customer impact analysis, a public announcement, updated documentation, a defined support timeline, and advance EOL notice.
104+
Deprecating an entire SDK follows a separate, more involved process — see the [Deprecating an SDK](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-sdk) playbook.
105105

106106
### Breaking changes
107107

0 commit comments

Comments
 (0)