We use cookies to enhance your experience on the site
CodeWorlds
Back to collections
Guide26 min read

Excalidraw

Excalidraw is a virtual whiteboard for drawing hand-drawn style diagrams with real-time collaboration and SVG/PNG export.

Excalidraw - Kompletny Przewodnik po Wirtualnej Tablicy do Diagramรณw

Czym jest Excalidraw?

Excalidraw to open-source'owa wirtualna tablica do rysowania diagramรณw w charakterystycznym stylu "hand-drawn" (rฤ™cznie rysowanym). W przeciwieล„stwie do tradycyjnych narzฤ™dzi do diagramรณw jak Lucidchart czy draw.io, Excalidraw celowo produkuje niedoskonaล‚e, "ludzkie" linie i ksztaล‚ty, co sprawia, ลผe diagramy wyglฤ…dajฤ… naturalnie i nieformalnie - idealnie do szkicowania pomysล‚รณw, brainstormingu i komunikacji technicznej.

Excalidraw zostaล‚ stworzony przez Christophera Chedeau (byล‚ego inลผyniera Facebook) w 2020 roku i szybko zdobyล‚ ogromnฤ… popularnoล›ฤ‡ w spoล‚ecznoล›ci developerskiej. Narzฤ™dzie jest uลผywane przez zespoล‚y w firmach takich jak Meta, Google, Microsoft i Vercel do dokumentacji technicznej, projektowania systemรณw i wizualizacji architektury.

Dlaczego Excalidraw?

Kluczowe zalety

  1. Hand-drawn style - Naturalny, nieformalny wyglฤ…d zachฤ™cajฤ…cy do iteracji
  2. Instant start - Zero konfiguracji, dziaล‚a w przeglฤ…darce
  3. Real-time collaboration - Wspรณล‚praca w czasie rzeczywistym
  4. Open-source - Darmowy, moลผna hostowaฤ‡ samemu
  5. Privacy-first - End-to-end encryption dla wspรณล‚dzielonych sesji
  6. Libraries ecosystem - Gotowe zestawy ikon i ksztaล‚tรณw
  7. Export flexibility - PNG, SVG, JSON, clipboard
  8. VS Code integration - Natywne rozszerzenie do edycji

Excalidraw vs inne narzฤ™dzia

CechaExcalidrawdraw.ioLucidchartMiro
StylHand-drawnClean/FormalFormalMix
CenaFree/OSSFree$7.95+/mo$8+/mo
Self-hostโœ… Takโœ… TakโŒ NieโŒ Nie
Real-time collabโœ… Takโœ… Takโœ… Takโœ… Tak
E2E encryptionโœ… TakโŒ NieโŒ NieโŒ Nie
VS Codeโœ… ExtensionโŒ NieโŒ NieโŒ Nie
Offlineโœ… PWAโœ… DesktopโŒ NieโŒ Nie

Podstawy Excalidraw

Interfejs uลผytkownika

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Toolbar (narzฤ™dzia)                                             โ”‚
โ”‚  [Select] [Rectangle] [Diamond] [Ellipse] [Arrow] [Line] [Text] โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                  โ”‚
โ”‚                     Canvas (nieskoล„czony)                        โ”‚
โ”‚                                                                  โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                     โ”‚
โ”‚         โ”‚   Twรณj diagram   โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                   โ”‚
โ”‚         โ”‚   (hand-drawn)   โ”‚                โ”‚                   โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ–ผ                   โ”‚
โ”‚                                      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”‚
โ”‚                                      โ”‚ Element  โ”‚               โ”‚
โ”‚                                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ”‚
โ”‚                                                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  [Stroke] [Background] [Fill] [Stroke width] [Sloppiness] [Edge]โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Podstawowe ksztaล‚ty

Code
TEXT
Rectangle (R):
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                โ”‚
โ”‚   Prostokฤ…t    โ”‚
โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Diamond (D):
      โ—‡
     โ•ฑ โ•ฒ
    โ•ฑ   โ•ฒ
   โ—‡ Romb โ—‡
    โ•ฒ   โ•ฑ
     โ•ฒ โ•ฑ
      โ—‡

Ellipse (O):
    โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
   โ•ฑ            โ•ฒ
  โ”‚    Elipsa    โ”‚
   โ•ฒ            โ•ฑ
    โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Arrow (A):
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ

Line (L):
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

Text (T):
  Dowolny tekst

Skrรณty klawiszowe

Code
TEXT
NARZฤ˜DZIA:
1 lub V      - Selection (zaznaczanie)
2 lub R      - Rectangle
3 lub D      - Diamond
4 lub O      - Ellipse (Oval)
5 lub A      - Arrow
6 lub L      - Line
7 lub P      - Draw (wolne rysowanie)
8 lub T      - Text
9            - Image
0 lub E      - Eraser

EDYCJA:
Ctrl/Cmd + D - Duplicate
Ctrl/Cmd + G - Group
Ctrl/Cmd + Shift + G - Ungroup
Ctrl/Cmd + [ - Send backward
Ctrl/Cmd + ] - Bring forward
Ctrl/Cmd + Shift + [ - Send to back
Ctrl/Cmd + Shift + ] - Bring to front
Delete/Backspace - Delete selected

WIDOK:
Ctrl/Cmd + +/- - Zoom in/out
Ctrl/Cmd + 0   - Reset zoom
Ctrl/Cmd + 1   - Fit to content
Space + drag   - Pan canvas
Scroll         - Zoom (with Ctrl) / Pan

EKSPORT:
Ctrl/Cmd + S   - Save to file
Ctrl/Cmd + Shift + E - Export image
Ctrl/Cmd + Shift + C - Copy to clipboard as PNG

Tworzenie diagramรณw

Diagram architektury systemu

