Skip to content

Conversation

@TodePond
Copy link
Contributor

@TodePond TodePond commented Apr 9, 2025

Updates the documentation site and marketing pages, including a new blog post for the Series A announcement.

Change type

  • other

Test plan

  1. Verify documentation site builds correctly
  2. Check new blog post rendering
  • Unit tests (if present)
  • End to end tests (if present)

Release notes

  • Updated marketing site and added Series A announcement blog post.

ds300 and others added 30 commits March 20, 2025 16:04
We were overriding the deep links default behavior with the state from
the database when the user had visited the file before. This fixes that.

### Change type

- [x] `other`
hard deleting files cleanly is kinda impossible to do right now, this
fixes that

### Change type

- [x] `other`
This PR increases the size of code snippets on examples pages on
tldraw.dev. They now match the size of the embedded example itself.

This PR also fixes a padding bug.


![image](https://github.com/user-attachments/assets/28f12dae-4471-40de-8728-8fea0230c99c)


### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
This PR adds and fixes some missing state docs on our API reference. It
also adds a new command `yarn refresh-api`, which you can use within the
`apps/docs` folder to quickly refresh local API pages (after running
something like `yarn build-api` at root).

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`

### Release notes

- Docs: Added more docs to the `@tldraw/state` and `@tldraw/state-react`
API reference,
## This PR

This PR adds auto-generation of a set of markdown files intended for AI
model consumption, as requested by multiple developers.

It adds the following files to the build process:

- `llms.txt` — A list of links to our examples and guides. [Link to
preview](https://tldraw-docs-git-lu-llms-tldraw.vercel.app/llms.txt)
- `llms-full.txt` — All of our guides and examples. [Link to
preview](https://tldraw-docs-git-lu-llms-tldraw.vercel.app/llms-full.txt)
- `llms-examples.txt` — All of our examples. [Link to
preview](https://tldraw-docs-git-lu-llms-tldraw.vercel.app/llms-examples.txt)
- `llms-docs.txt` — All of our guides. [Link to
preview](https://tldraw-docs-git-lu-llms-tldraw.vercel.app/llms-docs.txt)

They're available at `tldraw.dev/llms.txt`, etc...
Pointing an AI model at one of these files greatly improves output
quality. More details below.

Next incoming PRs:
- [Add
`llms-api.txt`](https://linear.app/tldraw/issue/INT-1142/add-llms-apitxt)
- [Make our `llms.txt` files discoverable through the docs
site](https://linear.app/tldraw/issue/INT-1143/add-links-to-llmstxt-etc-on-docs-site)

## Background

`llms-txt` is an emerging practice for docs sites. For more context, see
these directories for examples of `llms.txt`:
- https://llmstxt.site
- https://directory.llmstxt.cloud

There are typically multiple files offered, of varying lengths, with
different content inside.
- `llms.txt` — A small file. Typically a list of links. 
- `llms-full.txt` — A massive file. Typically a large collection of
inline docs, references, examples.
- `llms-tiny.txt` — A condensed version of `llms-full.txt`.
- `llms-api.txt`, `llms-example.txt`, etc — Specific sections from
`llms-full.txt`

There are also some efforts to standardize these kinds of files
(https://llmstxt.org), but they are not widely adopted yet, and
libraries seem to take an approach that's tailored to them.

The idea is that a developer can use these files in various ways.
- You can download the file, and upload it to something like ChatGPT or
Gemini or NotebookML to be used as a reference.
- You can refer to it via link, so that your assistant can access it and
read it.
- You can use it within a prompt. 

Some libraries advertise the existence of these files on their docs
sites, eg: [Hono](https://hono.dev/docs/).

![image](https://github.com/user-attachments/assets/7a6c588e-b8f1-4e9f-96d1-da653cc55d28)

To generate our files, go into the `apps/docs` directory and then run
`yarn refresh-content`. After doing this once, you can run `yarn
create-llms-txt` to just regenerate the files, without regenerating
everything else.

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`

### Release notes

- Docs: Added `tldraw.dev/llms.txt`, `tldraw.dev/llms-full.txt`,
`tldraw.dev/llms-examples.txt` and `tldraw.dev/llms-docs.txt` files to
be used with LLMs. Point your model to it, or download it and upload it
as a file to something like Gemini or ChatGPT.
After the deploy this morning we started getting a lot of 

> Error: Subrequest depth limit exceeded. This request recursed through
Workers too many times. This can happen e.g. if you have a Worker or
Durable Object that calls other Workers or objects recursively.

In sentry. All seeming to originate from the new RPC-based lsn update
mechanism. No idea why, there's a back and forth but no real chain of
recursion here, it's just running on a setInterval.

Anyway this cuts one side of the RPC link out so it can't possibly think
there's a recursion chain.

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
This reverts commit 5dc9c09.

i'm not sure what i was smoking here 🚬 

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
splitting this out from https://github.com/tldraw/tldraw/pull/5547/files

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create a shape...
2.

- [x] Unit tests
- [ ] End to end tests

### Release notes

- Add YouTube support for t/start/loop params.
Currently for the `Group2d.getSvgPathData()` method it will take into
account the index for the children to determine which is the first when
generating SVG paths. I believe this is incorrect because each child as
a group should be isolated and not connected. This removes that index
check and treats each child as the beginning for when generating SVG
data.

## Testing

I tested this in a project using 1) `Polyline2d` followed by 2)
`CubicBezier2d` both added to a `Group2d` (the cubic bezier curve being
added last). You can see in the below screenshot that the end of the
poly line (on the left side) is being connected to the cubic bezier.

