Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
282 lines
8.9 KiB
Markdown
282 lines
8.9 KiB
Markdown
# Release notes style guide
|
|
|
|
This document defines the rules and conventions for tldraw SDK release notes articles in `apps/docs/content/releases/`.
|
|
|
|
**Prerequisite**: Read the [voice and style guide](../../VOICE.md) first. This document builds on those foundations with release-notes-specific patterns.
|
|
|
|
## Editorial guidance
|
|
|
|
### What to include
|
|
|
|
- Breaking changes that require user action
|
|
- New features that solve common pain points
|
|
- API additions that unlock new capabilities
|
|
- Changes that affect how developers integrate tldraw
|
|
- Bug fixes for user-reported issues
|
|
|
|
### What to omit
|
|
|
|
- Internal performance optimizations (unless user-visible)
|
|
- Fixes for bugs introduced in the same release cycle
|
|
- Implementation details that don't affect public API
|
|
- Pure code quality improvements
|
|
|
|
### When to create a featured section
|
|
|
|
Promote changes to the "What's new" section when:
|
|
|
|
- It's a breaking change requiring a migration guide
|
|
- It introduces a major new capability
|
|
- It is an interesting or significant new feature, possibly the result of multiple PRs
|
|
- Users need detailed guidance (migration guides, platform tables)
|
|
|
|
Featured sections should include:
|
|
|
|
- Clear description of what changed and why it matters
|
|
- Code examples where helpful
|
|
- Migration guides in collapsible `<details>` blocks for breaking changes
|
|
- Links to relevant documentation
|
|
|
|
## PR categorization
|
|
|
|
| Category | Labels | Indicators |
|
|
| ------------ | ---------------------------- | -------------------------------- |
|
|
| API changes | `api`, `feature`, `major` | Adds/removes/modifies public API |
|
|
| Improvements | `improvement`, `enhancement` | Enhances existing functionality |
|
|
| Bug fixes | `bugfix`, `bug`, | Fixes issues |
|
|
|
|
Look for `### Release notes` and `### API changes` sections in PR bodies. Search for "breaking" to identify breaking changes. Search for "deprecat" to identify deprecated APIs (mark with 🔜, not 💥).
|
|
|
|
### PRs to skip
|
|
|
|
Skip PRs with these labels:
|
|
|
|
- `other`
|
|
- `skip-release`
|
|
- `chore`
|
|
- `dotcom`
|
|
|
|
Also skip:
|
|
|
|
- Reverts, unless they fix something user-facing
|
|
- Fixes for bugs introduced in the same release cycle (i.e., the bug was caused by a PR that is also in `next.mdx` and was not in the previous release)
|
|
|
|
When a PR is reverted, also remove the original PR's entry from `next.mdx` if it is present.
|
|
|
|
## Team members (do not credit)
|
|
|
|
angrycaptain19, AniKrisn, ds300, kaneel, kostyafarber, max-dra, mimecuvalo, MitjaBezensek, profdl, Siobhantldraw, steveruizok, tldrawdaniel, danieljamesross, jsscclr, frolic, huppy-bot, github-actions, Somehats, todepond, Taha-Hassan-Git, alex-mckenna-1, max-drake, m31-galaxy, meg-an31
|
|
|
|
Credit community contributors with:
|
|
|
|
```markdown
|
|
(contributed by [@username](https://github.com/username))
|
|
```
|
|
|
|
## General notes
|
|
|
|
- Do not include AI attribution
|
|
- Write as if the release has already happened
|
|
- Omit empty sections
|
|
- The release listing is maintained in `apps/docs/content/getting-started/releases.mdx`
|
|
|
|
---
|
|
|
|
## Formatting conventions
|
|
|
|
### Section order
|
|
|
|
Use these sections in order (omit empty sections):
|
|
|
|
1. **Introduction paragraph** - 1-2 sentence summary of the release highlights
|
|
2. **What's new** (`## What's new`) - Featured sections (H3s) for major features and breaking changes
|
|
3. **API changes** (`## API changes`) - New methods, properties, options, deprecations, and breaking changes
|
|
4. **Improvements** (`## Improvements`) - Enhancements to existing functionality
|
|
5. **Bug fixes** (`## Bug fixes`) - Fixed issues
|
|
6. **Patch releases** (`## Patch releases`) - Separated by `---`, contains bulleted changes for each patch version
|
|
|
|
### Introduction paragraph
|
|
|
|
Start each release with a 1-2 sentence summary highlighting the most significant changes. Lead with concrete features, then mention infrastructure and performance:
|
|
|
|
```markdown
|
|
This release introduces several significant changes: a new pattern for defining custom shape/binding typings, pluggable storage for `TLSocketRoom` with a new SQLite option, reactive `editor.inputs`, and optimized draw shape encoding. It also adds various other API improvements, performance optimizations, and bug fixes.
|
|
```
|
|
|
|
### Entry format
|
|
|
|
Start entries with a verb: "Add", "Fix", "Improve", "Remove". Keep descriptions concise but informative.
|
|
|
|
```markdown
|
|
- Add `Editor.newMethod()` for doing something useful. ([#7123](https://github.com/tldraw/tldraw/pull/7123))
|
|
```
|
|
|
|
For multiple related PRs:
|
|
|
|
```markdown
|
|
- Improve arrow snapping performance. ([#7145](https://github.com/tldraw/tldraw/pull/7145), [#7150](https://github.com/tldraw/tldraw/pull/7150))
|
|
```
|
|
|
|
With code examples:
|
|
|
|
````markdown
|
|
- Add `localStorageAtom` to `@tldraw/state`. ([#6876](https://github.com/tldraw/tldraw/pull/6876))
|
|
|
|
```tsx
|
|
const myAtom = localStorageAtom('my-key', defaultValue)
|
|
```
|
|
````
|
|
|
|
### Breaking changes
|
|
|
|
Mark breaking API changes with a 💥 prefix. Mark deprecations (APIs that still work but will be removed in a future release) with a 🔜 prefix. Place breaking changes at the top of the API changes section, followed by deprecations:
|
|
|
|
```markdown
|
|
## API changes
|
|
|
|
- 💥 **`ShapeUtil.canEdit()`** signature changed to accept a `TLEditStartInfo` parameter. ([#7361](https://github.com/tldraw/tldraw/pull/7361))
|
|
- 💥 **`oldMethod`** renamed to `newMethod`. ([#7400](https://github.com/tldraw/tldraw/pull/7400))
|
|
- 🔜 **`Editor.legacyMethod()`** is deprecated. Use `Editor.newMethod()` instead. ([#7450](https://github.com/tldraw/tldraw/pull/7450))
|
|
- Add `Editor.newMethod()` for doing something useful. ([#7123](https://github.com/tldraw/tldraw/pull/7123))
|
|
```
|
|
|
|
### What's new section
|
|
|
|
The `## What's new` section contains featured subsections (H3s) for headline features and major breaking changes.
|
|
|
|
**Basic structure:**
|
|
|
|
```markdown
|
|
## What's new
|
|
|
|
### Feature name ([#7320](https://github.com/tldraw/tldraw/pull/7320))
|
|
|
|
Brief description of what this feature does and why it matters.
|
|
```
|
|
|
|
**Multiple related PRs:**
|
|
|
|
```markdown
|
|
### Pluggable storage for TLSocketRoom ([#7320](https://github.com/tldraw/tldraw/pull/7320), [#7123](https://github.com/tldraw/tldraw/pull/7123))
|
|
```
|
|
|
|
**Deprecation featured sections** - add 🔜 to the heading:
|
|
|
|
```markdown
|
|
### 🔜 Deprecation of old API ([#0000](https://github.com/tldraw/tldraw/pull/0000))
|
|
|
|
Brief description of what is deprecated and what to use instead.
|
|
```
|
|
|
|
**Breaking change featured sections** - add 💥 to the heading and include a migration guide:
|
|
|
|
```markdown
|
|
### 💥 Feature name ([#0000](https://github.com/tldraw/tldraw/pull/0000))
|
|
|
|
Brief description of what this feature does and why it matters.
|
|
|
|
<details>
|
|
<summary>Migration guide</summary>
|
|
|
|
Before:
|
|
\`\`\`ts
|
|
// old code
|
|
\`\`\`
|
|
|
|
After:
|
|
\`\`\`ts
|
|
// new code
|
|
\`\`\`
|
|
|
|
</details>
|
|
```
|
|
|
|
**Collapsible explanations** - use for supplementary context:
|
|
|
|
```markdown
|
|
<details>
|
|
<summary>Why SQLite?</summary>
|
|
|
|
- **Automatic persistence**: Data survives process restarts
|
|
- **Lower memory usage**: No need to keep entire documents in memory
|
|
|
|
</details>
|
|
```
|
|
|
|
**Platform support tables:**
|
|
|
|
```markdown
|
|
<details>
|
|
<summary>Platform support</summary>
|
|
|
|
| Platform | Wrapper | Library |
|
|
| -------------------------- | -------------------------------- | --------------------------------- |
|
|
| Cloudflare Durable Objects | `DurableObjectSqliteSyncWrapper` | Built-in `ctx.storage` |
|
|
| Node.js/Deno | `NodeSqliteWrapper` | `better-sqlite3` or `node:sqlite` |
|
|
|
|
</details>
|
|
```
|
|
|
|
### GitHub release link
|
|
|
|
Add a link to the GitHub release at the end of each release section:
|
|
|
|
- **For minor releases**: Place after the last content section and before the `---` separator
|
|
- **For patch releases**: Place after the bulleted list of changes
|
|
|
|
```markdown
|
|
[View release on GitHub](https://github.com/tldraw/tldraw/releases/tag/v4.3.0)
|
|
```
|
|
|
|
### Patch releases
|
|
|
|
Add patch releases at the bottom of the minor release file, after a horizontal rule. List in chronological order:
|
|
|
|
```markdown
|
|
---
|
|
|
|
## Patch releases
|
|
|
|
### v4.2.1
|
|
|
|
- Fix text selection flakiness when clicking into text shapes. ([#3643](https://github.com/tldraw/tldraw/pull/3643))
|
|
|
|
[View release on GitHub](https://github.com/tldraw/tldraw/releases/tag/v4.2.1)
|
|
|
|
### v4.2.2
|
|
|
|
- Fix arrow binding when target shape is rotated. ([#3650](https://github.com/tldraw/tldraw/pull/3650))
|
|
|
|
[View release on GitHub](https://github.com/tldraw/tldraw/releases/tag/v4.2.2)
|
|
```
|
|
|
|
### Horizontal rules
|
|
|
|
Use `---` only before the `## Patch releases` section. Do not use horizontal rules elsewhere.
|
|
|
|
### Headings
|
|
|
|
Use sentence case: "API changes" not "API Changes", "Bug fixes" not "Bug Fixes".
|
|
|
|
### Frontmatter
|
|
|
|
```yaml
|
|
---
|
|
title: 'v4.3.0'
|
|
created_at: 12/19/2024
|
|
updated_at: 12/19/2024
|
|
keywords:
|
|
- changelog
|
|
- release
|
|
- v4.3
|
|
- v4.3.0
|
|
- v4.3.1
|
|
- feature-keyword
|
|
---
|
|
```
|
|
|
|
- Dates in MM/DD/YYYY format
|
|
- Always include `changelog` and `release` as keywords
|
|
- Include the minor version without patch (e.g., `v4.3`), the `.0` release, and all patch versions
|
|
- Add 2-5 content-relevant keywords (lowercase, hyphens for multi-word)
|