Source: https://seerepo.com/r/OpenCTI-Platform/opencti/built
Markdown source: https://seerepo.com/r/OpenCTI-Platform/opencti/built.md
Description: opencti is a TypeScript repo built with FastAPI, starlette, uvicorn, Vite, React, and 6 more.

# What is opencti built with?

opencti is a TypeScript repo built with FastAPI, starlette, uvicorn, Vite, React, and 6 more. It signs people in with pyjwt, Passport, jose, aws-sdk, bcryptjs, and 10 more, uses AI through LangChain and OpenAI, makes its content with pdfmake, html-react-parser, dompurify, react-markdown, react-pdf, and 14 more, validates its data with Pydantic, yup, prop-types, @cfworker/json-schema, @rjsf/utils, and 4 more, is tested with Vitest, Testing Library, @playwright/test, relay-test-utils, Faker, and 2 more, deploys with python-json-logger, prometheus-client, boto3, OpenTelemetry, opentelemetry-exporter-prometheus, and 5 more, and uses pika, lru-cache, amqplib, Redis, @aws-sdk/lib-storage, and 4 more. It has 1,058,731 written lines, with 1,727 test files.

Read on November 13, 2026, at commit 76306f3.

Repository: https://github.com/OpenCTI-Platform/opencti

## Frontend (/)

### Styles

