Source: https://seerepo.com/r/LearningCircuit/local-deep-research/built
Markdown source: https://seerepo.com/r/LearningCircuit/local-deep-research/built.md
Description: local-deep-research is a Python repo built with anyio, FastAPI, starlette, uvicorn, werkzeug, and 1 more.

# What is local-deep-research built with?

local-deep-research is a Python repo built with anyio, FastAPI, starlette, uvicorn, werkzeug, and 1 more. It reaches its data with peewee, SQLAlchemy, and alembic, signs people in with ecdsa, id, keyring, and pyjwt, uses AI through tiktoken, LangChain, langchain-openai, faiss-cpu, langchain-ollama, and 5 more, makes its content with docutils, markdown-it-py, mdurl, nh3, readme-renderer, and 22 more, validates its data with annotated-types, beartype, jsonschema, jsonschema-specifications, referencing, and 3 more, is tested with patchright, Pytest, Vitest, happy-dom, playwright, and 2 more, deploys with boto3, botocore, docker, OpenTelemetry, opentelemetry-instrumentation, and 5 more, and uses gitdb and s3transfer. It has 1,820,812 written lines, with 3,252 test files.

Read on November 14, 2026, at commit 3d6e615.

Repository: https://github.com/LearningCircuit/local-deep-research

## Frontend

### The base

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

### Styles