Code
TEXT
Przykล‚adowy diagram architektury:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Internet                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
                          โ–ผ
                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                  โ”‚   Cloudflare  โ”‚
                  โ”‚   (CDN/WAF)   โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ–ผ                               โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚    Vercel     โ”‚               โ”‚    Railway    โ”‚
  โ”‚  (Frontend)   โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚   (Backend)   โ”‚
  โ”‚   Next.js     โ”‚    API        โ”‚    NestJS     โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                          โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚                               โ”‚                   โ”‚
          โ–ผ                               โ–ผ                   โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚   Supabase    โ”‚               โ”‚     Neon      โ”‚   โ”‚   Upstash     โ”‚
  โ”‚    (Auth)     โ”‚               โ”‚  (PostgreSQL) โ”‚   โ”‚   (Redis)     โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Database schema diagram

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           users                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ id          โ”‚ uuid        โ”‚ PRIMARY KEY                         โ”‚
โ”‚ email       โ”‚ varchar     โ”‚ UNIQUE NOT NULL                     โ”‚
โ”‚ name        โ”‚ varchar     โ”‚ NOT NULL                            โ”‚
โ”‚ created_at  โ”‚ timestamp   โ”‚ DEFAULT now()                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ”‚ 1:N
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           posts                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ id          โ”‚ uuid        โ”‚ PRIMARY KEY                         โ”‚
โ”‚ title       โ”‚ varchar     โ”‚ NOT NULL                            โ”‚
โ”‚ content     โ”‚ text        โ”‚                                     โ”‚
โ”‚ author_id   โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ users.id              โ”‚
โ”‚ published   โ”‚ boolean     โ”‚ DEFAULT false                       โ”‚
โ”‚ created_at  โ”‚ timestamp   โ”‚ DEFAULT now()                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ”‚ N:M
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      post_tags (junction)                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ post_id     โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ posts.id              โ”‚
โ”‚ tag_id      โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ tags.id               โ”‚
โ”‚ PRIMARY KEY (post_id, tag_id)                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

User flow diagram

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Start  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Landing    โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚   Sign Up   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Email  โ”‚
โ”‚         โ”‚     โ”‚   Page      โ”‚     โ”‚   Form      โ”‚     โ”‚  Verify โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
                      โ”‚                                       โ”‚
                      โ”‚ Already has account                   โ”‚ Verified
                      โ–ผ                                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚   Log In    โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚  Dashboard  โ”‚
                โ”‚   Form      โ”‚                         โ”‚   (Home)    โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚                                       โ”‚
                       โ”‚ Invalid credentials                   โ”‚
                       โ–ผ                                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚   Error     โ”‚                         โ”‚   Feature   โ”‚
                โ”‚   Message   โ”‚                         โ”‚   Pages     โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Biblioteki (Libraries)

Korzystanie z bibliotek

Code
TEXT
1. Kliknij ikonฤ™ "Library" (๐Ÿ“š) w toolbarze
2. Browse libraries lub importuj wล‚asne
3. Przeciฤ…gnij elementy na canvas

Popularne biblioteki:
โ”œโ”€โ”€ Software Architecture
โ”‚   โ”œโ”€โ”€ AWS icons
โ”‚   โ”œโ”€โ”€ Azure icons
โ”‚   โ”œโ”€โ”€ GCP icons
โ”‚   โ””โ”€โ”€ Kubernetes
โ”‚
โ”œโ”€โ”€ UI/UX
โ”‚   โ”œโ”€โ”€ Wireframe kit
โ”‚   โ”œโ”€โ”€ Mobile UI
โ”‚   โ””โ”€โ”€ Web components
โ”‚
โ”œโ”€โ”€ Business
โ”‚   โ”œโ”€โ”€ Flowchart
โ”‚   โ”œโ”€โ”€ Org chart
โ”‚   โ””โ”€โ”€ Process diagrams
โ”‚
โ””โ”€โ”€ Technical
    โ”œโ”€โ”€ Network diagrams
    โ”œโ”€โ”€ Database schemas
    โ””โ”€โ”€ Sequence diagrams

Tworzenie wล‚asnej biblioteki

Code
TypeScript
// Excalidraw library format (.excalidrawlib)
{
  "type": "excalidrawlib",
  "version": 2,
  "source": "https://excalidraw.com",
  "libraryItems": [
    {
      "id": "custom-component-1",
      "status": "published",
      "elements": [
        {
          "type": "rectangle",
          "x": 0,
          "y": 0,
          "width": 200,
          "height": 100,
          "strokeColor": "#1e1e1e",
          "backgroundColor": "#a5d8ff",
          "fillStyle": "solid"
        },
        {
          "type": "text",
          "x": 50,
          "y": 40,
          "text": "Component",
          "fontSize": 16
        }
      ],
      "name": "My Custom Component"
    }
  ]
}

VS Code Extension

Instalacja

Code
Bash
# VS Code Marketplace
code --install-extension pomdtr.excalidraw-editor

# Lub przez GUI:
# Extensions โ†’ Search "Excalidraw" โ†’ Install

Uลผycie

Code
TEXT
1. Utwรณrz plik z rozszerzeniem .excalidraw lub .excalidraw.svg
2. VS Code automatycznie otworzy edytor Excalidraw
3. Rysuj diagramy bezpoล›rednio w IDE
4. Zapisz jako SVG (embeddowalne) lub JSON (edytowalne)

Struktura projektu z Excalidraw:
my-project/
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ architecture.excalidraw.svg
โ”‚   โ”œโ”€โ”€ database-schema.excalidraw
โ”‚   โ””โ”€โ”€ user-flow.excalidraw.png
โ”œโ”€โ”€ src/
โ””โ”€โ”€ README.md

Embedowanie w Markdown

Code
Markdown
<!-- W README.md lub dokumentacji -->

## Architektura Systemu

![System Architecture](./docs/architecture.excalidraw.svg)

## Database Schema

![Database](./docs/database-schema.excalidraw.svg)

## User Flow

<img src="./docs/user-flow.excalidraw.svg" alt="User Flow" width="800">

Excalidraw API i integracja

React Component

Code
TypeScript
// Instalacja
npm install @excalidraw/excalidraw

// App.tsx
import { Excalidraw } from '@excalidraw/excalidraw'

