swimmingbrain/brainotes

Handwritten notes and a whiteboard in your browser. Write with a pen, keep the pdf next to your notes. No account, nothing leaves the browser.

TypeScript

59

426 commits

updated Oct 13, 2026

See the code

See what people are saying

README

brainotes logo

braiNOTES

Handwritten notes and a whiteboard that run in your browser.
Write with a pen, keep the pdf next to your notes.

braiNOTES in Study mode, handwritten notes with a diagram snipped from the slides, and the lecture pdf open on the side

Try it now → notes.swimmingbrain.dev

braiNOTES is an open source app for writing by hand, like OneNote or GoodNotes, but in a browser tab. It is made for lectures: the slides open next to your notes or become the pages you write on. There is no account and no server, everything stays in your browser.

Features

  • Ballpoint, fountain pen, marker, pencil and highlighter, with pen pressure
  • Notebooks on blank, lined, grid or dotted paper, and whiteboards without edges
  • Write on a pdf, or read it on the side and snip parts of it into your notes
  • Pictures, shapes, text, a lasso, an eraser and a laser pointer
  • Export to PDF with the original pages and vector ink, or a page to PNG
  • .brainotes files to back up a notebook or share it
  • Saves by itself and works offline once it has been opened

Shortcuts

KeyWhat it does
P H E VPen, highlighter, eraser, select
S T X LShapes, text, snip, laser
SpaceHand while held
Ctrl+Z Ctrl+Shift+ZUndo, redo
Ctrl+EnterNew page
PageDown PageUpNext and previous page
Ctrl+1 Ctrl+2 Ctrl+3Notes, Study, Board
Ctrl+Shift+FPresent in fullscreen
Ctrl+KCommand palette
?All shortcuts

Running locally

pnpm install
pnpm dev

Open http://localhost:5173. pnpm test runs the tests, pnpm check the type checks and pnpm build writes the static site to build/. See docs/CONTRIBUTING.md if you want to help.

How it works

  • Ink is drawn into cached canvas tiles, only the tiles where something changed are drawn again.
  • A stroke is an outline from perfect-freehand, made from the points and the pen pressure.
  • The line is drawn the moment the pen moves. A one euro filter calms a shaky hand while you write and a light refit runs when the pen lifts.
  • PDFs are drawn by pdf.js in a worker, only the pages you see and at the zoom you see them.
  • Notebooks, pages and files live in IndexedDB and are saved a moment after every change.
  • A .brainotes file is a zip with the notebook, one json file per page and the pdfs and pictures.
  • The PDF export puts the original pdf pages into the file and the ink on top as vectors.

Tech stack

PartLibrary
FrameworkSvelte 5 + SvelteKit (static adapter)
Strokesperfect-freehand
Reading PDFspdf.js
Writing PDFspdf-lib (the pdfme fork)
StorageIndexedDB through idb
Filesfflate, browser-fs-access
LanguageTypeScript

License

MIT, see LICENSE. The libraries keep their own licenses, THIRD_PARTY_LICENSES lists them.

handwriting
lecture-notes
local-first
notes
note-taking
offline
pdf
pen
pwa
students
stylus
svelte
sveltekit
typescript
whiteboard

swimmingbrain/brainotes

Handwritten notes and a whiteboard in your browser. Write with a pen, keep the pdf next to your notes. No account, nothing leaves the browser.

TypeScript

59

426 commits

updated Oct 13, 2026

See the code

See what people are saying

README

brainotes logo

braiNOTES

Handwritten notes and a whiteboard that run in your browser.
Write with a pen, keep the pdf next to your notes.

braiNOTES in Study mode, handwritten notes with a diagram snipped from the slides, and the lecture pdf open on the side

Try it now → notes.swimmingbrain.dev

braiNOTES is an open source app for writing by hand, like OneNote or GoodNotes, but in a browser tab. It is made for lectures: the slides open next to your notes or become the pages you write on. There is no account and no server, everything stays in your browser.

Features

  • Ballpoint, fountain pen, marker, pencil and highlighter, with pen pressure
  • Notebooks on blank, lined, grid or dotted paper, and whiteboards without edges
  • Write on a pdf, or read it on the side and snip parts of it into your notes
  • Pictures, shapes, text, a lasso, an eraser and a laser pointer
  • Export to PDF with the original pages and vector ink, or a page to PNG
  • .brainotes files to back up a notebook or share it
  • Saves by itself and works offline once it has been opened

Shortcuts

KeyWhat it does
P H E VPen, highlighter, eraser, select
S T X LShapes, text, snip, laser
SpaceHand while held
Ctrl+Z Ctrl+Shift+ZUndo, redo
Ctrl+EnterNew page
PageDown PageUpNext and previous page
Ctrl+1 Ctrl+2 Ctrl+3Notes, Study, Board
Ctrl+Shift+FPresent in fullscreen
Ctrl+KCommand palette
?All shortcuts

Running locally

pnpm install
pnpm dev

Open http://localhost:5173. pnpm test runs the tests, pnpm check the type checks and pnpm build writes the static site to build/. See docs/CONTRIBUTING.md if you want to help.

How it works

  • Ink is drawn into cached canvas tiles, only the tiles where something changed are drawn again.
  • A stroke is an outline from perfect-freehand, made from the points and the pen pressure.
  • The line is drawn the moment the pen moves. A one euro filter calms a shaky hand while you write and a light refit runs when the pen lifts.
  • PDFs are drawn by pdf.js in a worker, only the pages you see and at the zoom you see them.
  • Notebooks, pages and files live in IndexedDB and are saved a moment after every change.
  • A .brainotes file is a zip with the notebook, one json file per page and the pdfs and pictures.
  • The PDF export puts the original pdf pages into the file and the ink on top as vectors.

Tech stack

PartLibrary
FrameworkSvelte 5 + SvelteKit (static adapter)
Strokesperfect-freehand
Reading PDFspdf.js
Writing PDFspdf-lib (the pdfme fork)
StorageIndexedDB through idb
Filesfflate, browser-fs-access
LanguageTypeScript

License

MIT, see LICENSE. The libraries keep their own licenses, THIRD_PARTY_LICENSES lists them.

handwriting
lecture-notes
local-first
notes
note-taking
offline
pdf
pen
pwa
students
stylus
svelte
sveltekit
typescript
whiteboard