Source: https://seerepo.com/r/logto-io/logto/built
Markdown source: https://seerepo.com/r/logto-io/logto/built.md
Description: logto is a TypeScript repo built with Vite, React, react-router-dom, Koa, koa-router, and 4 more. It stores its data in Postgres.

# What is logto built with?

logto is a TypeScript repo built with Vite, React, react-router-dom, Koa, koa-router, and 4 more. It stores its data in Postgres, signs people in with @simplewebauthn/browser, jose, @azure/msal-node, samlify, Vonage, and 5 more, stores files in AWS S3, measures its use with PostHog, makes its content with qrcode, @aws-sdk/client-sesv2, html-to-text, postmark, fast-xml-parser, and 5 more, validates its data with superstruct, Zod, and @authenio/samlify-node-xmllint, is tested with Testing Library, @swc/jest, Vitest, sinon, nock, and 4 more, deploys with applicationinsights, @aws-sdk/types, and koa-logger, and uses @azure/storage-blob, Google Cloud, lru-cache, and Redis. It has 599,575 written lines, with 1,184 test files.

Read on November 8, 2026, at commit c025460.

Repository: https://github.com/logto-io/logto

## Frontend (packages/account)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[React](https://seerepo.com/uses/react)**: 68 files · [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 22 files

### Styles

- **[classnames](https://seerepo.com/uses/classnames)**: 28 files

### Interface

- **react-modal**: 3 files

## Backend (packages/account)

### Sign-in

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

## Support (packages/account)

### Content

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

### Validation

- **superstruct**: 2 files

### Testing

- **Testing Library**: 36 files
- **@swc/jest**: 1 file

### Other

- **react-i18next**: 41 files
- **i18next**: 12 files
- **ky**: 8 files
- **date-fns**: 4 files
- **react-device-detect**: 2 files
- **ua-parser-js**: 2 files
- **@ungap/structured-clone**: 1 file
- **color**: 1 file
- **i18next-browser-languagedetector**: 1 file
- **react-helmet**: 1 file

## Support (packages/api)

### Testing

- **Vitest**: 7 files

### Other

- **openapi-fetch**: 2 files

## Support (packages/app-insights)

### Testing

- **Vitest**: 2 files

### Deploy

- **applicationinsights**: 1 file

## Frontend (packages/cli)

### Interface

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

## Backend (packages/cli)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [packages/cli/src/database.ts, line 12](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/cli/src/database.ts#L12)

## Support (packages/cli)

### Validation

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

### Testing

- **Vitest**: 8 files
- **sinon**: 1 file

### Tools

- **yargs**: 12 files
- **[Inquirer](https://seerepo.com/uses/inquirer)**: 3 files

### Other

- **chalk**: 13 files
- **got**: 3 files
- **SemVer**: 3 files
- **p-retry**: 2 files
- **tar**: 2 files
- **.ENV**: 1 file
- **decamelize**: 1 file
- **hpagent**: 1 file
- **p-limit**: 1 file

## Support (packages/connectors/connector-alipay-native)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **dayjs**: 1 file
- **got**: 1 file
- **iconv-lite**: 1 file
- **snakecase-keys**: 1 file

## Support (packages/connectors/connector-alipay-web)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **dayjs**: 1 file
- **got**: 1 file
- **iconv-lite**: 1 file
- **snakecase-keys**: 1 file

## Support (packages/connectors/connector-aliyun-dm)

### Validation

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

### Other

- **got**: 2 files

## Support (packages/connectors/connector-aliyun-sms-mas)

### Validation

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

### Testing

- **Vitest**: 1 file

### Other

- **got**: 2 files

## Support (packages/connectors/connector-aliyun-sms)

### Validation

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

### Other

- **got**: 2 files

## Support (packages/connectors/connector-amazon)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Backend (packages/connectors/connector-apple)

### Sign-in

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

## Support (packages/connectors/connector-apple)

### Validation

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

## Support (packages/connectors/connector-aws-ses)

### Content

- **[@aws-sdk/client-sesv2](https://seerepo.com/uses/aws-sdk-client-sesv2)**: 2 files

### Validation

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

### Deploy

- **@aws-sdk/types**: 1 file

## Backend (packages/connectors/connector-azuread)

### Sign-in

- **@azure/msal-node**: 1 file

## Support (packages/connectors/connector-azuread)

### Validation

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

### Testing

- **nock**: 1 file
- **Vitest**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-dingtalk-web)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-discord)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-facebook)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-feishu-web)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-gatewayapi-sms)