function DiagramEditor() {
  const [excalidrawAPI, setExcalidrawAPI] = useState(null)

  const handleChange = (elements, appState, files) => {
    console.log('Elements changed:', elements)
    // Zapisz do bazy danych lub localStorage
    localStorage.setItem('diagram', JSON.stringify(elements))
  }

  const handleExport = async () => {
    if (!excalidrawAPI) return

    // Export jako PNG
    const blob = await excalidrawAPI.exportToBlob({
      mimeType: 'image/png',
      exportWithDarkMode: false,
      exportBackground: true
    })

    // Download
    const url = URL.createObjectURL(blob)
    const link = document.createElement('a')
    link.href = url
    link.download = 'diagram.png'
    link.click()
  }

  return (
    <div style={{ height: '600px', width: '100%' }}>
      <Excalidraw
        excalidrawAPI={(api) => setExcalidrawAPI(api)}
        onChange={handleChange}
        initialData={{
          elements: JSON.parse(localStorage.getItem('diagram') || '[]'),
          appState: { viewBackgroundColor: '#ffffff' }
        }}
        UIOptions={{
          canvasActions: {
            export: { saveFileToDisk: true }
          }
        }}
      />
      <button onClick={handleExport}>Export PNG</button>
    </div>
  )
}

Collaborative mode

Code
TypeScript
import { Excalidraw } from '@excalidraw/excalidraw'
import { useCollaboration } from './useCollaboration'

function CollaborativeDiagram({ roomId }) {
  const {
    elements,
    collaborators,
    onPointerUpdate,
    onElementsChange
  } = useCollaboration(roomId)

  return (
    <Excalidraw
      initialData={{ elements }}
      onChange={onElementsChange}
      onPointerUpdate={onPointerUpdate}
      isCollaborating={true}
      renderTopRightUI={() => (
        <div className="collaborators">
          {collaborators.map(user => (
            <Avatar key={user.id} name={user.name} color={user.color} />
          ))}
        </div>
      )}
    />
  )
}

// Hook do real-time collaboration (przykล‚ad z Socket.io)
function useCollaboration(roomId) {
  const [elements, setElements] = useState([])
  const [collaborators, setCollaborators] = useState([])
  const socketRef = useRef(null)

  useEffect(() => {
    const socket = io('wss://your-server.com')
    socketRef.current = socket

    socket.emit('join-room', roomId)

    socket.on('elements-update', (newElements) => {
      setElements(newElements)
    })

    socket.on('collaborators-update', (users) => {
      setCollaborators(users)
    })

    return () => socket.disconnect()
  }, [roomId])

  const onElementsChange = useCallback((newElements) => {
    setElements(newElements)
    socketRef.current?.emit('elements-change', {
      roomId,
      elements: newElements
    })
  }, [roomId])

  return { elements, collaborators, onElementsChange }
}

Export do rรณลผnych formatรณw

Code
TypeScript
import { exportToSvg, exportToBlob, serializeAsJSON } from '@excalidraw/excalidraw'

// Export do SVG
const exportSVG = async (elements, appState) => {
  const svg = await exportToSvg({
    elements,
    appState,
    files: null,
    exportPadding: 10
  })

  // SVG jako string
  const svgString = new XMLSerializer().serializeToString(svg)
  return svgString
}

// Export do PNG/JPEG
const exportImage = async (elements, appState, mimeType = 'image/png') => {
  const blob = await exportToBlob({
    elements,
    appState,
    mimeType,
    quality: 0.9, // dla JPEG
    exportWithDarkMode: false
  })

  return blob
}

// Export do JSON (do pรณลบniejszej edycji)
const exportJSON = (elements, appState) => {
  return serializeAsJSON(elements, appState, {}, 'local')
}

// Import z JSON
const importFromJSON = (jsonString) => {
  const data = JSON.parse(jsonString)
  return {
    elements: data.elements,
    appState: data.appState
  }
}

Self-hosting Excalidraw

Docker

Code
DOCKERFILE
# Dockerfile
FROM node:20-alpine AS builder

WORKDIR /app

# Clone Excalidraw
RUN git clone https://github.com/excalidraw/excalidraw.git .

# Install dependencies
RUN yarn install --frozen-lockfile

# Build
RUN yarn build

# Production image
FROM nginx:alpine

COPY --from=builder /app/build /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]
docker-compose.yml
YAML
# docker-compose.yml
version: '3.8'

services:
  excalidraw:
    build: .
    ports:
      - "8080:80"
    restart: unless-stopped

  # Opcjonalnie: backend dla collaboration
  excalidraw-room:
    image: excalidraw/excalidraw-room
    ports:
      - "3002:80"
    environment:
      - PORT=80

Kubernetes

excalidraw-deployment.yaml
YAML
# excalidraw-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: excalidraw
spec:
  replicas: 2
  selector:
    matchLabels:
      app: excalidraw
  template:
    metadata:
      labels:
        app: excalidraw
    spec:
      containers:
        - name: excalidraw
          image: excalidraw/excalidraw:latest
          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "256Mi"
              cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: excalidraw
spec:
  selector:
    app: excalidraw
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: excalidraw
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: excalidraw.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: excalidraw
                port:
                  number: 80

Excalidraw+ (Premium)

Funkcje premium

Code
TEXT
Excalidraw+ ($7/miesiฤ…c lub $60/rok):
โ”‚
โ”œโ”€โ”€ End-to-end encryption
โ”‚   โ””โ”€โ”€ Klucz szyfrujฤ…cy tylko u uลผytkownika
โ”‚
โ”œโ”€โ”€ Wiฤ™kszy storage
โ”‚   โ””โ”€โ”€ Unlimited diagrams
โ”‚   โ””โ”€โ”€ Wiฤ™ksze pliki
โ”‚
โ”œโ”€โ”€ Custom fonts
โ”‚   โ””โ”€โ”€ Import wล‚asnych fontรณw
โ”‚
โ”œโ”€โ”€ Password-protected links
โ”‚   โ””โ”€โ”€ Dodatkowa warstwa bezpieczeล„stwa
โ”‚
โ”œโ”€โ”€ Custom branding
โ”‚   โ””โ”€โ”€ Logo na exportach
โ”‚
โ”œโ”€โ”€ Priority support
โ”‚   โ””โ”€โ”€ Szybsza pomoc
โ”‚
โ””โ”€โ”€ Cloud backup
    โ””โ”€โ”€ Automatyczne backupy