In the fixed version the cubic bezier is correctly not connecting to the
poly line.

**Before**

<img width="509" alt="Screenshot 2025-03-07 at 23 49 24"
src="https://github.com/user-attachments/assets/db87c8b4-0768-421d-8387-fca9f9f08cfe"
/>

```svg
<svg class="tl-svg-container">
  <!-- Notice the missing `M` between the `L` and `C` definitions -->
  <path stroke-width="2" stroke="#f2f2f2" fill="none" d="M 0 0 L 100 0  C50, 12.5 50, 12.5 75, 0"></path>
</svg>
```

**After**

<img width="442" alt="Screenshot 2025-03-07 at 23 48 50"
src="https://github.com/user-attachments/assets/80971a4f-023b-42e9-b529-b0b8633809e9"
/>

```svg
<svg class="tl-svg-container">
  <!-- Missing `M` now added -->
  <path stroke-width="2" stroke="#f2f2f2" fill="none" d="M 0 0 L 100 0 M 25, 0  C50, 12.5 50, 12.5 75, 0"></path>
</svg>
```

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create a Group2D shape with multiple children
2. Use the `getSvgPathData()` method
3. Check that the paths are not connected but that each child is indeed
distinct

- [ ] Unit tests
- [ ] End to end tests

### Release notes

- Fixed a bug with `Group2D.getSvgPathData()` so that children in the
resulting SVG have their starting points defined correctly.
This PR adds an editor option to enable frame colors.

When enabled:

<img width="1758" alt="image"
src="https://github.com/user-attachments/assets/a69d9359-9c58-48be-8248-055ca0033cac"
/>
<img width="1728" alt="image"
src="https://github.com/user-attachments/assets/9c0c0ab0-bb82-4a0a-ba37-90b105746827"
/>

This PR also:

- fixes a bug with the minimum size of frame headings
- fixes a bug with geometry on rotated frames
- tightens up the size of frame headings

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [x] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Visit the Frame colors example.
2. Create frames

### Release notes

- Added `FrameShapeUtil.options.showColors` option to display colors for
frames.

---------

Co-authored-by: huppy-bot[bot] <128400622+huppy-bot[bot]@users.noreply.github.com>
Co-authored-by: alex <alex@dytry.ch>
…g empty shapes unless they're hovered (#5734)

This PR improves text editing.

## The bug

Previously, we would mount all of the text editors for all of the
text-editable shapes when the user began editing any text-editable
shape. For large projects this would block the main thread as all of
those text editors were mounted. Even on my Very Fast Laptop this would
introduce ~200-500ms of lag between when I press "Enter" to begin
editing a shape and when the app would begin responding to my key
strokes. This often dropped the first letter of whatever I was typing.

## The fix

We now mount the text editor for a shape if it's:
- editing; or
- has text; or
- is hovered

If a shape is neither of those, then we don't mount the text editor
until the user hovers the shape. From a user perspective, the
interactions are identical to what they were before.

## Proof

Before: (starting to edit a shape with ~1000 empty shapes on the page)

