A high-performance, infinite canvas library for React with WebAssembly-powered rendering
Build infinite canvas applications with 2000+ media items at 60 FPS. Powered by WebAssembly, Web Workers, and React.
npm install @convadraw/cloudgridimport { CloudGrid } from '@convadraw/cloudgrid';
import '@convadraw/cloudgrid/cloudgrid.css';
function App() {
return (
<div style={{ width: '100vw', height: '100vh' }}>
<CloudGrid />
</div>
);
}๐ Full Documentation โข ๐ฎ Live Demo โข ๐ฆ NPM Package
| Feature | Description |
|---|---|
| ๐ High Performance | WebAssembly-powered canvas operations with spatial indexing |
| ๐จ 2000+ Items | Handle thousands of media items smoothly at 60 FPS |
| ๐ Undo/Redo | Full history management with batch operations |
| ๐ฏ Smart Selection | Multi-select with rubber band, group move/resize |
| ๐ Grid Snapping | Configurable grid with dynamic visual feedback |
| ๐ Smooth Zoom | Animated camera controls with easing functions |
| ๐ญ LOD System | Level-of-detail rendering for optimal memory usage |
| ๐งต Web Workers | Non-blocking grid rendering and image processing |
| ๐จ Color Sorting | Sort media by dominant RGB colors |
| ๐ฆ TypeScript | Full type safety and IntelliSense support |
โ
2000+ media items at 60 FPS
โ
<400MB memory usage with high-res images
โ
Smooth animations with hardware acceleration
โ
Non-blocking operations via Web Workers
โ
Instant undo/redo for all operations
CloudGrid is built as a monorepo with multiple packages:
cloudgrid/
โโโ packages/
โ โโโ cloudgrid/ # Main React SDK
โ โโโ wasm/ # WebAssembly module (AssemblyScript)
โ โโโ editor/ # Core editor logic
โ โโโ state/ # State management
โ โโโ primitives/ # Math utilities
โโโ apps/
โโโ www/ # Demo application
- React 18 - UI framework with concurrent features
- Konva.js - High-performance canvas rendering
- AssemblyScript - WebAssembly compilation for critical operations
- Web Workers - Background processing for grid rendering & image loading
- Tailwind CSS v4 - Modern utility-first styling
- TypeScript - End-to-end type safety
- Turborepo - Fast, scalable monorepo build system
The main React SDK. This is what you install and use in your applications.
npm install @convadraw/cloudgridWebAssembly module for high-performance canvas operations:
- Spatial indexing (Quadtree)
- Viewport culling
- Grid snapping
- Command history (undo/redo)
- Batch operations
Framework-agnostic editor logic.
Centralized state management.
Math utilities (vectors, boxes, snapping).
- Design Tools: Build Figma-like design applications
- Image Galleries: Infinite scrolling image galleries
- Mood Boards: Create visual mood boards with 1000s of images
- Photo Editors: Build photo organization and editing tools
- Data Visualization: Visualize large datasets on infinite canvas
- Whiteboarding: Real-time collaborative whiteboarding apps
npm install @convadraw/cloudgridimport '@convadraw/cloudgrid/cloudgrid.css';import { CloudGrid } from '@convadraw/cloudgrid';
function App() {
return <CloudGrid />;
}import { CloudGrid, useCamera, selectItems, zoomToSelected } from '@convadraw/cloudgrid';
function App() {
const camera = useCamera();
return (
<>
<button onClick={() => camera.resetView()}>Reset</button>
<CloudGrid />
</>
);
}Try the live demo: https://yourusername.github.io/cloudgrid
Or run locally:
git clone https://github.com/yourusername/cloudgrid.git
cd cloudgrid
npm install
npm run devThis is a Turborepo monorepo. To get started:
- Node.js 18+
- npm 9+
# Clone the repository
git clone https://github.com/yourusername/cloudgrid.git
cd cloudgrid
# Install dependencies
npm install
# Build all packages
npm run build
# Run demo app
cd apps/www
npm run devnpm run build # Build all packages
npm run dev # Start demo app
npm run lint # Lint all packages
npm run test # Run tests (when available)
npm run clean # Clean build artifactsTo develop a specific package:
# Build WASM module
cd packages/wasm
npm run build
# Build React SDK
cd packages/cloudgrid
npm run build
# Watch mode (auto-rebuild)
npm run build -- --watchWe welcome contributions! Please see CONTRIBUTING.md for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Use TypeScript for all new code
- Follow existing code style (ESLint)
- Add tests for new features
- Update documentation
MIT ยฉ 2026 - see LICENSE for details
- Inspired by tldraw - Excellent infinite canvas library
- Built with Konva.js - HTML5 2D canvas library
- Icons by Phosphor Icons - Beautiful icon family
- Styled with Tailwind CSS - Utility-first CSS framework
- ๐ Documentation
- ๐ Issue Tracker
- ๐ฌ Discussions
- ๐ง Email
- React Native support
- Video support
- Text editing
- Real-time collaboration
- Export to PNG/SVG
- Layers & groups
- Custom shapes
- Pen tool
- Animation timeline
If you find CloudGrid useful, please consider giving it a star! โญ
Made with โค๏ธ by the CloudGrid team
