Virtual whiteboard for sketching hand-drawn like diagrams
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.
 
 
 
 
Go to file
Aakansha Doshi 3ea07076ad
feat: support creating containers, linear elements, text containers, labelled arrows and arrow bindings programatically (#6546)
* feat: support creating text containers programatically

* fix

* fix

* fix

* fix

* update api to use label

* fix api and support individual shapes and text element

* update test case in package example

* support creating arrows and line

* support labelled arrows

* add in package example

* fix alignment

* better types

* fix

* keep element as is unless we support prog api

* fix tests

* fix lint

* ignore

* support arrow bindings via start and end in api

* fix lint

* fix coords

* support id as well for elements

* preserve bindings if present and fix testcases

* preserve bindings for labelled arrows

* support ids, clean up code and move the api related stuff to transform.ts

* allow multiple arrows to bind to single element

* fix singular elements

* fix single text element, unique id and tests

* fix lint

* fix

* support binding arrow to text element

* fix creation of regular text

* use same stroke color as parent for text containers and height 0 for linear element by default

* fix types

* fix

* remove more ts ignore

* remove ts ignore

* remove

* Add coverage script

* Add tests

* fix tests

* make type optional when id present

* remove type when id provided in tests

* Add more tests

* tweak

* let host call convertToExcalidrawElements when using programmatic API

* remove convertToExcalidrawElements call from restore

* lint

* update snaps

* Add new type excalidraw-api/clipboard for programmatic api

* cleanup

* rename tweak

* tweak

* make image attributes optional and better ts check

* support image via programmatic API

* fix lint

* more types

* make fileId mandatory for image and export convertToExcalidrawElements

* fix

* small tweaks

* update snaps

* fix

* use Object.assign instead of mutateElement

* lint

* preserve z-index by pushing all elements first and then add bindings

* instantiate instead of closure for storing elements

* use element API to create regular text, diamond, ellipse and rectangle

* fix snaps

* udpdate api

* ts fixes

* make `convertToExcalidrawElements` more typesafe

* update snaps

* refactor the approach so that order of elements doesn't matter

* Revert "update snaps"

This reverts commit 621dfadccf.

* review fixes

* rename ExcalidrawProgrammaticElement -> ExcalidrawELementSkeleton

* Add tests

* give preference to first element when duplicate ids found

* use console.error

---------

Co-authored-by: dwelle <luzar.david@gmail.com>
2 years ago
.codesandbox chore: update required node version to 18 (#6837) 2 years ago
.github test: add coverage report for PR (#6840) 2 years ago
.husky build: temporarily disable pre-commit (#6132) 2 years ago
dev-docs docs: add note for tests that have requisites (#6856) 2 years ago
firebase-project fix: update `storage.rules` (#5020) 3 years ago
public fix: add self destroying service-worker.js to migrate everyone from CRA to Vite (#6833) 2 years ago
scripts fix: use subdirectory for @excalidraw/excalidraw size limit (#6787) 2 years ago
src feat: support creating containers, linear elements, text containers, labelled arrows and arrow bindings programatically (#6546) 2 years ago
.dockerignore build: stops ignoring .env files from docker context so env variables get set during react app build. (#5809) 2 years ago
.editorconfig add editorconfig (#1198) 5 years ago
.env.development build: migrate to Vite 🚀 (#6818) 2 years ago
.env.production fix: forgotten REACT_APP env variables (#6834) 2 years ago
.eslintignore feat: image support (#4011) 3 years ago
.eslintrc.json chore: Update Typescript to 4.4.4 (#4188) 3 years ago
.gitattributes Add gitattributes (#2164) 4 years ago
.gitignore build: migrate to Vite 🚀 (#6818) 2 years ago
.lintstagedrc.js Keep errors, elements and comments consistent (#2340) 4 years ago
.npmrc feat: color picker redesign (#6216) 2 years ago
.nvmrc chore: update required node version to 18 (#6837) 2 years ago
.prettierignore Change target branch of coverage and pretty print (#1850) 5 years ago
.watchmanconfig Don't reset cache while zooming using a gesture (#1103) 5 years ago
CHANGELOG.md support embedding scene data to PNG/SVG (#2219) 4 years ago
CONTRIBUTING.md docs: migrating dev docs to docusaurus :) (#6073) 2 years ago
Dockerfile build: update to node 18 in docker (#6822) 2 years ago
LICENSE Add MIT License (#176) 5 years ago
README.md docs: fix closing tag in readme (#6424 2 years ago
crowdin.yml Locale 5 years ago
docker-compose.yml chore: Update action versions and docker build (#3065) 4 years ago
index.html build: migrate to Vite 🚀 (#6818) 2 years ago
package.json test: add coverage report for PR (#6840) 2 years ago
tsconfig-types.json build: migrate to Vite 🚀 (#6818) 2 years ago
tsconfig.json build: migrate to Vite 🚀 (#6818) 2 years ago
vercel.json feat: redirect vscode.excalidraw.com to vscode marketplace (#5285) 3 years ago
vite.config.ts fix: add self destroying service-worker.js to migrate everyone from CRA to Vite (#6833) 2 years ago
vitest.config.ts test: add coverage report for PR (#6840) 2 years ago
yarn.lock test: add coverage report for PR (#6840) 2 years ago

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