Zastosowania praktyczne

1. Dokumentacja techniczna

Code
Markdown
# System Architecture

## Overview

Nasz system skล‚ada siฤ™ z trzech gล‚รณwnych komponentรณw:

![Architecture Overview](./diagrams/architecture.excalidraw.svg)

### Frontend

Aplikacja Next.js hostowana na Vercel...

### Backend

API NestJS na Railway...

### Database

PostgreSQL na Neon z branching...

2. Code review diagrams

Code
TEXT
PR #123: Refactor authentication flow

Before:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Client  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Server  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚    DB    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚                โ”‚
     โ”‚  Password      โ”‚  Check password
     โ”‚  (plain!)      โ”‚  (slow query!)
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

After:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Client  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Server  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Redis   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚    DB    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚  (cache) โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚                โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚  Hashed        โ”‚  Session
     โ”‚  password      โ”‚  check first
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Meeting notes

Code
TEXT
Sprint Planning - 2025-01-24

Epic: User Dashboard Redesign

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Dashboard MVP                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚
โ”‚  โ”‚  Stats   โ”‚  โ”‚  Chart   โ”‚  โ”‚  Recent  โ”‚              โ”‚
โ”‚  โ”‚  Cards   โ”‚  โ”‚  Widget  โ”‚  โ”‚ Activity โ”‚              โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚
โ”‚                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚
โ”‚  โ”‚           Data Table                     โ”‚           โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚
โ”‚                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Tasks:
โ”œโ”€โ”€ [x] Stats cards component (2 pts) - @alice
โ”œโ”€โ”€ [ ] Chart integration (5 pts) - @bob
โ”œโ”€โ”€ [ ] Activity feed (3 pts) - @charlie
โ””โ”€โ”€ [ ] Data table with pagination (5 pts) - @david

4. Onboarding dokumentacja

Code
TEXT
New Developer Onboarding

Day 1: Setup
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Clone  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚ Install โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Run    โ”‚
โ”‚  Repo   โ”‚     โ”‚  Deps   โ”‚     โ”‚  Dev    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                      โ”‚
                                      โ–ผ
                               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                               โ”‚ Explore UI  โ”‚
                               โ”‚ on :3000    โ”‚
                               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Day 2: First PR
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Read   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Pick   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚ Create  โ”‚
โ”‚  CLAUDE โ”‚     โ”‚  Issue  โ”‚     โ”‚ Branch  โ”‚
โ”‚   .md   โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ”‚
                                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Code   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Test   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Push   โ”‚
โ”‚  Change โ”‚     โ”‚  Local  โ”‚     โ”‚   PR    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Tips & Tricks

Stylizacja elementรณw

Code
TEXT
Stroke styles:
โ”œโ”€โ”€ Solid โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”œโ”€โ”€ Dashed - - - - - -
โ””โ”€โ”€ Dotted ยทยทยทยทยทยทยทยทยทยทยทยท

