snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
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
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
This commit is contained in:
416
apps/vscode/DOCS.md
Normal file
416
apps/vscode/DOCS.md
Normal file
@@ -0,0 +1,416 @@
|
||||
# VS Code Extension Documentation
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
### What is the tldraw VS Code Extension?
|
||||
|
||||
The tldraw VS Code extension brings the full power of tldraw's infinite canvas directly into your code editor. You can create, view, and edit `.tldr` files seamlessly within VS Code, making it perfect for sketching ideas, creating diagrams, wireframes, and visual documentation alongside your code.
|
||||
|
||||
This extension provides a native editing experience that's fully compatible with tldraw.com, so you can start a drawing in VS Code and continue it in the browser, or vice versa.
|
||||
|
||||
### Installation
|
||||
|
||||
Install the extension directly from the VS Code marketplace:
|
||||
|
||||
1. Open VS Code
|
||||
2. Go to Extensions (Ctrl+Shift+X / Cmd+Shift+X)
|
||||
3. Search for "tldraw"
|
||||
4. Click Install
|
||||
|
||||
Alternatively, you can install from a `.vsix` file by running:
|
||||
|
||||
```bash
|
||||
code --install-extension tldraw-vscode.vsix
|
||||
```
|
||||
|
||||
### Quick Start
|
||||
|
||||
Here's how to get started with your first tldraw file:
|
||||
|
||||
```bash
|
||||
# Create a new .tldr file
|
||||
touch my-diagram.tldr
|
||||
|
||||
# Open it in VS Code - the tldraw editor will launch automatically
|
||||
code my-diagram.tldr
|
||||
```
|
||||
|
||||
You'll immediately have access to the full tldraw toolset: drawing, shapes, text, arrows, and more.
|
||||
|
||||
## 2. Core Features
|
||||
|
||||
### File Support
|
||||
|
||||
The extension provides comprehensive support for tldraw files:
|
||||
|
||||
**Supported File Types**
|
||||
|
||||
- `.tldr` files - Native tldraw format
|
||||
- `.tldr.json` files - JSON representation of tldraw documents
|
||||
|
||||
**File Operations**
|
||||
|
||||
- Create new tldraw files via Command Palette (`Cmd/Ctrl+Shift+P` → "tldraw: New Project")
|
||||
- Open existing `.tldr` files with automatic editor activation
|
||||
- Auto-save changes as you work
|
||||
- Full bidirectional compatibility with tldraw.com
|
||||
|
||||
### Drawing and Design Tools
|
||||
|
||||
You have access to tldraw's complete toolset within VS Code:
|
||||
|
||||
**Core Drawing Tools**
|
||||
|
||||
- **Select Tool** - Move, resize, and modify shapes
|
||||
- **Draw Tool** - Freehand drawing with pressure sensitivity support
|
||||
- **Eraser Tool** - Remove parts of drawings or entire shapes
|
||||
- **Hand Tool** - Pan around the infinite canvas
|
||||
|
||||
**Shape Creation**
|
||||
|
||||
- **Rectangle** - Perfect for wireframes and layouts
|
||||
- **Ellipse** - Circles and ovals for diagrams
|
||||
- **Arrow** - Connect ideas with labeled arrows
|
||||
- **Line** - Straight lines with various styles
|
||||
- **Text** - Rich text with formatting options
|
||||
- **Sticky Notes** - Great for brainstorming and annotations
|
||||
|
||||
**Advanced Features**
|
||||
|
||||
- Infinite canvas with smooth zoom and pan
|
||||
- Layer management and grouping
|
||||
- Shape styling (colors, fills, strokes)
|
||||
- Snap-to-grid and alignment tools
|
||||
- Undo/redo with full history
|
||||
|
||||
### Editor Integration
|
||||
|
||||
The extension integrates seamlessly with VS Code's interface:
|
||||
|
||||
**Custom Editor Provider**
|
||||
|
||||
- Native VS Code editor experience for `.tldr` files
|
||||
- Appears in editor tabs like any other file
|
||||
- Works with VS Code's split-pane layout
|
||||
- Respects VS Code's theme settings (light/dark mode)
|
||||
|
||||
**Keyboard Shortcuts**
|
||||
|
||||
- `Cmd/Ctrl +` - Zoom in
|
||||
- `Cmd/Ctrl -` - Zoom out
|
||||
- `Cmd/Ctrl 0` - Reset zoom to fit content
|
||||
- `Cmd/Ctrl D` - Toggle dark mode
|
||||
|
||||
**Command Palette Integration**
|
||||
|
||||
- "tldraw: New Project" - Create a new `.tldr` file
|
||||
- All commands prefixed with "tldraw:" for easy discovery
|
||||
|
||||
## 3. Working with Files
|
||||
|
||||
### Creating New Projects
|
||||
|
||||
You can create new tldraw files in several ways:
|
||||
|
||||
**Via Command Palette**
|
||||
|
||||
```bash
|
||||
# Open Command Palette
|
||||
Cmd/Ctrl + Shift + P
|
||||
|
||||
# Type and select
|
||||
tldraw: New Project
|
||||
```
|
||||
|
||||
This creates a new untitled `.tldr` file and opens it in the tldraw editor.
|
||||
|
||||
**Via File Explorer**
|
||||
|
||||
```bash
|
||||
# Create an empty .tldr file
|
||||
touch project-wireframes.tldr
|
||||
|
||||
# VS Code will automatically open it with the tldraw editor
|
||||
```
|
||||
|
||||
**Programmatically**
|
||||
You can also create `.tldr` files through VS Code's file system APIs if you're building extensions or automation.
|
||||
|
||||
### File Persistence and Auto-Save
|
||||
|
||||
The extension handles file persistence automatically:
|
||||
|
||||
**Auto-Save Behavior**
|
||||
|
||||
- Changes are automatically saved as you work
|
||||
- No need to manually save (Cmd/Ctrl+S) in most cases
|
||||
- File modification indicators work as expected in VS Code
|
||||
|
||||
**File Format**
|
||||
|
||||
- Files are stored in tldraw's native binary format
|
||||
- Optimized for performance and file size
|
||||
- Maintains full compatibility with tldraw.com
|
||||
|
||||
### Cross-Platform Compatibility
|
||||
|
||||
Your `.tldr` files work seamlessly across platforms:
|
||||
|
||||
**Browser Integration**
|
||||
|
||||
- Upload files directly to tldraw.com
|
||||
- Download files from tldraw.com to edit in VS Code
|
||||
- No conversion needed - files are fully compatible
|
||||
|
||||
**Sharing and Collaboration**
|
||||
|
||||
- Share `.tldr` files like any other project asset
|
||||
- Version control friendly (though binary diffs aren't human-readable)
|
||||
- Works great in shared repositories and project folders
|
||||
|
||||
## 4. Development and Customization
|
||||
|
||||
### Extension Architecture
|
||||
|
||||
The extension consists of two main components working together:
|
||||
|
||||
**Extension Process** (`apps/vscode/extension/`)
|
||||
|
||||
- Handles VS Code integration and file system operations
|
||||
- Manages the custom editor provider registration
|
||||
- Coordinates between VS Code APIs and the webview editor
|
||||
|
||||
**Webview Editor** (`apps/vscode/editor/`)
|
||||
|
||||
- React-based tldraw editor running in a webview
|
||||
- Full tldraw SDK implementation with complete feature set
|
||||
- Handles real-time drawing, user interactions, and state management
|
||||
|
||||
### Communication System
|
||||
|
||||
The extension uses a robust RPC (Remote Procedure Call) system for communication:
|
||||
|
||||
**Bidirectional Messaging**
|
||||
|
||||
```ts
|
||||
// Extension to webview
|
||||
webview.postMessage({
|
||||
type: 'openFile',
|
||||
data: { content: fileContent },
|
||||
})
|
||||
|
||||
// Webview to extension
|
||||
message.addEventListener('message', (event) => {
|
||||
if (event.data.type === 'fileChanged') {
|
||||
// Save changes to disk
|
||||
saveFile(event.data.content)
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
**File Change Synchronization**
|
||||
|
||||
- Real-time sync between editor state and file system
|
||||
- Automatic conflict resolution for external file changes
|
||||
- Efficient delta updates to minimize data transfer
|
||||
|
||||
### Hot Reload Development
|
||||
|
||||
For extension developers, the build system supports hot reload:
|
||||
|
||||
**Development Setup**
|
||||
|
||||
```bash
|
||||
# Start extension development with hot reload
|
||||
cd apps/vscode
|
||||
yarn dev
|
||||
|
||||
# This starts both extension and editor in watch mode
|
||||
# Extension reloads automatically when files change
|
||||
```
|
||||
|
||||
**Development Workflow**
|
||||
|
||||
1. Make changes to extension or editor code
|
||||
2. Extension automatically recompiles and reloads
|
||||
3. Test changes immediately in VS Code Extension Development Host
|
||||
4. No need to manually rebuild or restart
|
||||
|
||||
### External Content Handling
|
||||
|
||||
The extension can handle external content intelligently:
|
||||
|
||||
**Link Unfurling**
|
||||
|
||||
- Paste URLs to automatically create rich link previews
|
||||
- Supports common sites with Open Graph metadata
|
||||
- Configurable unfurling behavior
|
||||
|
||||
**Asset Management**
|
||||
|
||||
- Drag and drop images directly into drawings
|
||||
- Automatic asset optimization and caching
|
||||
- Support for various image formats
|
||||
|
||||
## 5. Advanced Usage
|
||||
|
||||
### Performance Optimization
|
||||
|
||||
The extension is optimized for performance in VS Code:
|
||||
|
||||
**Memory Management**
|
||||
|
||||
- Efficient webview lifecycle management
|
||||
- Automatic cleanup when files are closed
|
||||
- Optimized rendering for large documents
|
||||
|
||||
**File Loading**
|
||||
|
||||
- Lazy loading of large `.tldr` files
|
||||
- Progressive rendering for complex drawings
|
||||
- Background processing for file operations
|
||||
|
||||
**Zoom and Pan Performance**
|
||||
|
||||
- Hardware-accelerated rendering where available
|
||||
- Smooth interactions even with complex drawings
|
||||
- Efficient viewport culling for large canvases
|
||||
|
||||
### Integration with VS Code Features
|
||||
|
||||
The extension works well with VS Code's ecosystem:
|
||||
|
||||
**Multi-Root Workspaces**
|
||||
|
||||
- Full support for multi-root workspace configurations
|
||||
- Proper file path resolution across workspace folders
|
||||
- Consistent behavior regardless of workspace setup
|
||||
|
||||
**Split Editors**
|
||||
|
||||
- Open multiple `.tldr` files in split panes
|
||||
- Compare different versions side-by-side
|
||||
- Works with VS Code's editor group management
|
||||
|
||||
**Extension Compatibility**
|
||||
|
||||
- Compatible with other VS Code extensions
|
||||
- Respects VS Code's theme and color customizations
|
||||
- Works with productivity extensions like project managers
|
||||
|
||||
### Troubleshooting Common Issues
|
||||
|
||||
**File Won't Open**
|
||||
|
||||
- Ensure the file has a `.tldr` or `.tldr.json` extension
|
||||
- Check that the file isn't corrupted or empty
|
||||
- Try creating a new file to test the extension
|
||||
|
||||
**Performance Issues**
|
||||
|
||||
- Close unused `.tldr` files to free memory
|
||||
- Restart VS Code if webviews become unresponsive
|
||||
- Check VS Code's output panel for error messages
|
||||
|
||||
**Sync Issues with tldraw.com**
|
||||
|
||||
- Verify file format compatibility
|
||||
- Try re-saving the file in VS Code
|
||||
- Check for any file permission issues
|
||||
|
||||
## 6. Building and Distribution
|
||||
|
||||
### Development Build
|
||||
|
||||
To build the extension locally:
|
||||
|
||||
**Prerequisites**
|
||||
|
||||
- Node.js 16+ and yarn
|
||||
- VS Code development environment
|
||||
|
||||
**Build Process**
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
cd apps/vscode
|
||||
yarn install
|
||||
|
||||
# Build extension and editor
|
||||
yarn build
|
||||
|
||||
# Package for distribution
|
||||
yarn package
|
||||
```
|
||||
|
||||
This creates a `.vsix` file that can be installed locally or distributed.
|
||||
|
||||
**Development Testing**
|
||||
|
||||
```bash
|
||||
# Start development environment
|
||||
yarn dev
|
||||
|
||||
# This opens VS Code Extension Development Host
|
||||
# Test your changes in the new VS Code window
|
||||
```
|
||||
|
||||
### Publishing
|
||||
|
||||
The extension supports multiple distribution channels:
|
||||
|
||||
**VS Code Marketplace**
|
||||
|
||||
- Automated publishing from CI/CD pipeline
|
||||
- Version tagging based on git branches
|
||||
- Pre-release builds available for testing
|
||||
|
||||
**Manual Installation**
|
||||
|
||||
```bash
|
||||
# Install from local .vsix file
|
||||
code --install-extension tldraw-vscode-*.vsix
|
||||
|
||||
# Or drag the .vsix file into VS Code Extensions view
|
||||
```
|
||||
|
||||
**GitHub Releases**
|
||||
|
||||
- Direct `.vsix` downloads from repository releases
|
||||
- Includes release notes and compatibility information
|
||||
- Tagged versions for stable releases
|
||||
|
||||
### Configuration and Settings
|
||||
|
||||
The extension supports customization through VS Code settings:
|
||||
|
||||
**Available Settings**
|
||||
|
||||
- Theme preferences (auto-detect from VS Code)
|
||||
- Default canvas size and grid settings
|
||||
- Auto-save behavior configuration
|
||||
- Performance optimization toggles
|
||||
|
||||
**Settings Access**
|
||||
|
||||
```json
|
||||
{
|
||||
"tldraw.theme": "auto",
|
||||
"tldraw.autoSave": true,
|
||||
"tldraw.gridSize": 20
|
||||
}
|
||||
```
|
||||
|
||||
Access these through VS Code's Settings UI or directly in `settings.json`.
|
||||
|
||||
## Quality and Best Practices
|
||||
|
||||
This extension follows VS Code's development best practices:
|
||||
|
||||
- **Accessibility** - Full keyboard navigation and screen reader support
|
||||
- **Performance** - Efficient resource usage and memory management
|
||||
- **Security** - Safe handling of user content and external resources
|
||||
- **Internationalization** - Ready for localization and global users
|
||||
- **Error Handling** - Graceful degradation and helpful error messages
|
||||
|
||||
The extension provides a professional-grade drawing experience that integrates seamlessly with your development workflow, making visual thinking and documentation a natural part of your coding process.
|
||||
Reference in New Issue
Block a user