<img width="1334" alt="image"
src="https://github.com/user-attachments/assets/820908a2-21f0-4a3e-a5b9-5083e4ef6d66"
/>

After:

There's nothing to see, we don't drop any frames.

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create many empty shapes
2. Begin editing any shape.

### Release notes

- Fixed a bug causing a performance delay when editing text.

---------

Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
This PR fixes a visual issue with scrolling. See before and after:

![2025-03-24 at 11 10 59 - Gray
Tyrannosaurus](https://github.com/user-attachments/assets/c089975a-3ee7-45eb-a46c-19cfff57f698)

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`

### Test plan

1. On the docs site...
2. Resize the window to make it smaller.
3. Overscroll upwards (or downwards).
4. Check that the menu bar is not overlapping any other page content.
5. Repeat this check for an examples page. 

- [ ] Unit tests
- [ ] End to end tests
This PR improves the performance of shapes with rich text content.

## The bug

Due to reasons I cannot understand, we extract the fonts from rich text
on every frame while translating shapes. Maybe we shouldn't, I don't
know. Anyway, this is expensive when many shapes are moving around.
Actually, not even that many. Try it yourself!

## The fix

The fix here is the same as #5658, which is to skip the work if the text
is empt; or use a weak cache to re-use the result from last time.

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create lots of geo shapes.
2. Drag all the geo shapes around.

### Release notes

- Improved performance while editing many geo shapes or text shapes.

---------

Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
)

This seems to have been causing errors since the deploy yesterday

We were disptaching more analytics events than normal it seems? And this
was throwing errors in our business logic and making things reset when
they shouldn't.


### Change type

- [x] `other`
We pushed a bunch of hotfixes directly yesterday while trying to make
the backend behave itself.

This PR collects all the changes and simplifies the concurrency
prevention bugfix.

### Change type

- [x] `other`
We were re-computed this way too eagerly. We only need to check when the
props change.




https://github.com/user-attachments/assets/ed8936b3-ce00-4649-bb1c-30c4874a89bf


### Change type

- [x] `bugfix`

### Release notes

- Fix a performance regression when dragging many shapes at the same
time.
can't believe I nearly introduced this bug again 🤦🏼 

this should have been part of #5744, i think my brain was broken this
morning

### Change type

- [x] `other`
@MitjaBezensek reportd that:
- the follow icons were all stacking on top of one another (effect of
css changes in https://github.com/tldraw/tldraw/pull/5401/files )
- the people menu was getting a scrollbar now (although I'm not sure
exactly the CSS that caused it, prbly some fit-content stuff afaict)

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Fix people menu CSS.
Looks like bounds were not getting used.

### Change type

- [x] `bugfix`
In our tldraw integration we are not using embeds, however embed icons
still loaded on Tldraw mount. We wanted to get rid of that preload, and
used [approach recommended in Discord
channel](https://discord.com/channels/859816885297741824/1316236102352375819/1316236102352375819).
However it didn't work.

I updated preload logic to ignore empty `embedIcons` from preloading.
I updated `TLUiAssetUrls.embedIcons` type to better reflect the value it
actually can store.

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Check that default tldraw playground preloads and displays embed
icons correctly.
2. Override `embedIcons[string]` to be undefined and check that they no
longer preloaded.

### Release notes

- Allow to remove unused `embedIcons` from preload
This PR excludes json files from examples in our `llms` files. The only
json files are snapshots, which are very large and aren't that helpful
to LLMs. This saves on tokens, and makes things clearer.

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
Wanted to open a discussion on `getCoalescedEvents` and see if it's
worth integrating into the canvas. The videos below show trying to draw
with a CPU 20x slowdown.

(I know we've talked about `getPredictedEvents` but that's a separate
topic)
Testbed:
https://patrickhlauke.github.io/touch/coalesced-predicted-events/

Before:


https://github.com/user-attachments/assets/f4b0648e-22e5-43a3-874a-959d6011ada7

After:


https://github.com/user-attachments/assets/6a99db52-98e4-4a5c-aaab-9ccc1b970e9c


### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Improve draw fluidity on slower CPUs by using getCoalescedEvents.
Starts improving our voiceover, starting with the toolbar which was
crap.
This follows the toasts pattern we have, since this is, in a way, a
notification of what's happening on the screen, especially when
selecting something using a hotkey instead of using the mouse pointer.


https://github.com/user-attachments/assets/95f7551a-e891-4c5a-bf93-784b86fe618f

related issue #5215


### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Adds better voiceover support when selecting an action (a11y)
@SomeHats I think this should fix the flakiness you were seeing. can you
confirm?

Leaving as draft because I still need to check the perf and probably add
tests now that it touches normal code paths.

### Change type

- [x] `other`
Alternative take on #5749, aiming to fix #4945. 

The big issue here is that `useGesture` doesn't give us a zoom delta, it
gives us its own calculated absolute zoom. This makes it really hard to
apply `zoomSpeed` correctly - we don't have a delta to apply a speed to,
and `useGesture` isn't expecting us to be applying changes different to
the ones that it's supplying.

In #5749, we try to get the deltas out and scale them appropriately. In
this diff, we instead counter-scale all of our inputs to `useGesture`,
then scale them back afterwards. This means that if you have a zoom
speed of 0.5, then scaling from 1 to 2 requires scaling from 1 to 4 in
use-gesture land.

The big drawback to this is that where the rest of `cameraOptions` is
applied in editor-land, this is applied to the events _before_ they get
to the editor. This isn't really a big deal - i doubt many people are
using the editor without the built-in use-gesture setup. In the future
we'll probably move off of use-gesture and can apply this stuff in the
editor once we do that.

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Setting `zoomSpeed` in camera options no longer breaks zooming on
safari trackpads and multitouch pinch to zoom.
Describe what your pull request does. If you can, add GIFs or images
showing the before and after of your change.

### Change type

- [x] `other`

---------

Co-authored-by: David Sheldrick <d.j.sheldrick@gmail.com>
### Change type

- [x] `improvement`
Typo 😅 

### Change type

- [x] `bugfix`
We had to update this in aws.

### Change type

- [x] `bugfix`
minor thing but b/c Miro is just an HTML string, we go down a path where
we try to insert an empty string b/c all the HTML is stripped

![Screenshot 2025-04-01 at 16 08
58](https://github.com/user-attachments/assets/11d16632-6255-47d1-b3e8-8f8245a8d2dd)

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Fix blowing up when pasting Miro shapes into tldraw.
mimecuvalo and others added 22 commits April 3, 2025 15:07
As part of a [larger push](#5215)
to add accessibility to our SDK, a big piece of that work is being able
to navigate through our shapes in some kind of predictable fashion. This
builds upon @Taha-Hassan-Git 's great work and knowledge in this area,
thanks man. :tip-o-the-hat:

Things that were tackled in this PR:
- navigating shapes using the Tab key, when in the Select tool.
- navigating shapes using Cmd/Ctrl+Arrow keys, when in the Select tool.
- only allowing certain shapes to be navigated to. We ignore
draw/highlighter/arrow/group/line. Groups need exploration and will be
tackled later.
- panning the camera to the selected shape, but avoiding doing so in a
jarring way. We don't center the shape to avoid too much whiplashy-ness.

An initial foray into this was relaying purely on DOM but it had a bunch
of browser quirks which forced making this purely a programmatic control
on our end. Things like ensuring culled shapes are still accessible even
though they're not rendered was one of the issues but also tab order
became unpredictable at times which steered me away from that direction.

We coud have considered using something like rbush for some spatial
indexing of the shapes. For the intents and purposes of this PR, it
seemed like overkill at the moment. But we might cross that bridge down
the line, we'll see.

The reading-direction heuristics are a combination of dividing the pages
into rows and then looking at distance and angles to see what is the
spatially "next" shape to be read. It takes _all_ of the shapes and
sorts them into a logical order so that nothing is missed/skipped when
tabbing around.
The directional-arrow heuristics don't divide things into rows and don't
create a sorted set of shapes. Instead, they decide based on the current
shape and direction which is the next spatially to go to, depending on
distance+angle.

There's a decent amount of nuance in this kind of navigation but it's
not all covered in this PR, for separate PRs, we'll look at:
- [x] adding a "skipping to content" button
- [ ] question whether maybe directional navigation visits ‘canTabTo’
shapes, maybe yes?
- [ ] tackling what Enter/Escape should do when on the canvas shapes
- [ ] how to deal with hierarchy / parent-child / frame / group shapes
- [ ] and more



https://github.com/user-attachments/assets/49b6b34e-2553-4047-846f-5d3383e1e3c6


### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [x] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

- [x] Unit tests
- [x] End to end tests

### Release notes

- a11y: navigable shapes using Tab and Cmd/Ctrl+Arrow
This PR fixes a few things

- `mergeRemoteChanges` becomes atomic
- doing an `atomic(no callbacks)` inside of an `atomic(with callbacks)`
will switch off `before*` callbacks during the inner `atomic`, but
`after*` callbacks will still be handled by the outer `atomic`. This was
needed to allow the tlsync `rebase` operation to run as it did before
making `mergeRemoteChanges` atomic, but it feels like it should have
always been this way?

### Change type

- [x] `improvement`

### Release notes

- Make `store.mergeRemoteChanges` atomic. This allows after* side
effects to react to incoming changes and to propagate any effects to
other clients via `'user'`-scoped store change events.
Not including assetUrls meant that the exploded example didn't load
fonts correctly. It would just try to load the fonts e.g. from
/tldraw_draw.

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create a shape with text in the exploded example
2. Reload the page to make sure the fonts aren't loaded from previous
requests
3. See that the font isn't loaded and the fallback font is used

- [ ] Unit tests
- [ ] End to end tests
Pruning sst deploys is quite slow ([9m to prune on
deploy](https://github.com/tldraw/tldraw/actions/runs/14255043270/job/39956053486)).
Bumping this a bit.

### Change type

- [x] `improvement`
We need to first migrate the db (which happens in `deployTlsyncWorker`).
Only then should we deploy zero.

### Change type

- [x] `bugfix`
This PR:

- changes the copy for the "Skip to first object on board" button to
"Move focus to canvas"
- aligns the style for the "Move focus to canvas"
- fixes the z-index for the button
- prevent Enter from editing the focused object on keyup

### Change type

- [x] `bugfix`
- [x] `improvement`

### Test plan

1. Create a geo shape
2. Move to an empty part of the canvas
3. Press Tab to show the focus the canvas button
4. The button should be in front of the "Back to content" button
5. Press Enter on the button
6. The focus should move to the geo shape and not begin editing it

### Release notes

- no fixes to public code
This brings dotcom up to speed with our latest focus ring work.
- [x] sidebar buttons/links
- [x] toggle sidebar
- [x] file list
- [x] profile menu
- [x] cookie menu settings
- [x] tldraw logo

also @MitjaBezensek lemme know about this `displayUserWhenAlone` if it's
really necessary. It looks like the menu was always present (you could
tab to it) even though it was hidden.

still to do in a separate PR:
- [ ] share panel 

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
This PR addresses [#5833] by renaming the useIsMultiplayer hook to
useCollaborationStatus, providing a more descriptive and accurate name
for the functionality.

The term "multiplayer" was overly broad and less aligned with how the
hook is actually used. useCollaborationStatus more accurately conveys
the intent, improving code readability and consistency.


Changes:

Renamed hook file:
useIsMultiplayer.ts → useCollaborationStatus.ts

Updated all imports and usage references in:
- src/index.ts 
- ContextMenu/DefaultContextMenuContent.tsx 
- KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx 
- TopPanel/DefaultTopPanel.tsx
- context/actions.tsx
- context/components.tsx

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

1. Create a shape...
2.

- [ ] Unit tests
- [ ] End to end tests

### Release notes
Renamed the useIsMultiplayer hook to useCollaborationStatus for better
clarity and consistency around naming related to collaboration features.
This affects internal imports only — no changes required for SDK
consumers.
Fix an example text shape in `quick-start.mdx`. Thanks @tulavamsidheeraj
for starting this in #5829!

### Change type

- [x] `other`
This PR tweaks links and content on the landing page.

### Change type

- [x] `other`

---------

Co-authored-by: Lu[ke] Wilson <l2wilson94@gmail.com>
#5837)

- fix dotcom share menu (we were using dropdown, and we should have used
popover
- fix embed menu on dotcom
- fix slider and watermark capturing tab focus when shapes were selected

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
Fixes a typo in the footer text of the Local Images example.

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Test plan

n/a

### Release notes

n/a
Pressing the enter key when using the search bar takes you through to a
dedicated search page... `/search?query=[query]`.

We have a large API surface! Often, our small search results window
doesn't have enough room to display all the results we need. It's hard
to navigate and cuts off too many things. A dedicated search page makes
this easier. We can fit more on the screen, and there's room for us to
show more results. We can also share search queries with people.

This PR also includes some other small changes:
- Fixed mobile menu bar sliding off the screen when you scroll.
- Fixed page title on some docs pages.
- Removed some unused helpers.
- Renamed some search components for clarity.
- Added a tiny hover effect to search results (affects both the full
page and the dialog).

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`

### Test plan

1. On the docs site...
2. Open search by pressing Cmd+K, or by clicking on the search bar on
the docs page...
3. Type in a query, eg: "test"
4. Press enter.
5. It should take you to a dedicated search page.

- [ ] Unit tests
- [ ] End to end tests

### Release notes

- Docs: Added full page search.

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
Building off of #5634 and
#5761 this is adding a11y live text
to be read aloud when visiting a shape.

We add an overridable method for shapes to customize this called
`getAriaLiveText`.
Furthermore, we lay the groundwork here to start letting media shapes
have `altText`.
Drive-by fix of `heart` being missing in `geo-styles` list.
Also, drive-by fix of us calling our Image button "Asset" (what are we
selling financial instruments here? :P) "Media" is a better word for
this button, more human.

Some of the i18n translation is funky. It's a shortcoming of our current
system that we don't support interpolation :-/
It sucks, and we'll revisit in the future.

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [x] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- a11y: announce shapes as they're visited

---------

Co-authored-by: alex <alex@dytry.ch>
This is just for dev mode.

![Screenshot 2025-04-07 at 15 38
01](https://github.com/user-attachments/assets/45076c3d-6ef8-4163-b1c3-4facae08da05)


### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [x] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- a11y: add axe to be able to do audits
Fix PDF editor / image annotator examples

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
followup to #5840
just do it on /develop

### Change type

- [ ] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`
Looks like we need to pass the `-y` flag to [accept the
confirmation](https://fly.io/docs/flyctl/apps-destroy/#options) when
pruning the apps.
[Failure](https://github.com/tldraw/tldraw/actions/runs/14297908654/job/40067462974#step:6:346)
of the last run.

Preview deploys were also failing to start correctly because of
permissions deployment issue. We tried to deploy permissions before
deploying zero, which failed since the zero hasn't had the chance to
create the tables yet.

### Change type

- [x] `bugfix`
fix up watermark not being the right size on mobile, regression from
#5837

### Change type

- [x] `bugfix`
- [ ] `improvement`
- [ ] `feature`
- [ ] `api`
- [ ] `other`

### Release notes

- Fix mobile watermark.
adds a bunch of `role`s and tweaks `aside` → `nav`

### Change type

- [ ] `bugfix`
- [x] `improvement`
- [ ] `feature`
- [ ] `api`
- [x] `other`

### Release notes

- a11y: tweak `role`s for certain UI components
…5851)

This PR removes a spurious max-width setting for media elements that I
discovered to be triggering this issue. I guess the SVG elements we use
for the selection UI were being shrunk or otherwise corrupted by chrome
when the `devicePixelRatio` got funky.

I could have just removed this setting for the svg elements but honestly
I don't think it makes sense at all for a sassy app like ours, it seems
more appropriate for a site with prose and multimedia content like
dotdev.

### Change type

- [x] `other`
hello

### Change type

- [x] `other`

---------

Co-authored-by: Lu[ke] Wilson <l2wilson94@gmail.com>
@vercel
Copy link

vercel bot commented Apr 9, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated (UTC)
examples ✅ Ready (Inspect) Visit Preview Apr 9, 2025 5:25pm
tldraw-docs ✅ Ready (Inspect) Visit Preview Apr 9, 2025 5:25pm

@TodePond TodePond closed this Apr 9, 2025
@TodePond TodePond reopened this Apr 9, 2025
@TodePond TodePond closed this Apr 9, 2025
@steveruizok steveruizok added other ⚙️ Changes that don't affect SDK users, e.g. internal or .com changes docs Changes only affect the documentation labels Jan 2, 2026
@steveruizok steveruizok changed the title hotfix series A docs: update marketing and blog for series A announcement Jan 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Changes only affect the documentation other ⚙️ Changes that don't affect SDK users, e.g. internal or .com changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.