Fill styles:
โ”œโ”€โ”€ Solid      [โ– โ– โ– โ– โ– โ– โ– โ– ]
โ”œโ”€โ”€ Hachure    [////////]
โ”œโ”€โ”€ Cross-hatch [XXXXXXXX]
โ””โ”€โ”€ None       [        ]

Sloppiness (hand-drawn intensity):
โ”œโ”€โ”€ Architect (0) - Clean lines
โ”œโ”€โ”€ Artist (1) - Slight wobble
โ””โ”€โ”€ Cartoonist (2) - Very wobbly

Edge style:
โ”œโ”€โ”€ Sharp โ”Œโ”€โ”€โ”€โ”€โ”€โ”
โ””โ”€โ”€ Round โ•ญโ”€โ”€โ”€โ”€โ”€โ•ฎ

Keyboard workflow

Code
TEXT
Efektywny workflow:
1. R โ†’ Narysuj rectangle
2. T โ†’ Dodaj tekst wewnฤ…trz
3. A โ†’ Poล‚ฤ…cz strzaล‚kฤ… z innym elementem
4. Ctrl+D โ†’ Duplikuj i przesuล„
5. Ctrl+G โ†’ Grupuj powiฤ…zane elementy
6. Ctrl+Shift+E โ†’ Eksportuj gotowy diagram

Canvas organization

Code
TEXT
Duลผe diagramy - organizacja:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    TITLE AREA                           โ”‚
โ”‚              System Architecture v2.1                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚   SECTION 1  โ”‚                 โ”‚   SECTION 2  โ”‚     โ”‚
โ”‚  โ”‚   Frontend   โ”‚                 โ”‚   Backend    โ”‚     โ”‚
โ”‚  โ”‚              โ”‚                 โ”‚              โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚   SECTION 3  โ”‚                 โ”‚   SECTION 4  โ”‚     โ”‚
โ”‚  โ”‚   Database   โ”‚                 โ”‚   External   โ”‚     โ”‚
โ”‚  โ”‚              โ”‚                 โ”‚   Services   โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚                                                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  LEGEND: [Component] โ”€โ”€โ–บ [Dependency] ยทยทยท> [Optional]  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

FAQ - Czฤ™sto zadawane pytania

Czy Excalidraw jest darmowy?

Tak, podstawowa wersja Excalidraw jest caล‚kowicie darmowa i open-source. Moลผesz uลผywaฤ‡ excalidraw.com bez konta, a takลผe hostowaฤ‡ wล‚asnฤ… instancjฤ™. Excalidraw+ to opcjonalna pล‚atna wersja z dodatkowymi funkcjami jak szyfrowanie i wiฤ™kszy storage.

Jak zapisaฤ‡ diagram offline?

  1. Export do pliku .excalidraw - Peล‚na edytowalnoล›ฤ‡, moลผna otworzyฤ‡ pรณลบniej
  2. Export do SVG - Wektor, moลผna edytowaฤ‡ w Figma/Illustrator
  3. Export do PNG - Raster, do dokumentacji
  4. Copy to clipboard - Szybkie wklejanie do innych aplikacji

Czy mogฤ™ uลผywaฤ‡ Excalidraw w VS Code?

Tak, zainstaluj rozszerzenie "Excalidraw" od pomdtr. Umoลผliwia tworzenie i edycjฤ™ plikรณw .excalidraw bezpoล›rednio w IDE.

Jak wspรณล‚pracowaฤ‡ w czasie rzeczywistym?

  1. Kliknij "Live collaboration" w menu
  2. Udostฤ™pnij wygenerowany link
  3. Kaลผdy z linkiem moลผe edytowaฤ‡
  4. Sesje sฤ… E2E encrypted

Excalidraw vs Mermaid?

  • Excalidraw - Wizualny, drag & drop, hand-drawn style
  • Mermaid - Tekstowy (code-based), auto-layout, formal style

Oba majฤ… zastosowania - Mermaid do prostych flowcharts w markdown, Excalidraw do bardziej kreatywnych diagramรณw.

Podsumowanie

Excalidraw to doskonaล‚e narzฤ™dzie do:

  • Szkicowania architektury - System design, infrastruktura
  • Database schemas - Wizualizacja relacji
  • User flows - UX documentation
  • Wireframes - Szybkie prototypy UI
  • Meeting notes - Wizualne notatki
  • Technical docs - Diagramy w dokumentacji
  • Code reviews - Wyjaล›nianie zmian wizualnie

Hand-drawn style sprawia, ลผe diagramy wyglฤ…dajฤ… nieformalnie, co zachฤ™ca do iteracji i dyskusji - idealne dla zespoล‚รณw agile i dokumentacji technicznej.


Excalidraw - a complete guide to the virtual whiteboard for diagrams

What is Excalidraw?

Excalidraw is an open-source virtual whiteboard for drawing diagrams in a distinctive "hand-drawn" style. Unlike traditional diagramming tools such as Lucidchart or draw.io, Excalidraw intentionally produces imperfect, "human" lines and shapes, making diagrams look natural and informal - perfect for sketching ideas, brainstorming, and technical communication.

Excalidraw was created by Christopher Chedeau (a former Facebook engineer) in 2020 and quickly gained enormous popularity in the developer community. The tool is used by teams at companies like Meta, Google, Microsoft, and Vercel for technical documentation, system design, and architecture visualization.

Why Excalidraw?

Key advantages

  1. Hand-drawn style - Natural, informal look that encourages iteration
  2. Instant start - Zero configuration, works in the browser
  3. Real-time collaboration - Work together in real time
  4. Open-source - Free, can be self-hosted
  5. Privacy-first - End-to-end encryption for shared sessions
  6. Libraries ecosystem - Ready-made icon and shape sets
  7. Export flexibility - PNG, SVG, JSON, clipboard
  8. VS Code integration - Native extension for editing

Excalidraw vs other tools

FeatureExcalidrawdraw.ioLucidchartMiro
StyleHand-drawnClean/FormalFormalMix
PriceFree/OSSFree$7.95+/mo$8+/mo
Self-hostโœ… Yesโœ… YesโŒ NoโŒ No
Real-time collabโœ… Yesโœ… Yesโœ… Yesโœ… Yes
E2E encryptionโœ… YesโŒ NoโŒ NoโŒ No
VS Codeโœ… ExtensionโŒ NoโŒ NoโŒ No
Offlineโœ… PWAโœ… DesktopโŒ NoโŒ No

Excalidraw basics

User interface

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Toolbar (tools)                                                 โ”‚
โ”‚  [Select] [Rectangle] [Diamond] [Ellipse] [Arrow] [Line] [Text] โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                  โ”‚
โ”‚                     Canvas (infinite)                            โ”‚
โ”‚                                                                  โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                     โ”‚
โ”‚         โ”‚   Your diagram   โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                   โ”‚
โ”‚         โ”‚   (hand-drawn)   โ”‚                โ”‚                   โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ–ผ                   โ”‚
โ”‚                                      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”‚
โ”‚                                      โ”‚ Element  โ”‚               โ”‚
โ”‚                                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ”‚
โ”‚                                                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  [Stroke] [Background] [Fill] [Stroke width] [Sloppiness] [Edge]โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Basic shapes

Code
TEXT
Rectangle (R):
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                โ”‚
โ”‚   Rectangle    โ”‚
โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Diamond (D):
      โ—‡
     โ•ฑ โ•ฒ
    โ•ฑ   โ•ฒ
   โ—‡ Diamond โ—‡
    โ•ฒ   โ•ฑ
     โ•ฒ โ•ฑ
      โ—‡

Ellipse (O):
    โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
   โ•ฑ            โ•ฒ
  โ”‚    Ellipse   โ”‚
   โ•ฒ            โ•ฑ
    โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Arrow (A):
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ

Line (L):
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

Text (T):
  Any text here

Keyboard shortcuts

Code
TEXT
TOOLS:
1 or V       - Selection (select elements)
2 or R       - Rectangle
3 or D       - Diamond
4 or O       - Ellipse (Oval)
5 or A       - Arrow
6 or L       - Line
7 or P       - Draw (freehand drawing)
8 or T       - Text
9            - Image
0 or E       - Eraser

EDITING:
Ctrl/Cmd + D - Duplicate
Ctrl/Cmd + G - Group
Ctrl/Cmd + Shift + G - Ungroup
Ctrl/Cmd + [ - Send backward
Ctrl/Cmd + ] - Bring forward
Ctrl/Cmd + Shift + [ - Send to back
Ctrl/Cmd + Shift + ] - Bring to front
Delete/Backspace - Delete selected

VIEW:
Ctrl/Cmd + +/- - Zoom in/out
Ctrl/Cmd + 0   - Reset zoom
Ctrl/Cmd + 1   - Fit to content
Space + drag   - Pan canvas
Scroll         - Zoom (with Ctrl) / Pan

EXPORT:
Ctrl/Cmd + S   - Save to file
Ctrl/Cmd + Shift + E - Export image
Ctrl/Cmd + Shift + C - Copy to clipboard as PNG

Creating diagrams

System architecture diagram

Code
TEXT
Example architecture diagram:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Internet                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
                          โ–ผ
                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                  โ”‚   Cloudflare  โ”‚
                  โ”‚   (CDN/WAF)   โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ–ผ                               โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚    Vercel     โ”‚               โ”‚    Railway    โ”‚
  โ”‚  (Frontend)   โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚   (Backend)   โ”‚
  โ”‚   Next.js     โ”‚    API        โ”‚    NestJS     โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                          โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚                               โ”‚                   โ”‚
          โ–ผ                               โ–ผ                   โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚   Supabase    โ”‚               โ”‚     Neon      โ”‚   โ”‚   Upstash     โ”‚
  โ”‚    (Auth)     โ”‚               โ”‚  (PostgreSQL) โ”‚   โ”‚   (Redis)     โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Database schema diagram

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           users                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ id          โ”‚ uuid        โ”‚ PRIMARY KEY                         โ”‚
โ”‚ email       โ”‚ varchar     โ”‚ UNIQUE NOT NULL                     โ”‚
โ”‚ name        โ”‚ varchar     โ”‚ NOT NULL                            โ”‚
โ”‚ created_at  โ”‚ timestamp   โ”‚ DEFAULT now()                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ”‚ 1:N
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           posts                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ id          โ”‚ uuid        โ”‚ PRIMARY KEY                         โ”‚
โ”‚ title       โ”‚ varchar     โ”‚ NOT NULL                            โ”‚
โ”‚ content     โ”‚ text        โ”‚                                     โ”‚
โ”‚ author_id   โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ users.id              โ”‚
โ”‚ published   โ”‚ boolean     โ”‚ DEFAULT false                       โ”‚
โ”‚ created_at  โ”‚ timestamp   โ”‚ DEFAULT now()                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ”‚ N:M
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      post_tags (junction)                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ post_id     โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ posts.id              โ”‚
โ”‚ tag_id      โ”‚ uuid        โ”‚ FOREIGN KEY โ†’ tags.id               โ”‚
โ”‚ PRIMARY KEY (post_id, tag_id)                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

User flow diagram

Code
TEXT
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Start  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Landing    โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚   Sign Up   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Email  โ”‚
โ”‚         โ”‚     โ”‚   Page      โ”‚     โ”‚   Form      โ”‚     โ”‚  Verify โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
                      โ”‚                                       โ”‚
                      โ”‚ Already has account                   โ”‚ Verified
                      โ–ผ                                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚   Log In    โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚  Dashboard  โ”‚
                โ”‚   Form      โ”‚                         โ”‚   (Home)    โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚                                       โ”‚
                       โ”‚ Invalid credentials                   โ”‚
                       โ–ผ                                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚   Error     โ”‚                         โ”‚   Feature   โ”‚
                โ”‚   Message   โ”‚                         โ”‚   Pages     โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Libraries

Using libraries

Code
TEXT
1. Click the "Library" icon in the toolbar
2. Browse libraries or import your own
3. Drag elements onto the canvas

Popular libraries:
โ”œโ”€โ”€ Software Architecture
โ”‚   โ”œโ”€โ”€ AWS icons
โ”‚   โ”œโ”€โ”€ Azure icons
โ”‚   โ”œโ”€โ”€ GCP icons
โ”‚   โ””โ”€โ”€ Kubernetes
โ”‚
โ”œโ”€โ”€ UI/UX
โ”‚   โ”œโ”€โ”€ Wireframe kit
โ”‚   โ”œโ”€โ”€ Mobile UI
โ”‚   โ””โ”€โ”€ Web components
โ”‚
โ”œโ”€โ”€ Business
โ”‚   โ”œโ”€โ”€ Flowchart
โ”‚   โ”œโ”€โ”€ Org chart
โ”‚   โ””โ”€โ”€ Process diagrams
โ”‚
โ””โ”€โ”€ Technical
    โ”œโ”€โ”€ Network diagrams
    โ”œโ”€โ”€ Database schemas
    โ””โ”€โ”€ Sequence diagrams

Creating your own library

Code
TypeScript
{
  "type": "excalidrawlib",
  "version": 2,
  "source": "https://excalidraw.com",
  "libraryItems": [
    {
      "id": "custom-component-1",
      "status": "published",
      "elements": [
        {
          "type": "rectangle",
          "x": 0,
          "y": 0,
          "width": 200,
          "height": 100,
          "strokeColor": "#1e1e1e",
          "backgroundColor": "#a5d8ff",
          "fillStyle": "solid"
        },
        {
          "type": "text",
          "x": 50,
          "y": 40,
          "text": "Component",
          "fontSize": 16
        }
      ],
      "name": "My Custom Component"
    }
  ]
}

VS Code extension

Installation

Code
Bash
code --install-extension pomdtr.excalidraw-editor

# Or via GUI:
# Extensions โ†’ Search "Excalidraw" โ†’ Install

Usage

Code
TEXT
1. Create a file with the .excalidraw or .excalidraw.svg extension
2. VS Code will automatically open the Excalidraw editor
3. Draw diagrams directly in your IDE
4. Save as SVG (embeddable) or JSON (editable)

Project structure with Excalidraw:
my-project/
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ architecture.excalidraw.svg
โ”‚   โ”œโ”€โ”€ database-schema.excalidraw
โ”‚   โ””โ”€โ”€ user-flow.excalidraw.png
โ”œโ”€โ”€ src/
โ””โ”€โ”€ README.md

Embedding in Markdown

Code
Markdown
<!-- In README.md or documentation -->

## System architecture

![System Architecture](./docs/architecture.excalidraw.svg)

## Database schema

![Database](./docs/database-schema.excalidraw.svg)

## User flow

<img src="./docs/user-flow.excalidraw.svg" alt="User Flow" width="800">

Excalidraw API and integration

React component

Code
TypeScript
npm install @excalidraw/excalidraw

// App.tsx
import { Excalidraw } from '@excalidraw/excalidraw'

function DiagramEditor() {
  const [excalidrawAPI, setExcalidrawAPI] = useState(null)

  const handleChange = (elements, appState, files) => {
    console.log('Elements changed:', elements)
    localStorage.setItem('diagram', JSON.stringify(elements))
  }

  const handleExport = async () => {
    if (!excalidrawAPI) return

    const blob = await excalidrawAPI.exportToBlob({
      mimeType: 'image/png',
      exportWithDarkMode: false,
      exportBackground: true
    })

    const url = URL.createObjectURL(blob)
    const link = document.createElement('a')
    link.href = url
    link.download = 'diagram.png'
    link.click()
  }

  return (
    <div style={{ height: '600px', width: '100%' }}>
      <Excalidraw
        excalidrawAPI={(api) => setExcalidrawAPI(api)}
        onChange={handleChange}
        initialData={{
          elements: JSON.parse(localStorage.getItem('diagram') || '[]'),
          appState: { viewBackgroundColor: '#ffffff' }
        }}
        UIOptions={{
          canvasActions: {
            export: { saveFileToDisk: true }
          }
        }}
      />
      <button onClick={handleExport}>Export PNG</button>
    </div>
  )
}

Collaborative mode

Code
TypeScript
import { Excalidraw } from '@excalidraw/excalidraw'
import { useCollaboration } from './useCollaboration'

function CollaborativeDiagram({ roomId }) {
  const {
    elements,
    collaborators,
    onPointerUpdate,
    onElementsChange
  } = useCollaboration(roomId)

  return (
    <Excalidraw
      initialData={{ elements }}
      onChange={onElementsChange}
      onPointerUpdate={onPointerUpdate}
      isCollaborating={true}
      renderTopRightUI={() => (
        <div className="collaborators">
          {collaborators.map(user => (
            <Avatar key={user.id} name={user.name} color={user.color} />
          ))}
        </div>
      )}
    />
  )
}

function useCollaboration(roomId) {
  const [elements, setElements] = useState([])
  const [collaborators, setCollaborators] = useState([])
  const socketRef = useRef(null)

  useEffect(() => {
    const socket = io('wss://your-server.com')
    socketRef.current = socket

    socket.emit('join-room', roomId)

    socket.on('elements-update', (newElements) => {
      setElements(newElements)
    })

    socket.on('collaborators-update', (users) => {
      setCollaborators(users)
    })

    return () => socket.disconnect()
  }, [roomId])

  const onElementsChange = useCallback((newElements) => {
    setElements(newElements)
    socketRef.current?.emit('elements-change', {
      roomId,
      elements: newElements
    })
  }, [roomId])

  return { elements, collaborators, onElementsChange }
}

Exporting to different formats

Code
TypeScript
import { exportToSvg, exportToBlob, serializeAsJSON } from '@excalidraw/excalidraw'

const exportSVG = async (elements, appState) => {
  const svg = await exportToSvg({
    elements,
    appState,
    files: null,
    exportPadding: 10
  })

  const svgString = new XMLSerializer().serializeToString(svg)
  return svgString
}

const exportImage = async (elements, appState, mimeType = 'image/png') => {
  const blob = await exportToBlob({
    elements,
    appState,
    mimeType,
    quality: 0.9,
    exportWithDarkMode: false
  })

  return blob
}

const exportJSON = (elements, appState) => {
  return serializeAsJSON(elements, appState, {}, 'local')
}

const importFromJSON = (jsonString) => {
  const data = JSON.parse(jsonString)
  return {
    elements: data.elements,
    appState: data.appState
  }
}

Self-hosting Excalidraw

Docker

Code
DOCKERFILE
FROM node:20-alpine AS builder

WORKDIR /app

RUN git clone https://github.com/excalidraw/excalidraw.git .

RUN yarn install --frozen-lockfile

RUN yarn build

FROM nginx:alpine

COPY --from=builder /app/build /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]
Code
YAML
version: '3.8'

