write-example

작성자: tldraw

tldraw SDK 예제 앱을 위한 예제 작성. 새로운 예제를 만들거나, SDK 데모를 추가하거나, apps/examples에서 예제 코드를 작성할 때 사용합니다.

npx skills add https://github.com/tldraw/tldraw --skill write-example

Writing tldraw examples

The examples project (apps/examples) contains minimal demonstrations of how to use the tldraw SDK. Examples are embedded on the docs site and deployed to examples.tldraw.com.

Standards for examples in apps/examples/src/examples.

Example structure

Each example lives in its own folder:

apps/examples/src/examples/
└── my-example/
    ├── README.md          # Required metadata
    ├── MyExampleExample.tsx  # Main example file
    └── my-example.css     # Optional styles

Folder name

  • Lowercase kebab-case: custom-canvas, button-demo, magical-wand
  • Used as the URL path for the example

README.md

Required frontmatter format:

---
title: Example title
component: ./ExampleFile.tsx
category: category-id
priority: 1
keywords: [keyword1, keyword2]
---

One-line summary of what this example demonstrates.

---

Detailed explanation of the example. Include code snippets here if they help explain concepts not obvious from the example code itself.

Frontmatter fields

FieldDescription
titleSentence case, corresponds to folder name
componentRelative path to example file
categoryOne of the valid category IDs (see below)
priorityDisplay order within category (lower = higher)
keywordsSearch terms (avoid obvious terms like "tldraw")

Valid categories

getting-started, configuration, editor-api, ui, layout, events, shapes/tools, collaboration, data/assets, use-cases

Example file

Naming

  • PascalCase ending with "Example": CustomCanvasExample.tsx, ButtonExample.tsx
  • Name should correspond to the folder name and title

Structure

import { Tldraw } from 'tldraw'
import 'tldraw/tldraw.css'

export default function MyExampleExample() {
	return (
		<div className="tldraw__editor">
			<Tldraw />
		</div>
	)
}

Requirements:

  • Must have a default export React component
  • Use tldraw__editor class for full-page examples
  • Import tldraw/tldraw.css for styles

Layout

  • Full page: wrap in <div className="tldraw__editor">
  • Inset: see existing examples for page layout patterns

Styles

  • Put CSS in a separate file named after the example: my-example.css
  • Import alongside tldraw CSS: import './my-example.css'
  • Avoid extensive inline styles via the style prop

Control panels

For examples that need buttons or controls, use the TopPanel component slot with TldrawUiButton:

import { Tldraw, TldrawUiButton, useEditor } from 'tldraw'
import 'tldraw/tldraw.css'
import './my-example.css'

function MyControls() {
	const editor = useEditor()
	return (
		<div className="tlui-menu my-controls">
			<TldrawUiButton type="normal" onClick={() => editor.zoomIn()}>
				Zoom in
			</TldrawUiButton>
			<TldrawUiButton type="normal" onClick={() => editor.zoomOut()}>
				Zoom out
			</TldrawUiButton>
		</div>
	)
}

export default function MyExampleExample() {
	return (
		<div className="tldraw__editor">
			<Tldraw components={{ TopPanel: MyControls }} />
		</div>
	)
}

CSS for control panels:

.my-controls {
	display: flex;
	flex-wrap: wrap;
	margin: 8px;
}

Comments

Use footnote format with numbered references:

import { Tldraw, type TLComponents } from 'tldraw'
import 'tldraw/tldraw.css'

// [1]
const components: TLComponents = {
	PageMenu: null,
}

export default function CustomComponentsExample() {
	return (
		<div className="tldraw__editor">
			{/* [2] */}
			<Tldraw components={components} />
		</div>
	)
}

/*
[1]
Define component overrides outside the React component so they're static.
If defined inside, use useMemo to prevent recreation on every render.

[2]
Pass component overrides via the components prop.
*/

Example types

Tight examples

  • Narrow focus on a specific SDK feature
  • Minimal styling
  • Meant to be read, not used
  • Remove any extraneous code

Use-case examples

  • Show a recognizable user experience
  • Prioritize clarity and completeness
  • Category: use-cases

Additional files

  • Split complex code into separate files if it distracts from the example's purpose
  • Example: complex input component in Input.tsx
  • Keep the main example file focused on demonstrating the concept

Important

  • Follow React and TypeScript best practices
  • Never use title case for titles - use sentence case
  • Keep examples minimal and focused

tldraw의 다른 스킬

review-docs
tldraw
문서를 병렬 평가와 반복적 개선 루프를 통해 검토하고 개선합니다.
official
clean-copy
tldraw
현재 브랜치를 깔끔하고 서사적인 품질의 git 커밋 기록을 가진 새 브랜치로 재구현합니다. 깔끔한 복사 브랜치를 만들거나 커밋을 정리하라는 요청이 있을 때 사용하세요.
official
commit-changes
tldraw
현재 변경 사항에 대한 git 커밋을 생성합니다. 커밋 요청, 커밋 생성, 커밋 메시지 생성, 또는 현재 작업 트리를 커밋하라는 요청을 받았을 때 사용합니다.
official
dotcom-release-crew
tldraw
Post to the
official
dotcom-release-marketing
tldraw
이번 주 tldraw.com(dotcom) 릴리스에서 제공되는 내용을 평이한 언어로 요약하여 마케팅 팀의 Discord 채널에 게시합니다. 준비할 때 사용하세요…
official
issue
tldraw
사용자 설명을 바탕으로 tldraw 저장소에 GitHub 이슈를 생성하고 조사합니다. 사용자가 이슈를 언급하거나, 이슈 생성을 요청하거나, 버그를 신고할 때 사용합니다.
official
pr
tldraw
현재 브랜치를 tldraw 저장소에 풀 리퀘스트로 생성하거나 업데이트합니다. 사용자가 pr을 호출하거나, PR 생성을 요청하거나, 기존 PR을 업데이트하거나, 푸시할 때 사용합니다.
official
pr-walkthrough
tldraw
풀 리퀘스트의 내레이션이 포함된 비디오 워크스루를 코드 슬라이드와 오디오 내레이션으로 생성합니다. PR 워크스루, PR 비디오 또는 워크스루를 요청받았을 때 사용하세요.
official