Source: https://seerepo.com/r/actualbudget/actual/built
Markdown source: https://seerepo.com/r/actualbudget/actual/built.md
Description: actual is a TypeScript repo built with Vite, React, React Router, @capacitor/core, Electron, and 4 more.

# What is actual built with?

actual is a TypeScript repo built with Vite, React, React Router, @capacitor/core, Electron, and 4 more. It signs people in with argon2, bcrypt, jws, and openid-client, makes its content with react-markdown, hyperformula, rehype-external-links, remark-gfm, @zumer/snapdom, and 5 more, is tested with @playwright/test, Vitest, Testing Library, fast-check, mockdate, and 3 more, deploys with workbox-precaching, express-winston, and winston, and uses lru-cache, @sqlite.org/sqlite-wasm, and SQLite. It has 358,371 written lines, with 426 test files.

Read on November 8, 2026, at commit 693973b.

Repository: https://github.com/actualbudget/actual

## Frontend (packages/api)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: 1 file · [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)

## Support (packages/api)

### Testing

- **@playwright/test**: 2 files
- **Vitest**: 2 files

### Other

- **compare-versions**: 1 file

## Support (packages/cli)

### Tools

- **commander**: 13 files
- **cli-table3**: 1 file
- **cosmiconfig**: 1 file

### Other

- **proper-lockfile**: 1 file

## Frontend (packages/component-library)

### The base