### Validation

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

### Other

- **got**: 1 file

## Support (packages/connectors/connector-github)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-gitlab)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Backend (packages/connectors/connector-google)

### Sign-in

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

## Support (packages/connectors/connector-google)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-http-email)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-http-sms)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-huggingface)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-kakao)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-kook)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-line)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-linkedin)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-logto-email)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-mailgun)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-mailjunky)

### Content

- **[html-to-text](https://seerepo.com/uses/html-to-text)**: 1 file

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-mock-email-alternative)

### Validation

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

## Support (packages/connectors/connector-mock-email)

### Validation

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

## Support (packages/connectors/connector-mock-sms)

### Validation

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

## Support (packages/connectors/connector-mock-social)

### Validation

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

## Support (packages/connectors/connector-naver)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Backend (packages/connectors/connector-oauth2)

### Sign-in

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

## Support (packages/connectors/connector-oauth2)

### Validation

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

### Testing

- **nock**: 2 files

### Other

- **ky**: 3 files
- **query-string**: 1 file
- **snakecase-keys**: 1 file

## Backend (packages/connectors/connector-oidc)

### Sign-in

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

## Support (packages/connectors/connector-oidc)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 2 files

## Support (packages/connectors/connector-patreon)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-postmark)

### Content

- **postmark**: 1 file

### Validation

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

## Support (packages/connectors/connector-qq)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Backend (packages/connectors/connector-saml)

### Sign-in

- **samlify**: 3 files

## Support (packages/connectors/connector-saml)

### Content