services:
  excalidraw:
    build: .
    ports:
      - "8080:80"
    restart: unless-stopped

  excalidraw-room:
    image: excalidraw/excalidraw-room
    ports:
      - "3002:80"
    environment:
      - PORT=80

Kubernetes

Code
YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: excalidraw
spec:
  replicas: 2
  selector:
    matchLabels:
      app: excalidraw
  template:
    metadata:
      labels:
        app: excalidraw
    spec:
      containers:
        - name: excalidraw
          image: excalidraw/excalidraw:latest
          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "256Mi"
              cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: excalidraw
spec:
  selector:
    app: excalidraw
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: excalidraw
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: excalidraw.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: excalidraw
                port:
                  number: 80

Excalidraw+ (Premium)

Premium features

Code
TEXT
Excalidraw+ ($7/month or $60/year):
โ”‚
โ”œโ”€โ”€ End-to-end encryption
โ”‚   โ””โ”€โ”€ Encryption key stays with the user only
โ”‚
โ”œโ”€โ”€ Larger storage
โ”‚   โ””โ”€โ”€ Unlimited diagrams
โ”‚   โ””โ”€โ”€ Larger files
โ”‚
โ”œโ”€โ”€ Custom fonts
โ”‚   โ””โ”€โ”€ Import your own fonts
โ”‚
โ”œโ”€โ”€ Password-protected links
โ”‚   โ””โ”€โ”€ Additional security layer
โ”‚
โ”œโ”€โ”€ Custom branding
โ”‚   โ””โ”€โ”€ Logo on exports
โ”‚
โ”œโ”€โ”€ Priority support
โ”‚   โ””โ”€โ”€ Faster assistance
โ”‚
โ””โ”€โ”€ Cloud backup
    โ””โ”€โ”€ Automatic backups

