← Home · Get Started · Concepts · Providers · API Reference
When you pip install langchain, you’re not installing one package. You’re pulling in a dependency tree that includes 50–100+ transitive packages: Pydantic, httpx, tenacity, SQLAlchemy, aiohttp, tiktoken, numpy, and more — many of which you’ll never use.
Each of those packages is:
event-stream, xz-utils, polyfill.io)$ pip install baretools-ai
$ pip show baretools-ai | grep Requires
Requires:
Nothing. Baretools uses only the Python standard library:
| Feature | Standard library module |
|---|---|
| Type hints and schema reflection | inspect, typing |
| Async execution | asyncio |
| Parallel execution | concurrent.futures |
| Structured types | dataclasses, typing.TypedDict |
| Logging / events | logging |
| JSON parsing | json |
The table below compares runtime dependency counts for popular tool-calling solutions. Figures are approximate as of April 2026 — install in a fresh venv with pip list to verify.
| Library | Runtime deps (approx.) | Install size (approx.) | Notes |
|---|---|---|---|
| baretools-ai | 0 | ~25 KB | stdlib only |
langchain-core |
~15 | ~5 MB | pydantic, httpx, tenacity, yaml… |
langchain + langchain-openai |
~50 | ~30 MB | adds tiktoken, openai SDK, etc. |
llama-index-core |
~30 | ~15 MB | pydantic, httpx, nltk, numpy… |
crewai |
~40+ | ~20 MB | langchain, pydantic, litellm… |
When the bigger frameworks are the right call. If time-to-market is the dominant constraint — you need agents, retrieval, memory, prompt templates, and evals stitched together this week — LangChain, LlamaIndex, and CrewAI will get you there faster than rolling your own. The trade-off you’re accepting is a larger supply chain to audit, less control over the agent loop, and a steeper learning curve for the framework itself versus the underlying APIs. Baretools is for the case where that trade-off has stopped paying off.
Pydantic — a great library, but not everyone needs it. If your tools accept BaseModel parameters, install it explicitly: pip install "baretools-ai[pydantic]". Otherwise, standard-library @dataclass types work out-of-the-box with zero extra installs.
httpx / requests — Baretools never makes network calls. HTTP is your application’s responsibility.
tiktoken / tokenizers — Token counting and context management are orchestration concerns that vary by application. They belong in your code.
LangChain / LangGraph — Baretools is not an alternative to the orchestration parts of those libraries. It replaces only the tool-wiring plumbing, which you can now handle yourself without pulling in the rest.
The Python Package Index has seen a sustained rise in typosquatting, dependency confusion, and maintainer account compromise attacks. The fewer packages in your dependency tree, the smaller your blast radius.
A zero-dependency library means:
pip-audit and safety scans complete instantly — there is nothing to scansrc/baretools/core.py (~900 lines of pure Python) and you’re doneBaretools was designed around one constraint: if a feature requires a non-stdlib dependency, it does not go in core.
The corollary is that Baretools is intentionally small. It will never include:
If you need those things, excellent libraries exist for each. Install only what you need.