Virtual whiteboard for sketching hand-drawn like diagrams
 
 
 
 
Go to file
Alex Kim 6459ccda6a
feat: add flipping for multiple elements ()
* feat: add flipping when resizing multiple elements

* fix: image elements not flipping its content

* test: fix accidental resizing in grouping test

* fix: angles not flipping vertically when resizing

* feat: add flipping multiple elements with a command

* revert: image elements not flipping its content

This reverts commit cb989a6c66e62a02a8c04ce41f12507806c8d0a0.

* fix: add special cases for flipping text & images

* fix: a few corner cases for flipping

* fix: remove angle flip

* fix: bound text scaling when resizing

* fix: linear elements drifting away after multiple flips

* revert: fix linear elements drifting away after multiple flips

This reverts commit bffc33dd3f.

* fix: linear elements unstable bounds

* revert: linear elements unstable bounds

This reverts commit 22ae9b02c4.

* fix: hand-drawn lines shift after flipping

* test: fix flipping tests

* test: fix the number of context menu items

* fix: incorrect scaling due to ignoring bound text when finding selection bounds

* fix: bound text coordinates not being updated

* fix: lines bound text rotation

* fix: incorrect placement of bound lines on flip

* remove redundant predicates in actionFlip

* update test

* refactor resizeElement with some renaming and comments

* fix grouped bounded text elements not being flipped correctly

* combine mutation for bounded text element

* remove incorrect return

* fix: linear elements bindings after flipping

* revert: remove incorrect return

This reverts commit e6b205ca90.

* fix: minimum size for all elements in selection

---------

Co-authored-by: Ryan Di <ryan.weihao.di@gmail.com>
.codesandbox chore: update CodeSandbox links and add a config ()
.github fix: Revert add version tags to Docker build ()
.husky build: temporarily disable pre-commit ()
dev-docs style: Removes extra spaces ()
firebase-project fix: update `storage.rules` ()
public feat: testing simple analytics and fathom analytics for better privacy of the users ()
scripts fix: add readme back to npm package which was mistakenly removed ()
src feat: add flipping for multiple elements ()
.dockerignore build: stops ignoring .env files from docker context so env variables get set during react app build. ()
.editorconfig add editorconfig ()
.env.development feat: starting migration from GA to Matomo for better privacy ()
.env.production feat: starting migration from GA to Matomo for better privacy ()
.eslintignore feat: image support ()
.eslintrc.json chore: Update Typescript to 4.4.4 ()
.gitattributes Add gitattributes ()
.gitignore fix: show error message when measureText API breaks in brave ()
.lintstagedrc.js Keep errors, elements and comments consistent ()
.npmrc feat: color picker redesign ()
.nvmrc Chore: Update .nvmrc to match package.json engines definition ()
.prettierignore Change target branch of coverage and pretty print ()
.watchmanconfig Don't reset cache while zooming using a gesture ()
CHANGELOG.md support embedding scene data to PNG/SVG ()
CONTRIBUTING.md docs: migrating dev docs to docusaurus :) ()
Dockerfile fix: docker build architecture:linux/amd64 error occur on linux/arm64 instance ()
LICENSE Add MIT License ()
README.md docs: fix closing tag in readme (
crowdin.yml Locale
docker-compose.yml chore: Update action versions and docker build ()
package.json feat: color picker redesign ()
tsconfig-types.json chore: bump typescript@4.5.2 ()
tsconfig.json chore: bump typescript@4.5.2 ()
vercel.json feat: redirect vscode.excalidraw.com to vscode marketplace ()
yarn.lock feat: color picker redesign ()

README.md

Excalidraw

Excalidraw Editor | Blog | Documentation | Excalidraw+

An open source virtual hand-drawn style whiteboard.
Collaborative and end-to-end encrypted.


Excalidraw is released under the MIT license. PRs welcome! Chat on Discord Follow Excalidraw on Twitter

Product showcase

Create beautiful hand-drawn like diagrams, wireframes, or whatever you like.

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

Integrations

Who's integrating Excalidraw

Google CloudMetaCodeSandboxObsidian ExcalidrawReplitSliteNotionHackerRank • 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:

Vercel Sentry Crowdin