- **[React](https://seerepo.com/uses/react)**: 406 files · [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)

### Styles

- **@emotion/css**: 14 files

### Interface

- **react-aria-components**: 7 files
- **[usehooks-ts](https://seerepo.com/uses/usehooks-ts)**: 1 file

## Support (packages/component-library)

### Testing

- **Testing Library**: 3 files
- **Vitest**: 1 file

### Tools

- **@svgr/core**: 1 file

### Other

- **@internationalized/date**: 2 files

## Support (packages/crdt)

### Other

- **@bufbuild/protobuf**: 2 files
- **murmurhash**: 1 file
- **uuid**: 1 file

## Frontend (packages/desktop-client)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)
- **[React](https://seerepo.com/uses/react)**: 581 files · [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)
- **[React Router](https://seerepo.com/uses/react-router)**: 60 files

### Styles

- **@emotion/css**: 105 files

### Interface

- **react-aria-components**: 59 files
- **[recharts](https://seerepo.com/uses/recharts)**: 24 files
- **[react-error-boundary](https://seerepo.com/uses/react-error-boundary)**: 13 files
- **[react-aria](https://seerepo.com/uses/react-aria)**: 12 files
- **[react-hotkeys-hook](https://seerepo.com/uses/react-hotkeys-hook)**: 11 files
- **react-spring**: 7 files
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 4 files
- **react-joyride**: 4 files
- **react-virtualized-auto-sizer**: 4 files
- **[usehooks-ts](https://seerepo.com/uses/usehooks-ts)**: 4 files
- **@use-gesture/react**: 3 files
- **[react-dnd](https://seerepo.com/uses/react-dnd)**: 2 files
- **[@lezer/highlight](https://seerepo.com/uses/lezer-highlight)**: 1 file
- **[@uiw/react-codemirror](https://seerepo.com/uses/uiw-react-codemirror)**: 1 file
- **[cmdk](https://seerepo.com/uses/cmdk)**: 1 file
- **downshift**: 1 file
- **[re-resizable](https://seerepo.com/uses/re-resizable)**: 1 file
- **[react-dnd-html5-backend](https://seerepo.com/uses/react-dnd-html5-backend)**: 1 file
- **[react-grid-layout](https://seerepo.com/uses/react-grid-layout)**: 1 file
- **react-swipeable**: 1 file

## Backend (packages/desktop-client)

### Data

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

## Support (packages/desktop-client)

### The base

- **@capacitor/core**: 1 file

### Content

- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 4 files
- **hyperformula**: 3 files
- **rehype-external-links**: 3 files
- **[remark-gfm](https://seerepo.com/uses/remark-gfm)**: 3 files
- **@zumer/snapdom**: 1 file
- **csv-stringify**: 1 file
- **mdast-util-newline-to-break**: 1 file

### Testing

- **Vitest**: 85 files
- **Testing Library**: 66 files
- **@playwright/test**: 59 files

### Other

- **react-i18next**: 458 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 48 files
- **date-fns**: 43 files
- **i18next**: 38 files
- **uuid**: 19 files
- **@reduxjs/toolkit**: 12 files
- **es-toolkit**: 11 files
- **Capacitor**: 3 files
- **fzf**: 3 files
- **react-redux**: 3 files
- **@internationalized/date**: 1 file
- **i18next-resources-to-backend**: 1 file

## Support (packages/desktop-electron)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 5 files

### Testing

- **@playwright/test**: 5 files
- **Vitest**: 2 files

### Tools

- **electron-builder**: 2 files
- **@electron/rebuild**: 1 file
- **copyfiles**: 1 file

## Backend (packages/loot-core)

### Data

- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 2 files
- **@sqlite.org/sqlite-wasm**: 1 file
- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file · [packages/loot-core/src/platform/server/sqlite/index.electron.ts, line 2](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/loot-core/src/platform/server/sqlite/index.electron.ts#L2)

## Support (packages/loot-core)

### Content

- **[handlebars](https://seerepo.com/uses/handlebars)**: 2 files
- **hyperformula**: 2 files
- **[xml2js](https://seerepo.com/uses/xml2js)**: 2 files
- **[csv-parse](https://seerepo.com/uses/csv-parse)**: 1 file
- **csv-stringify**: 1 file

### Testing

- **Vitest**: 38 files
- **fast-check**: 3 files
- **mockdate**: 3 files
- **fake-indexeddb**: 1 file
- **Jest**: 1 file

### Tools

- **yargs**: 1 file

### Other

- **uuid**: 25 files
- **date-fns**: 14 files
- **mitt**: 2 files
- **es-toolkit**: 1 file
- **fflate**: 1 file

## Frontend (packages/mobile-client)

### Interface

- **[appcompat](https://seerepo.com/uses/appcompat)**
- **coordinatorlayout**
- **core-splashscreen**

## Support (packages/mobile-client)

### The base

- **Capacitor**
- **CapacitorApp**
- **CapacitorCordova**

### Other

- **CapacitorHaptics**

## Support (packages/plugins-service)

### Deploy

- **workbox-precaching**: 1 file

## Frontend (packages/sync-server)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: 1 file · [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)

## Backend (packages/sync-server)

### The base

- **[Express](https://seerepo.com/uses/express)**: 15 files · [in packages/sync-server/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/sync-server/package.json)

### Data

- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file · [packages/loot-core/src/platform/server/sqlite/index.electron.ts, line 2](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/loot-core/src/platform/server/sqlite/index.electron.ts#L2)

### Sign-in

- **[argon2](https://seerepo.com/uses/argon2)**: 1 file
- **[bcrypt](https://seerepo.com/uses/bcrypt)**: 1 file
- **jws**: 1 file
- **[openid-client](https://seerepo.com/uses/openid-client)**: 1 file

## Support (packages/sync-server)

### Testing

- **Vitest**: 21 files
- **supertest**: 17 files

### Deploy

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

### Other

- **debug**: 15 files
- **uuid**: 7 files
- **undici**: 5 files
- **express-rate-limit**: 4 files
- **date-fns**: 3 files
- **ipaddr.js**: 3 files
- **cors**: 1 file
- **http-proxy-middleware**: 1 file
- **util**: 1 file

## Support (packages/vite-plugin-peggy)

### Tools

- **peggy**: 1 file

## Other repos with a similar stack

- [ToolJet/ToolJet](https://seerepo.com/r/ToolJet/ToolJet/built): React, Express, react-hotkeys-hook, react-spring, CodeMirror, react-dnd, @uiw/react-codemirror, react-dnd-html5-backend, react-markdown, remark-gfm, handlebars, bcrypt, openid-client, winston · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/ToolJet/ToolJet)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): Vite, React, lru-cache, Electron, SQLite, react-error-boundary, react-hotkeys-hook, CodeMirror, @lezer/highlight, @uiw/react-codemirror, cmdk, remark-gfm, winston · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/CherryHQ/cherry-studio)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Vite, React, React Router, lru-cache, Express, recharts, react-error-boundary, CodeMirror, @lezer/highlight, @uiw/react-codemirror, cmdk, handlebars · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/TryGhost/Ghost)
- [appsmithorg/appsmith](https://seerepo.com/r/appsmithorg/appsmith/built): React, React Router, Express, @emotion/css, react-aria-components, usehooks-ts, react-aria, react-spring, react-dnd, react-dnd-html5-backend, react-markdown, remark-gfm · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/appsmithorg/appsmith)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, React, Electron, Express, react-error-boundary, react-hotkeys-hook, react-grid-layout, react-markdown, remark-gfm, bcrypt, openid-client · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/twentyhq/twenty)
- [apache/superset](https://seerepo.com/r/apache/superset/built): React, Express, react-error-boundary, re-resizable, react-markdown, remark-gfm, handlebars, bcrypt, winston · [Compare](https://seerepo.com/compare/actualbudget/actual/vs/apache/superset)

## Frequently asked questions

### What language is actual written in?

actual is written in TypeScript, with 358,371 written lines.

### What framework does actual use?

actual is built with Vite, React, React Router, @capacitor/core, Electron, Capacitor, CapacitorApp, CapacitorCordova, and Express.

The proof: [in packages/desktop-client/package.json](https://github.com/actualbudget/actual/blob/693973bb3b0c63615856de2b7ff71da44adb47de/packages/desktop-client/package.json)

### What does actual sign people in with?

actual signs people in with argon2, bcrypt, jws, and openid-client.

### What services does actual use?

actual uses lru-cache, @sqlite.org/sqlite-wasm, and SQLite.

### Does actual have tests?

Yes. actual has 426 test files and is tested with @playwright/test, Vitest, Testing Library, fast-check, mockdate, fake-indexeddb, Jest, and supertest.

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

The ones that share most of its stack: ToolJet/ToolJet, 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.
