Source: https://seerepo.com/r/streetwriters/notesnook/built
Markdown source: https://seerepo.com/r/streetwriters/notesnook/built.md
Description: notesnook is a TypeScript repo built with Electron, tRPC, hermes-android, react-android, React, and 8 more. It signs people in with otplib.

# What is notesnook built with?

notesnook is a TypeScript repo built with Electron, tRPC, hermes-android, react-android, React, and 8 more. It signs people in with otplib, uses AI through @orama/orama, makes its content with react-native-file-viewer, @react-native-documents/picker, entities, @bam.tech/react-native-image-resizer, @react-native-camera-roll/camera-roll, and 17 more, validates its data with Zod, validator, and phone, is tested with @playwright/test, playwright-core, detox, jest-image-snapshot, react-test-renderer, and 2 more, deploys with logger, workbox-precaching, workbox-routing, and Cloudflare, and uses SQLite, lru-cache, and bson-objectid. It has 277,318 written lines, with 146 test files.

Read on November 8, 2026, at commit 27b7f51.

Repository: https://github.com/streetwriters/notesnook

## Backend (apps/desktop)

### Data

- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file · [apps/desktop/src/api/sqlite-kysely.ts, line 20](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/desktop/src/api/sqlite-kysely.ts#L20)

## Support (apps/desktop)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 23 files
- **[tRPC](https://seerepo.com/uses/trpc)**: 10 files

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 8 files

### Testing

- **@playwright/test**: 9 files
- **playwright-core**: 2 files

### Tools

- **typed-emitter**: 1 file
- **yargs**: 1 file

### Other

- **electron-updater**: 3 files
- **url**: 1 file

## Frontend (apps/mobile)

### The base

- **hermes-android**
- **react-android**
- **[React](https://seerepo.com/uses/react)**: 239 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **[react-native](https://seerepo.com/uses/react-native)**: 229 files
- **react-navigation**: 12 files

### Interface

- **[appcompat](https://seerepo.com/uses/appcompat)**
- **core-splashscreen**
- **swiperefreshlayout**
- **react-native-actions-sheet**: 21 files
- **[react-native-safe-area-context](https://seerepo.com/uses/react-native-safe-area-context)**: 19 files
- **[react-native-reanimated](https://seerepo.com/uses/react-native-reanimated)**: 12 files
- **@legendapp/list**: 11 files
- **[react-native-webview](https://seerepo.com/uses/react-native-webview)**: 8 files
- **[react-native-gesture-handler](https://seerepo.com/uses/react-native-gesture-handler)**: 7 files
- **react-native-modal-datetime-picker**: 2 files
- **react-native-image-zoom-viewer**: 1 file
- **react-native-progress**: 1 file
- **react-native-screens**: 1 file
- **[react-native-svg](https://seerepo.com/uses/react-native-svg)**: 1 file

### Icons

- **react-native-vector-icons**: 42 files

## Backend (apps/mobile)

### Sign-in

- **[otplib](https://seerepo.com/uses/otplib)**: 1 file

## Support (apps/mobile)

### Content

- **react-native-file-viewer**: 6 files
- **@react-native-documents/picker**: 3 files
- **[entities](https://seerepo.com/uses/entities)**: 3 files
- **@bam.tech/react-native-image-resizer**: 1 file
- **@react-native-camera-roll/camera-roll**: 1 file
- **react-native-pdf**: 1 file
- **react-native-qrcode-svg**: 1 file
- **react-native-view-shot**: 1 file

### Validation

- **[validator](https://seerepo.com/uses/validator)**: 5 files
- **phone**: 1 file

### Testing

- **detox**: 4 files
- **jest-image-snapshot**: 1 file
- **react-test-renderer**: 1 file

### Deploy

- **[logger](https://seerepo.com/uses/logger)**

### Tools

- **benchmark**
- **CocoaPods**
- **xcodeproj**

### Other

- **activesupport**
- **bigdecimal**
- **concurrent-ruby**
- **logging-interceptor**
- **mutex_m**
- **okhttp**
- **okhttp-urlconnection**
- **zustand**: 23 files
- **react-native-blob-util**: 20 files
- **@react-native-clipboard/clipboard**: 15 files
- **dayjs**: 13 files
- **react-native-device-info**: 10 files
- **@react-native-community/netinfo**: 8 files
- **react-native-share**: 7 files
- **react-native-zip-archive**: 4 files
- **@sayem314/react-native-keep-awake**: 2 files
- **pathe**: 2 files
- **react-native-get-random-values**: 2 files
- **react-native-orientation-locker**: 2 files
- **.ENV**: 1 file
- **androidx.multidex:multidex**: 1 file
- **async-mutex**: 1 file
- **buffer**: 1 file
- **formatjs**: 1 file
- **fs-extra**: 1 file
- **[Google](https://seerepo.com/uses/google)**: 1 file
- **react-native-localize**: 1 file
- **react-native-url-polyfill**: 1 file
- **[TanStack](https://seerepo.com/uses/tanstack)**: 1 file
- **[tRPC](https://seerepo.com/uses/trpc)**: 1 file

## Frontend (apps/monograph)

### The base

- **remix-run**: 11 files
- **[React](https://seerepo.com/uses/react)**: 9 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **Remix**: 6 files · [in apps/monograph/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/monograph/package.json)
- **remix-utils**: 2 files

### Styles

- **[emotion](https://seerepo.com/uses/emotion)**: 3 files

### Interface

- **react-modal**: 1 file
- **react-turnstile**: 1 file

### Icons

- **@mdi/js**: 4 files

## Backend (apps/monograph)

### Data

- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 1 file

## Support (apps/monograph)

### Content

- **@napi-rs/canvas**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 1 file

### Other

- **comlink**: 2 files
- **buffer**: 1 file
- **date-fns**: 1 file
- **slugify**: 1 file
- **url**: 1 file

## Frontend (apps/theme-builder)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **[React](https://seerepo.com/uses/react)**: 2 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

## Support (apps/theme-builder)

### Other

- **file-saver**: 1 file

## Frontend (apps/vericrypt)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **[React](https://seerepo.com/uses/react)**: 7 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 2 files

### Icons

- **[react-icons](https://seerepo.com/uses/react-icons)**: 5 files

## Support (apps/vericrypt)

### Other

- **platform**: 3 files
- **@microsoft/signalr**: 1 file
- **buffer**: 1 file

## Frontend (apps/web)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **[React](https://seerepo.com/uses/react)**: 130 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)
- **wouter**: 2 files

### Styles

- **@emotion/react**: 2 files

### Interface

- **[react-virtuoso](https://seerepo.com/uses/react-virtuoso)**: 6 files
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 4 files
- **react-freeze**: 3 files
- **react-loading-skeleton**: 3 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 3 files
- **[react-hot-toast](https://seerepo.com/uses/react-hot-toast)**: 2 files
- **@rehookify/datepicker**: 1 file
- **react-avatar-editor**: 1 file
- **[react-dropzone](https://seerepo.com/uses/react-dropzone)**: 1 file
- **[react-error-boundary](https://seerepo.com/uses/react-error-boundary)**: 1 file
- **react-modal**: 1 file
- **react-scroll-sync**: 1 file

### Icons

- **mdi**: 1 file

## Backend (apps/web)

### Sign-in

- **[otplib](https://seerepo.com/uses/otplib)**: 1 file

## Support (apps/web)

### Content

- **[entities](https://seerepo.com/uses/entities)**: 3 files
- **react-qrcode-logo**: 1 file
- **snarkdown**: 1 file

### Validation

- **phone**: 1 file
- **[Zod](https://seerepo.com/uses/zod)**: 1 file

### Testing

- **@playwright/test**: 30 files
- **Vitest**: 3 files

### Deploy

- **workbox-precaching**: 1 file
- **workbox-routing**: 1 file

### Tools

- **vite-plugin-pwa**: 1 file

### Other

- **comlink**: 11 files
- **dayjs**: 10 files
- **zustand**: 7 files
- **async-mutex**: 4 files
- **file-saver**: 4 files
- **cronosjs**: 3 files
- **hash-wasm**: 3 files
- **[tRPC](https://seerepo.com/uses/trpc)**: 3 files
- **@zip.js/zip.js**: 2 files
- **mutative**: 2 files
- **openpgp**: 2 files
- **p-queue**: 2 files
- **.ENV**: 1 file
- **@henrygd/queue**: 1 file
- **@tanstack/react-query**: 1 file
- **Axios**: 1 file
- **buffer**: 1 file
- **event-source-polyfill**: 1 file
- **fflate**: 1 file
- **hotkeys-js**: 1 file
- **platform**: 1 file
- **timeago.js**: 1 file
- **w3c-keyname**: 1 file
- **workbox-core**: 1 file

## Frontend (extensions/web-clipper)

### The base

- **[React](https://seerepo.com/uses/react)**: 11 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 2 files

### Interface

- **react-modal**: 1 file

### Icons

- **mdi**: 2 files

## Support (extensions/web-clipper)

### Tools

- **Webpack**: 2 files
- **webpack-dev-server**: 1 file

### Other

- **webextension-polyfill-ts**: 7 files
- **comlink**: 3 files
- **zustand**: 1 file

## Support (packages/clipper)

### The base

- **hyperapp**: 1 file

### Content

- **[@mozilla/readability](https://seerepo.com/uses/mozilla-readability)**: 1 file

### Testing

- **@playwright/test**: 1 file

### Tools

- **esbuild**: 1 file

### Other

- **slugify**: 1 file

## Frontend (packages/common)

### The base

- **[React](https://seerepo.com/uses/react)**: 4 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

## Support (packages/common)

### Testing

- **Vitest**: 1 file

### Other

- **pathe**: 2 files
- **timeago.js**: 1 file

## Backend (packages/core)

### Data

- **bson-objectid**: 1 file

### Sign-in

- **[otplib](https://seerepo.com/uses/otplib)**: 1 file

## Support (packages/core)

### Content

- **[htmlparser2](https://seerepo.com/uses/htmlparser2)**: 6 files
- **[entities](https://seerepo.com/uses/entities)**: 4 files
- **dom-serializer**: 1 file
- **domhandler**: 1 file
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **domutils**: 1 file
- **[html-to-text](https://seerepo.com/uses/html-to-text)**: 1 file
- **[katex](https://seerepo.com/uses/katex)**: 1 file
- **[linkedom](https://seerepo.com/uses/linkedom)**: 1 file
- **[prismjs](https://seerepo.com/uses/prismjs)**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 1 file

### Testing

- **Vitest**: 55 files
- **mockdate**: 3 files

### Tools

- **TypeScript**: 1 file

### Other

- **dayjs**: 6 files
- **async-mutex**: 3 files
- **isomorphic-fetch**: 2 files
- **spark-md5**: 2 files
- **.ENV**: 1 file
- **@microsoft/signalr**: 1 file
- **abortcontroller-polyfill**: 1 file
- **alfaaz**: 1 file
- **event-source-polyfill**: 1 file
- **hash-wasm**: 1 file
- **mime-db**: 1 file
- **nanoid**: 1 file
- **rfdc**: 1 file
- **url**: 1 file
- **util**: 1 file
- **ws**: 1 file

## Support (packages/crypto)

### Testing

- **Vitest**: 1 file

## Frontend (packages/editor-mobile)

### The base

- **[React](https://seerepo.com/uses/react)**: 13 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 2 files

### Interface

- **@szhsin/react-menu**: 1 file
- **react-freeze**: 1 file

## Support (packages/editor-mobile)

### Testing

- **@playwright/test**: 4 files

### Other

- **zustand**: 3 files
- **buffer**: 1 file
- **ip**: 1 file

## Frontend (packages/editor)

### The base

- **[React](https://seerepo.com/uses/react)**: 50 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 1 file

### Interface

- **[tiptap](https://seerepo.com/uses/tiptap)**: 77 files
- **[ProseMirror](https://seerepo.com/uses/prosemirror)**: 35 files
- **prosemirror-state**: 31 files
- **prosemirror-view**: 14 files
- **prosemirror-transform**: 5 files
- **prosemirror-codemark**: 1 file
- **[re-resizable](https://seerepo.com/uses/re-resizable)**: 1 file
- **[react-colorful](https://seerepo.com/uses/react-colorful)**: 1 file
- **react-modal**: 1 file

### Icons

- **@mdi/js**: 2 files

## Support (packages/editor)

### Content

- **[entities](https://seerepo.com/uses/entities)**: 2 files
- **[katex](https://seerepo.com/uses/katex)**: 1 file
- **[papaparse](https://seerepo.com/uses/papaparse)**: 1 file

### Testing

- **Vitest**: 20 files

### Tools

- **detect-indent**: 1 file
- **redent**: 1 file
- **strip-indent**: 1 file

### Other

- **linkifyjs**: 4 files
- **colord**: 2 files
- **nanoid**: 2 files
- **zustand**: 2 files
- **alfaaz**: 1 file
- **async-mutex**: 1 file
- **file-saver**: 1 file
- **refractor**: 1 file

## Support (packages/intl)

### Other

- **@lingui/core**: 4 files

## Support (packages/sodium)

### Testing

- **Vitest**: 1 file

### Other

- **libsodium-wrappers-sumo**: 2 files
- **sodium-native**: 1 file

## Frontend (packages/theme)

### The base

- **[React](https://seerepo.com/uses/react)**: 2 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 1 file

## Support (packages/theme)

### Other

- **zustand**: 1 file

## Frontend (packages/ui)

### The base

- **[React](https://seerepo.com/uses/react)**: 6 files · [in apps/web/package.json](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/web/package.json)

### Styles

- **@emotion/react**: 1 file

### Interface

- **react-modal**: 1 file

### Icons

- **@mdi/js**: 1 file

## Backend (servers/themes)

### AI

- **@orama/orama**: 2 files

## Support (servers/themes)

### The base

- **[tRPC](https://seerepo.com/uses/trpc)**: 2 files

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 2 files

### Deploy

- **Cloudflare**: 1 file

### Other

- **async-mutex**: 2 files
- **cors**: 1 file
- **url**: 1 file
- **util**: 1 file

## Other repos with a similar stack

- [laurent22/joplin](https://seerepo.com/r/laurent22/joplin/built): SQLite, Electron, react-android, React, react-native, appcompat, react-native-safe-area-context, react-native-webview, react-native-svg, react-native-vector-icons, otplib, logger, dompurify, katex, ProseMirror, prosemirror-view, re-resizable · [Compare](https://seerepo.com/compare/laurent22/joplin/vs/streetwriters/notesnook)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): SQLite, Electron, React, lru-cache, Vite, Zod, @napi-rs/canvas, dnd-kit, TanStack, react-dropzone, react-error-boundary, @mozilla/readability, htmlparser2, dompurify, html-to-text, katex, tiptap · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/streetwriters/notesnook)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): React, lru-cache, Vite, bson-objectid, Zod, otplib, entities, validator, dnd-kit, react-dropzone, react-error-boundary, dompurify, html-to-text, tiptap, react-colorful, papaparse · [Compare](https://seerepo.com/compare/streetwriters/notesnook/vs/TryGhost/Ghost)
- [outline/outline](https://seerepo.com/r/outline/outline/built): React, Vite, Zod, validator, dnd-kit, TanStack, react-avatar-editor, react-dropzone, katex, ProseMirror, prosemirror-state, prosemirror-view, prosemirror-transform, prosemirror-codemark, react-colorful · [Compare](https://seerepo.com/compare/outline/outline/vs/streetwriters/notesnook)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Electron, React, Vite, Zod, otplib, entities, emotion, react-dropzone, react-error-boundary, dompurify, html-to-text, tiptap, papaparse, Cloudflare · [Compare](https://seerepo.com/compare/streetwriters/notesnook/vs/twentyhq/twenty)
- [multica-ai/multica](https://seerepo.com/r/multica-ai/multica/built): Electron, React, react-native, Zod, react-native-safe-area-context, react-native-reanimated, react-native-gesture-handler, react-native-svg, react-virtuoso, dnd-kit, TanStack, katex, tiptap · [Compare](https://seerepo.com/compare/multica-ai/multica/vs/streetwriters/notesnook)

## Frequently asked questions

### What language is notesnook written in?

notesnook is written in TypeScript, with 277,318 written lines.

### What framework does notesnook use?

notesnook is built with Electron, tRPC, hermes-android, react-android, React, react-native, react-navigation, remix-run, Remix, remix-utils, Vite, wouter, and hyperapp.

### What does notesnook sign people in with?

notesnook signs people in with otplib.

### Does notesnook use AI?

Yes. notesnook uses AI through @orama/orama.

### What services does notesnook use?

notesnook uses SQLite, lru-cache, and bson-objectid.

The proof: [apps/desktop/src/api/sqlite-kysely.ts, line 20](https://github.com/streetwriters/notesnook/blob/27b7f518f3a7579a367bfa6765dc523ab0cd046a/apps/desktop/src/api/sqlite-kysely.ts#L20)

### Does notesnook have tests?

Yes. notesnook has 146 test files and is tested with @playwright/test, playwright-core, detox, jest-image-snapshot, react-test-renderer, Vitest, and mockdate.

### Which repos have a stack like notesnook's?

The ones that share most of its stack: laurent22/joplin, CherryHQ/cherry-studio, and TryGhost/Ghost.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