- **[soupsieve](https://seerepo.com/uses/soupsieve)**
- **[Bootstrap](https://seerepo.com/uses/bootstrap)**: 1 file

### Interface

- **[Rich](https://seerepo.com/uses/rich)**
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 1 file
- **[chartjs-adapter-date-fns](https://seerepo.com/uses/chartjs-adapter-date-fns)**: 1 file
- **chartjs-plugin-annotation**: 1 file

### Icons

- **bootstrap-icons**: 1 file
- **[Font Awesome](https://seerepo.com/uses/font-awesome)**: 1 file

## Backend

### The base

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

### Data

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

### Data access

- **[peewee](https://seerepo.com/uses/peewee)**
- **[SQLAlchemy](https://seerepo.com/uses/sqlalchemy)**: 101 files
- **[alembic](https://seerepo.com/uses/alembic)**: 1 file

### Sign-in

- **ecdsa**
- **id**
- **[keyring](https://seerepo.com/uses/keyring)**
- **[pyjwt](https://seerepo.com/uses/pyjwt)**

### AI

- **[tiktoken](https://seerepo.com/uses/tiktoken)**
- **[LangChain](https://seerepo.com/uses/langchain)**: 81 files
- **[langchain-openai](https://seerepo.com/uses/langchain-openai)**: 5 files
- **[faiss-cpu](https://seerepo.com/uses/faiss-cpu)**: 4 files
- **[langchain-ollama](https://seerepo.com/uses/langchain-ollama)**: 3 files
- **[langchain-anthropic](https://seerepo.com/uses/langchain-anthropic)**: 2 files
- **crawl4ai**: 1 file
- **[mcp](https://seerepo.com/uses/mcp)**: 1 file
- **[sentence-transformers](https://seerepo.com/uses/sentence-transformers)**: 1 file

### Services

- **[OpenAI](https://seerepo.com/uses/openai)**: 4 files · [src/local_deep_research/llm/providers/openai_base.py, line 455](https://github.com/LearningCircuit/local-deep-research/blob/3d6e6151cffdb8f8926567b700d538fcd69afb8c/src/local_deep_research/llm/providers/openai_base.py#L455)

## Support

### The base

- **[starlette](https://seerepo.com/uses/starlette)**: 9 files
- **[uvicorn](https://seerepo.com/uses/uvicorn)**: 2 files
- **[werkzeug](https://seerepo.com/uses/werkzeug)**: 2 files
- **[AIOHTTP](https://seerepo.com/uses/aiohttp)**: 1 file

### Content

- **[docutils](https://seerepo.com/uses/docutils)**
- **[markdown-it-py](https://seerepo.com/uses/markdown-it-py)**
- **[mdurl](https://seerepo.com/uses/mdurl)**
- **[nh3](https://seerepo.com/uses/nh3)**
- **readme-renderer**
- **[ruamel-yaml](https://seerepo.com/uses/ruamel-yaml)**
- **ruamel-yaml-clib**
- **[xmltodict](https://seerepo.com/uses/xmltodict)**
- **[beautifulsoup4](https://seerepo.com/uses/beautifulsoup4)**: 7 files
- **[defusedxml](https://seerepo.com/uses/defusedxml)**: 5 files
- **[pdfplumber](https://seerepo.com/uses/pdfplumber)**: 4 files
- **[pypdf](https://seerepo.com/uses/pypdf)**: 4 files
- **[jinja2](https://seerepo.com/uses/jinja2)**: 2 files
- **[lxml](https://seerepo.com/uses/lxml)**: 2 files
- **[markupsafe](https://seerepo.com/uses/markupsafe)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **extruct**: 1 file
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 1 file
- **[html2canvas](https://seerepo.com/uses/html2canvas)**: 1 file
- **[jspdf](https://seerepo.com/uses/jspdf)**: 1 file
- **justext**: 1 file
- **[katex](https://seerepo.com/uses/katex)**: 1 file
- **[markdown](https://seerepo.com/uses/markdown)**: 1 file
- **[marked](https://seerepo.com/uses/marked)**: 1 file
- **marked-katex-extension**: 1 file
- **readabilipy**: 1 file
- **unstructured**: 1 file

### Validation

- **[annotated-types](https://seerepo.com/uses/annotated-types)**
- **[beartype](https://seerepo.com/uses/beartype)**
- **[jsonschema](https://seerepo.com/uses/jsonschema)**
- **[jsonschema-specifications](https://seerepo.com/uses/jsonschema-specifications)**
- **[referencing](https://seerepo.com/uses/referencing)**
- **rfc3986**
- **schema**
- **[Pydantic](https://seerepo.com/uses/pydantic)**: 4 files

### Testing

- **patchright**
- **Pytest**: 1,809 files
- **Vitest**: 30 files
- **happy-dom**: 4 files
- **playwright**: 2 files
- **[cryptography](https://seerepo.com/uses/cryptography)**: 1 file
- **[nltk](https://seerepo.com/uses/nltk)**: 1 file

### Deploy

- **[boto3](https://seerepo.com/uses/boto3)**
- **[botocore](https://seerepo.com/uses/botocore)**
- **[docker](https://seerepo.com/uses/docker)**
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**
- **[opentelemetry-instrumentation](https://seerepo.com/uses/opentelemetry-instrumentation)**
- **opentelemetry-instrumentation-requests**
- **opentelemetry-instrumentation-threading**
- **[opentelemetry-semantic-conventions](https://seerepo.com/uses/opentelemetry-semantic-conventions)**
- **opentelemetry-util-http**
- **[structlog](https://seerepo.com/uses/structlog)**

### Tools

- **annotated-doc**
- **argcomplete**
- **bandit**
- **checkov**
- **click**
- **click-option-group**
- **distlib**
- **dockerfile-parse**
- **face**
- **findpython**
- **gitpython**
- **iniconfig**
- **installer**
- **pbs-installer**
- **PDM**
- **pluggy**
- **ply**
- **pycparser**
- **pygments**
- **pyproject-hooks**
- **python-discovery**
- **semgrep**
- **Setuptools**
- **shellingham**
- **towncrier**
- **twine**
- **Typer**
- **typing-extensions**
- **virtualenv**
- **wheel**
- **packaging**: 17 files
- **acorn**: 1 file
- **pip**: 1 file

### Other

- **aiodns**
- **aiohappyeyeballs**
- **aiosignal**
- **asteval**
- **attrs**
- **blinker**
- **boltons**
- **bracex**
- **brotli**
- **brotlicffi**
- **cached-property**
- **cffi**
- **charset-normalizer**
- **colorama**
- **configargparse**
- **contextlib2**
- **decorator**
- **dpath**
- **dynaconf**
- **exceptiongroup**
- **filelock**
- **frozenlist**
- **glom**
- **googleapis-common-protos**
- **greenlet**
- **h11**
- **httpcore**
- **httpcore2**
- **httpx-sse**
- **importlib-metadata**
- **jaraco-classes**
- **jaraco-context**
- **jaraco-functools**
- **jeepney**
- **jmespath**
- **jsonpickle**
- **lark**
- **license-expression**
- **more-itertools**
- **msgpack**
- **multidict**
- **networkx**
- **opentelemetry-exporter-otlp-proto-common**
- **orjson**
- **prettytable**
- **propcache**
- **protobuf**
- **pycares**
- **pydantic-settings**
- **pyee**
- **pyparsing**
- **python-dotenv**
- **rdflib**
- **regex**
- **requests-toolbelt**
- **resolvelib**
- **rpds-py**
- **rustworkx**
- **s**
- **secretstorage**
- **semantic-version**
- **six**
- **smmap**
- **socksio**
- **sortedcontainers**
- **sse-starlette**
- **stevedore**
- **tabulate**
- **termcolor**
- **toml**
- **tomli**
- **tomlkit**
- **tqdm**
- **truststore**
- **typing-inspection**
- **unidiff**
- **wcmatch**
- **wcwidth**
- **wrapt**
- **yarl**
- **zipp**
- **requests**: 36 files
- **urllib3**: 9 files
- **NumPy**: 7 files
- **cachetools**: 6 files
- **httpx**: 5 files
- **python-dateutil**: 3 files
- **httpx2**: 2 files
- **idna**: 2 files
- **arxiv**: 1 file
- **certifi**: 1 file
- **platformdirs**: 1 file
- **python-multipart**: 1 file
- **pyyaml**: 1 file
- **socket.io-client**: 1 file
- **trafilatura**: 1 file
- **wikipedia**: 1 file

## Other repos with a similar stack

- [ray-project/ray](https://seerepo.com/r/ray-project/ray/built): anyio, FastAPI, gitdb, s3transfer, starlette, uvicorn, werkzeug, AIOHTTP, soupsieve, Rich, peewee, alembic, id, keyring, pyjwt, tiktoken, LangChain, docutils, markdown-it-py, mdurl, nh3, readme-renderer, ruamel-yaml, ruamel-yaml-clib, xmltodict, beautifulsoup4, defusedxml, jinja2, lxml, markupsafe, markdown, annotated-types, jsonschema, jsonschema-specifications, referencing, rfc3986, Pydantic, boto3, botocore, docker, OpenTelemetry, opentelemetry-instrumentation, opentelemetry-semantic-conventions, opentelemetry-util-http · [Compare](https://seerepo.com/compare/LearningCircuit/local-deep-research/vs/ray-project/ray)
- [HKUDS/Vibe-Trading](https://seerepo.com/r/HKUDS/Vibe-Trading/built): anyio, FastAPI, OpenAI, starlette, uvicorn, AIOHTTP, soupsieve, Rich, peewee, keyring, pyjwt, tiktoken, LangChain, langchain-openai, MCP, markdown-it-py, mdurl, nh3, beautifulsoup4, defusedxml, pypdf, jinja2, lxml, markupsafe, highlight.js, katex, annotated-types, beartype, jsonschema, jsonschema-specifications, referencing, Pydantic, OpenTelemetry · [Compare](https://seerepo.com/compare/HKUDS/Vibe-Trading/vs/LearningCircuit/local-deep-research)
- [apache/superset](https://seerepo.com/r/apache/superset/built): anyio, s3transfer, starlette, uvicorn, werkzeug, AIOHTTP, soupsieve, SQLAlchemy, alembic, pyjwt, tiktoken, MCP, docutils, markdown-it-py, mdurl, nh3, beautifulsoup4, defusedxml, jinja2, markupsafe, dompurify, markdown, annotated-types, beartype, jsonschema, jsonschema-specifications, referencing, Pydantic, boto3, botocore, docker, OpenTelemetry · [Compare](https://seerepo.com/compare/apache/superset/vs/LearningCircuit/local-deep-research)
- [datawhalechina/hello-agents](https://seerepo.com/r/datawhalechina/hello-agents/built): anyio, FastAPI, OpenAI, starlette, uvicorn, AIOHTTP, soupsieve, Rich, Chart.js, SQLAlchemy, alembic, tiktoken, langchain-openai, MCP, sentence-transformers, beautifulsoup4, pdfplumber, pypdf, jinja2, lxml, dompurify, highlight.js, html2canvas, jspdf, katex, markdown, marked, annotated-types, jsonschema, Pydantic, OpenTelemetry · [Compare](https://seerepo.com/compare/datawhalechina/hello-agents/vs/LearningCircuit/local-deep-research)
- [run-llama/llama_index](https://seerepo.com/r/run-llama/llama_index/built): anyio, OpenAI, starlette, AIOHTTP, soupsieve, Rich, SQLAlchemy, pyjwt, tiktoken, LangChain, MCP, sentence-transformers, beautifulsoup4, defusedxml, pdfplumber, pypdf, jinja2, lxml, markupsafe, unstructured, annotated-types, jsonschema, jsonschema-specifications, referencing, Pydantic, boto3, OpenTelemetry, opentelemetry-semantic-conventions · [Compare](https://seerepo.com/compare/LearningCircuit/local-deep-research/vs/run-llama/llama_index)
- [open-webui/open-webui](https://seerepo.com/r/open-webui/open-webui/built): FastAPI, OpenAI, uvicorn, AIOHTTP, Chart.js, SQLAlchemy, alembic, pyjwt, tiktoken, LangChain, MCP, sentence-transformers, beautifulsoup4, pypdf, lxml, dompurify, highlight.js, jspdf, katex, markdown, marked, unstructured, Pydantic, boto3, OpenTelemetry, opentelemetry-instrumentation, opentelemetry-instrumentation-requests · [Compare](https://seerepo.com/compare/LearningCircuit/local-deep-research/vs/open-webui/open-webui)

## Frequently asked questions

### What language is local-deep-research written in?

local-deep-research is written in Python, with 1,820,812 written lines.

### What framework does local-deep-research use?

local-deep-research is built with anyio, FastAPI, starlette, uvicorn, werkzeug, and AIOHTTP.

### What does local-deep-research sign people in with?

local-deep-research signs people in with ecdsa, id, keyring, and pyjwt.

### Does local-deep-research use AI?

Yes. local-deep-research uses AI through tiktoken, LangChain, langchain-openai, faiss-cpu, langchain-ollama, langchain-anthropic, crawl4ai, mcp, sentence-transformers, and OpenAI.

### What services does local-deep-research use?

local-deep-research uses gitdb and s3transfer.

### Does local-deep-research have tests?

Yes. local-deep-research has 3,252 test files and is tested with patchright, Pytest, Vitest, happy-dom, playwright, cryptography, and nltk.

### Which repos have a stack like local-deep-research's?

The ones that share most of its stack: ray-project/ray, HKUDS/Vibe-Trading, and apache/superset.

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