Practical use cases

1. Technical documentation

Code
Markdown
# System Architecture

## Overview

Our system consists of three main components:

![Architecture Overview](./diagrams/architecture.excalidraw.svg)

### Frontend

Next.js application hosted on Vercel...

### Backend

NestJS API on Railway...

### Database

PostgreSQL on Neon with branching...

2. Code review diagrams

Code
TEXT
PR #123: Refactor authentication flow

Before:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Client  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Server  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚    DB    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚                โ”‚
     โ”‚  Password      โ”‚  Check password
     โ”‚  (plain!)      โ”‚  (slow query!)
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

After:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Client  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Server  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Redis   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚    DB    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚  (cache) โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚                โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
     โ”‚  Hashed        โ”‚  Session
     โ”‚  password      โ”‚  check first
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Meeting notes

Code
TEXT
Sprint Planning - 2025-01-24

Epic: User Dashboard Redesign

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Dashboard MVP                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚
โ”‚  โ”‚  Stats   โ”‚  โ”‚  Chart   โ”‚  โ”‚  Recent  โ”‚              โ”‚
โ”‚  โ”‚  Cards   โ”‚  โ”‚  Widget  โ”‚  โ”‚ Activity โ”‚              โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚
โ”‚                                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚
โ”‚  โ”‚           Data Table                     โ”‚           โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚
โ”‚                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Tasks:
โ”œโ”€โ”€ [x] Stats cards component (2 pts) - @alice
โ”œโ”€โ”€ [ ] Chart integration (5 pts) - @bob
โ”œโ”€โ”€ [ ] Activity feed (3 pts) - @charlie
โ””โ”€โ”€ [ ] Data table with pagination (5 pts) - @david

