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
417 lines
10 KiB
Markdown
417 lines
10 KiB
Markdown
# 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.
|