Interested in contributing to TruLens? Here's how to get started!
Step 1: Join the community.
Step 2: Find something to work on below, or browse open issues.
New to TruLens? These are great entry points:
Issues tagged good first issue
are curated for new contributors. They're well-scoped and often include guidance
on where to start.
Issues tagged help wanted
are meatier tasks where we'd love community help. These may require more context
but have significant impact.
Applied TruLens to an interesting use case? Share it as a cookbook example notebook—like Evaluating Weaviate Query Agents.
Examples live in examples/ and are organized into folders:
| Folder | Purpose |
|---|---|
quickstart/ |
Minimal, focused notebooks for getting started fast. These should be simple and demonstrate core TruLens concepts with minimal dependencies. |
expositional/ |
In-depth tutorials organized by topic (frameworks/, models/, use_cases/, vector_stores/). These can be longer and cover advanced integrations. |
experimental/ |
Work-in-progress examples, internal testing notebooks, or demos of experimental features. Not published to docs. |
Example notebooks should:
- Start with a clear title and description
- Include versioned dependencies:
# !pip install trulens trulens-apps-langchain==1.2.0 - Be self-contained and runnable
- Go in the appropriate folder based on scope and audience
Found something confusing? If it confused you, it's confusing others too. Documentation improvements are always welcome—from fixing typos to clarifying concepts.
Ready to dive deeper? These areas have significant impact:
Feedback functions are the backbone of TruLens evaluations. Extend the library with new evaluation methods:
- Add to an existing provider module
- See the custom feedback functions guide
Requirements: Functions should accept text input(s) and return a float (0.0–1.0) or dict[str, float].
Need a model provider we don't support? Add a new trulens-providers-* package:
- Browse existing providers in
src/providers/ - Each provider is a separate installable package (see Package Architecture)
Or open an issue requesting a provider—we track demand.
Instrument a new LLM framework by adding a trulens-apps-* package:
- See existing integrations: LangChain, LlamaIndex, NeMo Guardrails
- App packages live in
src/apps/
Connectors define where TruLens stores trace and evaluation logs. Add a new
trulens-connectors-* package to support additional databases:
- See the existing Snowflake connector in
src/connectors/ - Connectors implement the storage interface for traces, records, and feedback results
Bugs are tracked in GitHub Issues. Feel free to claim an issue by commenting or assigning yourself.
For contributors familiar with the codebase:
The TruLens dashboard (src/dashboard/) uses React + TypeScript. Contributions welcome for:
- UI/UX improvements
- New visualizations
- Performance optimizations
TruLens uses OpenTelemetry for tracing. Work in this area includes:
- Span and attribute improvements in
trulens.core.otel - New exporters and integrations
- Performance and reliability enhancements
See Design Principles for architecture context.
Have an idea that pushes TruLens in a new direction? Experimental features use
the experimental_ prefix and can be toggled via TruSession.experimental_enable_feature().
Past community contributions include the SQLAlchemy connector and LiteLLM provider.
Before contributing, familiarize yourself with:
| Guide | Description |
|---|---|
| Development Setup | Environment setup, running tests, local development |
| Standards | Code style, testing, and documentation conventions |
| Design Principles | Architecture goals and API design rationale |
| Package Architecture | Modular package structure since TruLens 1.0 |
| Release Policies | Versioning, deprecation, and experimental features |
| Tech Debt | Known issues and areas needing refactoring |
| Database Schema | OTEL events table, legacy schema, and migrations |
{% include-markdown "CONTRIBUTORS.md" heading-offset=2 %}
{% include-markdown "MAINTAINERS.md" heading-offset=2 %}