- **[sphinx-rtd-theme](https://seerepo.com/uses/sphinx-rtd-theme)**

## Backend (/)

### The base

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

### Data

- **pika**: 4 files

### Sign-in

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

## Support (/)

### The base

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

### Validation

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

### Deploy

- **[python-json-logger](https://seerepo.com/uses/python-json-logger)**
- **[prometheus-client](https://seerepo.com/uses/prometheus-client)**: 2 files
- **[boto3](https://seerepo.com/uses/boto3)**: 1 file
- **OpenTelemetry**: 1 file
- **opentelemetry-exporter-prometheus**: 1 file

### Tools

- **Setuptools**
- **Sphinx**
- **sphinx-autoapi**
- **sphinx-autodoc-typehints**

### Other

- **requests**: 3 files
- **cachetools**: 1 file
- **deprecation**: 1 file
- **pyyaml**: 1 file

## Frontend (opencti-platform/opencti-front)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in opencti-platform/opencti-front/package.json](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-front/package.json)
- **[React](https://seerepo.com/uses/react)**: 2,217 files · [in opencti-platform/opencti-front/package.json](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-front/package.json)
- **react-relay**: 1,443 files
- **[React Router](https://seerepo.com/uses/react-router)**: 441 files

### Interface

- **[MUI](https://seerepo.com/uses/mui)**: 1,271 files
- **[Formik](https://seerepo.com/uses/formik)**: 428 files
- **apexcharts**: 43 files
- **[reactflow](https://seerepo.com/uses/reactflow)**: 43 files
- **jsonforms**: 11 files
- **react-force-graph-2d**: 7 files
- **[@hello-pangea/dnd](https://seerepo.com/uses/hello-pangea-dnd)**: 5 files
- **react-mde**: 5 files
- **[react-syntax-highlighter](https://seerepo.com/uses/react-syntax-highlighter)**: 3 files
- **[react-virtualized](https://seerepo.com/uses/react-virtualized)**: 3 files
- **[react-virtualized-auto-sizer](https://seerepo.com/uses/react-virtualized-auto-sizer)**: 3 files
- **[D3](https://seerepo.com/uses/d3)**: 2 files
- **[react-grid-layout](https://seerepo.com/uses/react-grid-layout)**: 2 files
- **[rjsf](https://seerepo.com/uses/rjsf)**: 2 files
- **@graphiql/toolkit**: 1 file
- **d3-timer**: 1 file
- **[MapLibre](https://seerepo.com/uses/maplibre)**: 1 file
- **react-apexcharts**: 1 file
- **[react-color](https://seerepo.com/uses/react-color)**: 1 file
- **react-draggable**: 1 file
- **[react-transition-group](https://seerepo.com/uses/react-transition-group)**: 1 file
- **[recharts](https://seerepo.com/uses/recharts)**: 1 file
- **three-spritetext**: 1 file

### Icons

- **[@mui/icons-material](https://seerepo.com/uses/mui-icons-material)**: 532 files

## Support (opencti-platform/opencti-front)

### Content

- **pdfmake**: 7 files
- **html-react-parser**: 6 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 4 files
- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 3 files
- **[react-pdf](https://seerepo.com/uses/react-pdf)**: 3 files
- **[marked](https://seerepo.com/uses/marked)**: 2 files
- **[qrcode](https://seerepo.com/uses/qrcode)**: 2 files
- **[html-to-image](https://seerepo.com/uses/html-to-image)**: 1 file
- **is-svg**: 1 file
- **[markdown-to-jsx](https://seerepo.com/uses/markdown-to-jsx)**: 1 file
- **[remark-gfm](https://seerepo.com/uses/remark-gfm)**: 1 file
- **[remark-parse](https://seerepo.com/uses/remark-parse)**: 1 file

### Validation

- **[yup](https://seerepo.com/uses/yup)**: 254 files
- **[prop-types](https://seerepo.com/uses/prop-types)**: 195 files
- **@cfworker/json-schema**: 2 files
- **@rjsf/utils**: 2 files

### Testing

- **Vitest**: 474 files
- **Testing Library**: 278 files
- **@playwright/test**: 222 files
- **relay-test-utils**: 22 files
- **Faker**: 4 files
- **monocart-reporter**: 1 file

### Deploy

- **@opentelemetry/sdk-logs**: 3 files

### Tools

- **TypeScript**: 2 files
- **graphiql**: 1 file

### Other

- **ramda**: 256 files
- **Relay**: 211 files
- **rxjs**: 36 files
- **uuid**: 28 files
- **js-file-download**: 17 files
- **react-intl**: 11 files
- **moment**: 8 files
- **date-fns**: 7 files
- **OpenTelemetry**: 4 files
- **react-cookie**: 3 files
- **analytics**: 2 files
- **use-analytics**: 2 files
- **dom-accessibility-api**: 1 file
- **graphql-ws**: 1 file
- **ipaddr.js**: 1 file
- **js-base64**: 1 file
- **json5**: 1 file
- **pmtiles**: 1 file

## Backend (opencti-platform/opencti-graphql)

### The base

- **[Express](https://seerepo.com/uses/express)**: 12 files · [in opencti-platform/opencti-graphql/package.json](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/package.json)

### Data

- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 6 files
- **amqplib**: 2 files
- **[Redis](https://seerepo.com/uses/redis)**: 2 files · [opencti-platform/opencti-graphql/src/database/redis.ts, line 1](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/src/database/redis.ts#L1)
- **@aws-sdk/lib-storage**: 1 file
- **@sesamecare-oss/redlock**: 1 file
- **[Elastic](https://seerepo.com/uses/elastic)**: 1 file · [opencti-platform/opencti-graphql/src/database/engine.ts, line 3](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/src/database/engine.ts#L3)
- **[OpenSearch](https://seerepo.com/uses/opensearch)**: 1 file · [opencti-platform/opencti-graphql/src/database/engine.ts, line 6](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/src/database/engine.ts#L6)

### Sign-in

- **[Passport](https://seerepo.com/uses/passport)**: 6 files
- **[jose](https://seerepo.com/uses/jose)**: 4 files
- **[aws-sdk](https://seerepo.com/uses/aws-sdk)**: 3 files
- **[bcryptjs](https://seerepo.com/uses/bcryptjs)**: 3 files
- **[express-session](https://seerepo.com/uses/express-session)**: 3 files
- **@node-saml/passport-saml**: 2 files
- **[helmet](https://seerepo.com/uses/helmet)**: 2 files
- **[jwt-decode](https://seerepo.com/uses/jwt-decode)**: 2 files
- **[openid-client](https://seerepo.com/uses/openid-client)**: 2 files
- **passport-ldapauth**: 2 files
- **[otplib](https://seerepo.com/uses/otplib)**: 1 file
- **passport-facebook**: 1 file
- **passport-google-oauth**: 1 file
- **[passport-local](https://seerepo.com/uses/passport-local)**: 1 file

### AI

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

### Services

- **Mistral AI**: 1 file · [opencti-platform/opencti-graphql/src/database/ai-llm.ts, line 4](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/src/database/ai-llm.ts#L4)
- **[OpenAI](https://seerepo.com/uses/openai)**: 1 file · [opencti-platform/opencti-graphql/src/database/ai-llm.ts, line 6](https://github.com/OpenCTI-Platform/opencti/blob/76306f3f08eaced718557776cce3a7e0b868d666/opencti-platform/opencti-graphql/src/database/ai-llm.ts#L6)

## Support (opencti-platform/opencti-graphql)

### The base

- **[starlette](https://seerepo.com/uses/starlette)**
- **@apollo/server**: 7 files
- **graphql-scalars**: 3 files
- **@as-integrations/express5**: 1 file

### Content

- **[EJS](https://seerepo.com/uses/ejs)**: 4 files
- **[marked](https://seerepo.com/uses/marked)**: 2 files
- **[turndown](https://seerepo.com/uses/turndown)**: 2 files
- **[csv-parse](https://seerepo.com/uses/csv-parse)**: 1 file
- **[file-type](https://seerepo.com/uses/file-type)**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 1 file
- **[xml2js](https://seerepo.com/uses/xml2js)**: 1 file

### Validation

- **[Ajv](https://seerepo.com/uses/ajv)**: 22 files
- **[Zod](https://seerepo.com/uses/zod)**: 22 files
- **[validator](https://seerepo.com/uses/validator)**: 5 files
- **[ajv-formats](https://seerepo.com/uses/ajv-formats)**: 1 file

### Testing

- **Vitest**: 747 files
- **[tough-cookie](https://seerepo.com/uses/tough-cookie)**: 1 file

### Deploy

- **OpenTelemetry**: 24 files
- **@aws-sdk/types**: 1 file
- **@pyroscope/nodejs**: 1 file
- **[winston](https://seerepo.com/uses/winston)**: 1 file
- **[winston-daily-rotate-file](https://seerepo.com/uses/winston-daily-rotate-file)**: 1 file

### Tools

- **esbuild**: 4 files
- **@graphql-codegen/cli**: 1 file
- **@lezer/javascript**: 1 file
- **@rollup/plugin-graphql**: 1 file
- **chokidar**: 1 file
- **esbuild-plugin-copy**: 1 file
- **graphql-tools**: 1 file
- **node-gyp-build**: 1 file
- **source-map**: 1 file

### Other

- **yara-python**
- **ramda**: 167 files
- **graphql-tag**: 155 files
- **uuid**: 78 files
- **bluebird**: 38 files
- **nconf**: 29 files
- **moment**: 23 files
- **GraphQL**: 19 files
- **fast-json-patch**: 15 files
- **SemVer**: 8 files
- **[opentelemetry](https://seerepo.com/uses/opentelemetry)**: 7 files
- **canonicalize**: 5 files
- **node-forge**: 5 files
- **undici**: 5 files
- **antlr4**: 4 files
- **mime-types**: 4 files
- **ipaddr.js**: 3 files
- **luxon**: 3 files
- **@graphql-tools/utils**: 2 files
- **archiver**: 2 files
- **body-parser**: 2 files
- **express-rate-limit**: 2 files
- **graphql-upload**: 2 files
- **jsonpath-plus**: 2 files
- **migrate**: 2 files
- **node-fetch**: 2 files
- **unzipper**: 2 files
- **@escape.tech/graphql-armor**: 1 file
- **@noble/ed25519**: 1 file
- **ae-cvss-calculator**: 1 file
- **async-lock**: 1 file
- **aws-sdk-v3-proxy**: 1 file
- **busboy**: 1 file
- **bytes**: 1 file
- **compression**: 1 file
- **content-disposition**: 1 file
- **content-type**: 1 file
- **cors**: 1 file
- **dataloader**: 1 file
- **eventsource**: 1 file
- **eventsource-parser**: 1 file
- **form-data**: 1 file
- **github-api**: 1 file
- **graphql-redis-subscriptions**: 1 file
- **graphql-subscriptions**: 1 file
- **graphql-ws**: 1 file
- **http-proxy-agent**: 1 file
- **https-proxy-agent**: 1 file
- **jsonpatch**: 1 file
- **python-shell**: 1 file
- **re2**: 1 file
- **slug**: 1 file
- **ws**: 1 file

## Other repos with a similar stack

- [apache/superset](https://seerepo.com/r/apache/superset/built): starlette, uvicorn, React, Express, Redis, pyjwt, Pydantic, python-json-logger, prometheus-client, boto3, OpenTelemetry, react-syntax-highlighter, D3, MapLibre, react-draggable, dompurify, react-markdown, markdown-to-jsx, remark-gfm, prop-types, jwt-decode, Zod, winston · [Compare](https://seerepo.com/compare/apache/superset/vs/OpenCTI-Platform/opencti)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, React, Redis, OpenAI, graphql-scalars, D3, react-grid-layout, dompurify, react-markdown, marked, remark-gfm, Passport, jose, aws-sdk, express-session, openid-client, otplib, file-type, nodemailer, sanitize-html, Zod · [Compare](https://seerepo.com/compare/OpenCTI-Platform/opencti/vs/twentyhq/twenty)
- [RocketChat/Rocket.Chat](https://seerepo.com/r/RocketChat/Rocket.Chat/built): Vite, React, Express, reactflow, @hello-pangea/dnd, dompurify, marked, is-svg, remark-parse, Passport, jose, aws-sdk, express-session, csv-parse, file-type, nodemailer, sanitize-html, Ajv, Zod, ajv-formats · [Compare](https://seerepo.com/compare/OpenCTI-Platform/opencti/vs/RocketChat/Rocket.Chat)
- [makeplane/plane](https://seerepo.com/r/makeplane/plane/built): uvicorn, React, React Router, Express, Redis, @sesamecare-oss/redlock, OpenAI, pyjwt, python-json-logger, boto3, OpenTelemetry, recharts, react-markdown, remark-gfm, helmet, file-type, sanitize-html, Zod, winston · [Compare](https://seerepo.com/compare/makeplane/plane/vs/OpenCTI-Platform/opencti)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Vite, React, React Router, Express, lru-cache, D3, recharts, dompurify, prop-types, jose, express-session, otplib, file-type, nodemailer, sanitize-html, Ajv, Zod, validator, ajv-formats · [Compare](https://seerepo.com/compare/OpenCTI-Platform/opencti/vs/TryGhost/Ghost)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): FastAPI, pika, uvicorn, React, Redis, OpenAI, pyjwt, Pydantic, prometheus-client, boto3, react-force-graph-2d, rjsf, recharts, react-markdown, remark-gfm, jose, bcryptjs, Zod · [Compare](https://seerepo.com/compare/OpenCTI-Platform/opencti/vs/Significant-Gravitas/AutoGPT)

## Frequently asked questions

### What language is opencti written in?

opencti is written in TypeScript, with 1,058,731 written lines.

### What framework does opencti use?

opencti is built with FastAPI, starlette, uvicorn, Vite, React, react-relay, React Router, Express, @apollo/server, graphql-scalars, and @as-integrations/express5.

### What does opencti sign people in with?

opencti signs people in with pyjwt, Passport, jose, aws-sdk, bcryptjs, express-session, @node-saml/passport-saml, helmet, jwt-decode, openid-client, passport-ldapauth, otplib, passport-facebook, passport-google-oauth, and passport-local.

### Does opencti use AI?

Yes. opencti uses AI through LangChain and OpenAI.

### What services does opencti use?

opencti uses pika, lru-cache, amqplib, Redis, @aws-sdk/lib-storage, @sesamecare-oss/redlock, Elastic, OpenSearch, and Mistral AI.

### Does opencti have tests?

Yes. opencti has 1,727 test files and is tested with Vitest, Testing Library, @playwright/test, relay-test-utils, Faker, monocart-reporter, and tough-cookie.

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

The ones that share most of its stack: apache/superset, twentyhq/twenty, and RocketChat/Rocket.Chat.

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