- **[fast-xml-parser](https://seerepo.com/uses/fast-xml-parser)**: 1 file

### Validation

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

## Support (packages/connectors/connector-sendgrid-email)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-siwe)

### Validation

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

### Other

- **viem**: 1 file

## Support (packages/connectors/connector-slack)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-smsaero)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-smsbao-sms)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-smtp)

### Content

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

### Validation

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

## Support (packages/connectors/connector-smtp2go-email)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-tencent-sms)

### Validation

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

### Other

- **got**: 2 files

## Support (packages/connectors/connector-twilio-sms)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Backend (packages/connectors/connector-vonage-sms)

### Sign-in

- **Vonage**: 1 file

## Support (packages/connectors/connector-vonage-sms)

### Validation

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

## Support (packages/connectors/connector-wechat-native)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-wechat-web)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-wecom)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-whatsapp)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Support (packages/connectors/connector-x)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-xiaomi)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **ky**: 1 file

## Support (packages/connectors/connector-yunpian-sms)

### Validation

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

### Testing

- **nock**: 1 file

### Other

- **got**: 1 file

## Frontend (packages/console)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[React](https://seerepo.com/uses/react)**: 545 files · [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 119 files

### Styles

- **[classnames](https://seerepo.com/uses/classnames)**: 190 files
- **@fontsource/roboto-mono**: 1 file

### Interface

- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 155 files
- **[react-hot-toast](https://seerepo.com/uses/react-hot-toast)**: 106 files
- **react-modal**: 56 files
- **[@monaco-editor/react](https://seerepo.com/uses/monaco-editor-react)**: 7 files
- **@inkeep/cxkit-react**: 2 files
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 2 files
- **[react-dnd](https://seerepo.com/uses/react-dnd)**: 2 files
- **[react-dropzone](https://seerepo.com/uses/react-dropzone)**: 2 files
- **dnd-core**: 1 file
- **[Mermaid](https://seerepo.com/uses/mermaid)**: 1 file
- **overlayscrollbars**: 1 file
- **overlayscrollbars-react**: 1 file
- **[prism-react-renderer](https://seerepo.com/uses/prism-react-renderer)**: 1 file
- **react-animate-height**: 1 file
- **react-confetti**: 1 file
- **[react-dnd-html5-backend](https://seerepo.com/uses/react-dnd-html5-backend)**: 1 file
- **react-paginate**: 1 file
- **[react-syntax-highlighter](https://seerepo.com/uses/react-syntax-highlighter)**: 1 file
- **[recharts](https://seerepo.com/uses/recharts)**: 1 file

## Backend (packages/console)

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 4 files · [packages/core/src/utils/posthog.ts, line 10](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/utils/posthog.ts#L10)

## Support (packages/console)

### Content

- **@mdx-js/react**: 1 file
- **property-information**: 1 file
- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 1 file
- **[remark-gfm](https://seerepo.com/uses/remark-gfm)**: 1 file

### Validation

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

### Testing

- **Testing Library**: 58 files

### Other

- **react-i18next**: 442 files
- **SWR**: 171 files
- **i18next**: 24 files
- **ky**: 20 files
- **date-fns**: 15 files
- **dayjs**: 10 files
- **deep-object-diff**: 4 files
- **react-helmet**: 4 files
- **debug**: 2 files
- **nanoid**: 2 files
- **deepmerge**: 1 file
- **i18next-browser-languagedetector**: 1 file
- **Just**: 1 file
- **libphonenumber-js**: 1 file
- **react-timer-hook**: 1 file
- **tiny-cookie**: 1 file
- **ua-parser-js**: 1 file

## Backend (packages/core)

### The base

- **Koa**: 76 files · [in packages/core/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/package.json)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [packages/cli/src/database.ts, line 12](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/cli/src/database.ts#L12)
- **[@azure/storage-blob](https://seerepo.com/uses/azure-storage-blob)**: 1 file
- **[Google Cloud](https://seerepo.com/uses/google-cloud)**: 1 file · [packages/core/src/utils/storage/google-storage.ts, line 1](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/utils/storage/google-storage.ts#L1)
- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 1 file
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [packages/core/src/caches/index.ts, line 6](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/caches/index.ts#L6)

### Sign-in

- **oidc-provider**: 53 files
- **[jose](https://seerepo.com/uses/jose)**: 11 files
- **[otplib](https://seerepo.com/uses/otplib)**: 4 files
- **samlify**: 4 files
- **[@simplewebauthn/server](https://seerepo.com/uses/simplewebauthn-server)**: 3 files
- **[helmet](https://seerepo.com/uses/helmet)**: 1 file

### Services

- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [packages/core/src/utils/storage/s3-storage.ts, line 7](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/utils/storage/s3-storage.ts#L7)
- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [packages/core/src/utils/posthog.ts, line 10](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/utils/posthog.ts#L10)

## Support (packages/core)

### The base

- **koa-router**: 53 files
- **koa-body**: 2 files
- **koa-compose**: 2 files
- **koa-mount**: 1 file

### Content

- **[qrcode](https://seerepo.com/uses/qrcode)**: 3 files
- **[fast-xml-parser](https://seerepo.com/uses/fast-xml-parser)**: 2 files

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 181 files
- **@authenio/samlify-node-xmllint**: 1 file

### Testing

- **sinon**: 28 files
- **supertest**: 10 files
- **nock**: 9 files
- **node-mocks-http**: 4 files
- **Jest**: 1 file

### Deploy

- **koa-logger**: 1 file

### Tools

- **openapi-types**: 7 files
- **find-up**: 2 files
- **pkg-dir**: 2 files
- **tinypool**: 1 file

### Other

- **date-fns**: 15 files
- **got**: 13 files
- **chalk**: 12 files
- **hash-wasm**: 8 files
- **ky**: 7 files
- **i18next**: 6 files
- **snakecase-keys**: 6 files
- **camelcase-keys**: 5 files
- **deepmerge**: 5 files
- **nanoid**: 4 files
- **camelcase**: 3 files
- **p-map**: 3 files
- **p-retry**: 2 files
- **pluralize**: 2 files
- **snake-case**: 2 files
- **.ENV**: 1 file
- **@koa/cors**: 1 file
- **adm-zip**: 1 file
- **decamelize**: 1 file
- **etag**: 1 file
- **http-errors**: 1 file
- **koa-compress**: 1 file
- **koa-send**: 1 file
- **mime**: 1 file
- **node-forge**: 1 file
- **raw-body**: 1 file
- **ua-parser-js**: 1 file

## Support (packages/elements)

### The base

- **[Lit](https://seerepo.com/uses/lit)**: 11 files

### Testing

- **@open-wc/testing**: 7 files

### Other

- **@lit/context**: 3 files
- **ky**: 1 file
- **libphonenumber-js**: 1 file

## Frontend (packages/experience)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[React](https://seerepo.com/uses/react)**: 230 files · [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 55 files

### Styles

- **[classnames](https://seerepo.com/uses/classnames)**: 58 files

### Interface

- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 15 files
- **react-modal**: 10 files
- **@react-spring/web**: 2 files
- **overlayscrollbars**: 1 file
- **overlayscrollbars-react**: 1 file
- **[react-easy-crop](https://seerepo.com/uses/react-easy-crop)**: 1 file
- **react-top-loading-bar**: 1 file

## Backend (packages/experience)

### Sign-in

- **simplewebauthn**: 8 files

## Support (packages/experience)

### Validation

- **superstruct**: 24 files

### Testing

- **Testing Library**: 83 files

### Other

- **react-i18next**: 89 files
- **i18next**: 40 files
- **ky**: 6 files
- **react-helmet**: 3 files
- **react-timer-hook**: 3 files
- **tiny-cookie**: 3 files
- **libphonenumber-js**: 2 files
- **color**: 1 file
- **core-js**: 1 file
- **date-fns**: 1 file
- **i18next-browser-languagedetector**: 1 file
- **js-base64**: 1 file
- **react-device-detect**: 1 file

## Support (packages/phrases-experience)

### Validation

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

## Support (packages/phrases)

### Validation

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

## Support (packages/schemas)

### Validation

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

### Testing

- **Vitest**: 20 files

### Tools

- **[Inquirer](https://seerepo.com/uses/inquirer)**: 2 files

### Other

- **camelcase**: 2 files
- **pluralize**: 2 files
- **chalk**: 1 file
- **nanoid**: 1 file

## Support (packages/shared)

### Testing

- **Vitest**: 9 files

### Tools

- **find-up**: 1 file

### Other

- **chalk**: 2 files
- **libphonenumber-js**: 1 file
- **nanoid**: 1 file
- **ua-parser-js**: 1 file

## Support (packages/toolkit/connector-kit)

### Validation

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

### Testing

- **Vitest**: 5 files
- **nock**: 1 file

### Other

- **@noble/hashes**: 1 file
- **ky**: 1 file

## Support (packages/toolkit/core-kit)

### Validation

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

### Testing

- **Vitest**: 6 files

### Other

- **color**: 1 file

## Support (packages/toolkit/language-kit)

### Validation

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

### Testing

- **Vitest**: 1 file

## Frontend (packages/translate)

### Interface

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

## Support (packages/translate)

### Validation

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

### Tools

- **yargs**: 5 files
- **[Inquirer](https://seerepo.com/uses/inquirer)**: 1 file
- **TypeScript**: 1 file

### Other

- **chalk**: 3 files
- **p-queue**: 3 files
- **.ENV**: 1 file
- **got**: 1 file
- **hpagent**: 1 file

## Frontend (packages/tunnel)

### Interface

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

## Support (packages/tunnel)

### Testing

- **Vitest**: 1 file

### Tools

- **yargs**: 3 files
- **find-up**: 1 file

### Other

- **chalk**: 5 files
- **.ENV**: 1 file
- **adm-zip**: 1 file
- **http-proxy-middleware**: 1 file
- **mime**: 1 file

## Other repos with a similar stack

- [ToolJet/ToolJet](https://seerepo.com/r/ToolJet/ToolJet/built): React, react-router-dom, Postgres, PostHog, @azure/storage-blob, Redis, classnames, qrcode, @aws-sdk/client-sesv2, nodemailer, react-hot-toast, react-dnd, react-dropzone, react-dnd-html5-backend, react-syntax-highlighter, react-markdown, remark-gfm, helmet · [Compare](https://seerepo.com/compare/logto-io/logto/vs/ToolJet/ToolJet)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, React, react-router-dom, Postgres, Redis, AWS S3, Zod, jose, @aws-sdk/client-sesv2, @azure/msal-node, html-to-text, nodemailer, React Hook Form, react-dropzone, react-markdown, remark-gfm, otplib · [Compare](https://seerepo.com/compare/logto-io/logto/vs/twentyhq/twenty)
- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): React, Postgres, Redis, AWS S3, classnames, qrcode, Zod, React Hook Form, @monaco-editor/react, react-day-picker, react-dropzone, Mermaid, react-syntax-highlighter, recharts, react-markdown, remark-gfm · [Compare](https://seerepo.com/compare/infiniflow/ragflow/vs/logto-io/logto)
- [calcom/cal.diy](https://seerepo.com/r/calcom/cal.diy/built): React, Postgres, PostHog, lru-cache, Redis, classnames, qrcode, Zod, jose, nodemailer, React Hook Form, react-day-picker, otplib, helmet, react-easy-crop · [Compare](https://seerepo.com/compare/calcom/cal.diy/vs/logto-io/logto)
- [appsmithorg/appsmith](https://seerepo.com/r/appsmithorg/appsmith/built): React, react-router-dom, Redis, classnames, react-modal, Zod, nodemailer, React Hook Form, react-dnd, overlayscrollbars, overlayscrollbars-react, react-dnd-html5-backend, react-syntax-highlighter, react-markdown, remark-gfm · [Compare](https://seerepo.com/compare/appsmithorg/appsmith/vs/logto-io/logto)
- [outline/outline](https://seerepo.com/r/outline/outline/built): Vite, React, react-router-dom, Postgres, Koa, Redis, koa-body, koa-mount, Zod, nodemailer, React Hook Form, react-day-picker, react-dropzone, simplewebauthn · [Compare](https://seerepo.com/compare/logto-io/logto/vs/outline/outline)

## Frequently asked questions

### What language is logto written in?

logto is written in TypeScript, with 599,575 written lines.

### What framework does logto use?

logto is built with Vite, React, react-router-dom, Koa, koa-router, koa-body, koa-compose, koa-mount, and Lit.

The proof: [in packages/account/package.json](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/account/package.json)

### What database does logto use?

logto stores its data in Postgres.

The proof: [packages/cli/src/database.ts, line 12](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/cli/src/database.ts#L12)

### What does logto sign people in with?

logto signs people in with @simplewebauthn/browser, jose, @azure/msal-node, samlify, Vonage, oidc-provider, otplib, @simplewebauthn/server, helmet, and simplewebauthn.

### What services does logto use?

logto stores files in AWS S3, measures its use with PostHog, and uses @azure/storage-blob, Google Cloud, lru-cache, and Redis.

The proof: [packages/core/src/utils/storage/s3-storage.ts, line 7](https://github.com/logto-io/logto/blob/c0254605814ee6823c30946f47e20f8007329127/packages/core/src/utils/storage/s3-storage.ts#L7)

### Does logto have tests?

Yes. logto has 1,184 test files and is tested with Testing Library, @swc/jest, Vitest, sinon, nock, supertest, node-mocks-http, Jest, and @open-wc/testing.

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

The ones that share most of its stack: ToolJet/ToolJet, twentyhq/twenty, and infiniflow/ragflow.

## 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.