4. Onboarding documentation

Code
TEXT
New Developer Onboarding

Day 1: Setup
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Clone  โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚ Install โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Run    โ”‚
โ”‚  Repo   โ”‚     โ”‚  Deps   โ”‚     โ”‚  Dev    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                      โ”‚
                                      โ–ผ
                               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                               โ”‚ Explore UI  โ”‚
                               โ”‚ on :3000    โ”‚
                               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Day 2: First PR
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Read   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Pick   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚ Create  โ”‚
โ”‚  CLAUDE โ”‚     โ”‚  Issue  โ”‚     โ”‚ Branch  โ”‚
โ”‚   .md   โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ”‚
                                     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Code   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Test   โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  Push   โ”‚
โ”‚  Change โ”‚     โ”‚  Local  โ”‚     โ”‚   PR    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Tips and tricks

Element styling

Code
TEXT
Stroke styles:
โ”œโ”€โ”€ Solid โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”œโ”€โ”€ Dashed - - - - - -
โ””โ”€โ”€ Dotted ยทยทยทยทยทยทยทยทยทยทยทยท

Fill styles:
โ”œโ”€โ”€ Solid      [โ– โ– โ– โ– โ– โ– โ– โ– ]
โ”œโ”€โ”€ Hachure    [////////]
โ”œโ”€โ”€ Cross-hatch [XXXXXXXX]
โ””โ”€โ”€ None       [        ]

Sloppiness (hand-drawn intensity):
โ”œโ”€โ”€ Architect (0) - Clean lines
โ”œโ”€โ”€ Artist (1) - Slight wobble
โ””โ”€โ”€ Cartoonist (2) - Very wobbly

Edge style:
โ”œโ”€โ”€ Sharp โ”Œโ”€โ”€โ”€โ”€โ”€โ”
โ””โ”€โ”€ Round โ•ญโ”€โ”€โ”€โ”€โ”€โ•ฎ

Keyboard workflow

Code
TEXT
Efficient workflow:
1. R โ†’ Draw a rectangle
2. T โ†’ Add text inside it
3. A โ†’ Connect with an arrow to another element
4. Ctrl+D โ†’ Duplicate and move
5. Ctrl+G โ†’ Group related elements
6. Ctrl+Shift+E โ†’ Export the finished diagram

Canvas organization

Code
TEXT
Large diagrams - organization:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    TITLE AREA                           โ”‚
โ”‚              System Architecture v2.1                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚   SECTION 1  โ”‚                 โ”‚   SECTION 2  โ”‚     โ”‚
โ”‚  โ”‚   Frontend   โ”‚                 โ”‚   Backend    โ”‚     โ”‚
โ”‚  โ”‚              โ”‚                 โ”‚              โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚
โ”‚  โ”‚   SECTION 3  โ”‚                 โ”‚   SECTION 4  โ”‚     โ”‚
โ”‚  โ”‚   Database   โ”‚                 โ”‚   External   โ”‚     โ”‚
โ”‚  โ”‚              โ”‚                 โ”‚   Services   โ”‚     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚
โ”‚                                                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  LEGEND: [Component] โ”€โ”€โ–บ [Dependency] ยทยทยท> [Optional]  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

FAQ - frequently asked questions

Is Excalidraw free?

Yes, the basic version of Excalidraw is completely free and open-source. You can use excalidraw.com without an account, and you can also host your own instance. Excalidraw+ is an optional paid version with additional features like encryption and larger storage.

How do I save a diagram offline?

  1. Export to a .excalidraw file - Fully editable, can be opened later
  2. Export to SVG - Vector format, can be edited in Figma/Illustrator
  3. Export to PNG - Raster format, great for documentation
  4. Copy to clipboard - Quick pasting into other applications

Can I use Excalidraw in VS Code?

Yes, install the "Excalidraw" extension by pomdtr. It allows you to create and edit .excalidraw files directly in your IDE.

How do I collaborate in real time?

  1. Click "Live collaboration" in the menu
  2. Share the generated link
  3. Anyone with the link can edit
  4. Sessions are E2E encrypted

Excalidraw vs Mermaid?

  • Excalidraw - Visual, drag & drop, hand-drawn style
  • Mermaid - Text-based (code-based), auto-layout, formal style

Both have their uses - Mermaid for simple flowcharts in markdown, Excalidraw for more creative and freeform diagrams.

Summary

Excalidraw is an excellent tool for:

  • Architecture sketching - System design, infrastructure
  • Database schemas - Visualizing relationships
  • User flows - UX documentation
  • Wireframes - Quick UI prototypes
  • Meeting notes - Visual note-taking
  • Technical docs - Diagrams in documentation
  • Code reviews - Explaining changes visually

The hand-drawn style makes diagrams look informal, which encourages iteration and discussion - ideal for agile teams and technical documentation.