You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Introducing independent change detection for appState and elements Generalizing object change, cleanup, refactoring, comments, solving typing issues Shaping increment, change, delta hierarchy Structural clone of elements Introducing store and incremental API Disabling buttons for canvas actions, smaller store and changes improvements Update history entry based on latest changes, iterate through the stack for visible changes to limit empty commands Solving concurrency issues, solving (partly) linear element issues, introducing commitToStore breaking change Fixing existing tests, updating snapshots Trying to be smarter on the appstate change detection Extending collab test, refactoring action / updateScene params, bugfixes Resetting snapshots Resetting snapshots UI / API tests for history - WIP Changing actions related to the observed appstate to at least update the store snapshot - WIP Adding skipping of snapshot update flag for most no-breaking changes compatible solution Ignoring uncomitted elements from local async actions, updating store directly in updateScene Bound element issues - WIP |
1 year ago | |
---|---|---|
.codesandbox | 2 years ago | |
.github | 2 years ago | |
.husky | 2 years ago | |
dev-docs | 1 year ago | |
excalidraw-app | 1 year ago | |
firebase-project | 3 years ago | |
public | 2 years ago | |
scripts | 2 years ago | |
src | 1 year ago | |
.dockerignore | 2 years ago | |
.editorconfig | 5 years ago | |
.env.development | 2 years ago | |
.env.production | 2 years ago | |
.eslintignore | 3 years ago | |
.eslintrc.json | 3 years ago | |
.gitattributes | 5 years ago | |
.gitignore | 2 years ago | |
.lintstagedrc.js | 4 years ago | |
.npmrc | 2 years ago | |
.nvmrc | 2 years ago | |
.prettierignore | 5 years ago | |
.watchmanconfig | 5 years ago | |
CONTRIBUTING.md | 2 years ago | |
Dockerfile | 2 years ago | |
LICENSE | 5 years ago | |
README.md | 1 year ago | |
crowdin.yml | 5 years ago | |
docker-compose.yml | 4 years ago | |
index.html | 2 years ago | |
package.json | 1 year ago | |
tsconfig-types.json | 2 years ago | |
tsconfig.json | 2 years ago | |
vercel.json | 3 years ago | |
vite.config.ts | 2 years ago | |
vitest.config.ts | 1 year ago | |
yarn.lock | 1 year ago |
README.md

Excalidraw Editor | Blog | Documentation | Excalidraw+
An open source virtual hand-drawn style whiteboard.
Collaborative and end-to-end encrypted.
Features
The Excalidraw editor (npm package) supports:
- 💯 Free & open-source.
- 🎨 Infinite, canvas-based whiteboard.
- ✍️ Hand-drawn like style.
- 🌓 Dark mode.
- 🏗️ Customizable.
- 📷 Image support.
- 😀 Shape libraries support.
- 👅 Localization (i18n) support.
- 🖼️ Export to PNG, SVG & clipboard.
- 💾 Open format - export drawings as an
.excalidraw
json file. - ⚒️ Wide range of tools - rectangle, circle, diamond, arrow, line, free-draw, eraser...
- ➡️ Arrow-binding & labeled arrows.
- 🔙 Undo / Redo.
- 🔍 Zoom and panning support.
Excalidraw.com
The app hosted at excalidraw.com is a minimal showcase of what you can build with Excalidraw. Its source code is part of this repository as well, and the app features:
- 📡 PWA support (works offline).
- 🤼 Real-time collaboration.
- 🔒 End-to-end encryption.
- 💾 Local-first support (autosaves to the browser).
- 🔗 Shareable links (export to a readonly link you can share with others).
We'll be adding these features as drop-in plugins for the npm package in the future.
Quick start
Install the Excalidraw npm package:
npm install react react-dom @excalidraw/excalidraw
or via yarn
yarn add react react-dom @excalidraw/excalidraw
Don't forget to check out our Documentation!
Contributing
- Missing something or found a bug? Report here.
- Want to contribute? Check out our contribution guide or let us know on Discord.
- Want to help with translations? See the translation guide.
Integrations
Who's integrating Excalidraw
Google Cloud • Meta • CodeSandbox • Obsidian Excalidraw • Replit • Slite • Notion • HackerRank • and many others
Sponsors & support
If you like the project, you can become a sponsor at Open Collective or use Excalidraw+.
Thank you for supporting Excalidraw
Last but not least, we're thankful to these companies for offering their services for free: