Expose rtk as a library crate
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 81.1k
- Forks
- 5.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 35
Description
Summary
RTK's filtering engine and command classifier are valuable beyond CLI proxy use.
Several modules (filter.rs, discover/registry.rs, utils.rs) already have clean public APIs that return values; they just can't be consumed externally because there's no [lib] target and all modules are private.
i.e. they use mod not pub mod.
Proposal:
- Add a
[lib]target toCargo.toml - Create
src/lib.rswith curated public re-exports.
This will allow downstream crates to depend on rtk as a library (git dependency).
Motivation
Consuming rtk as a library enables:
- In-process output filtering: no subprocess overhead, call
filter.filter(content, lang)directly - Embedding in other tools: LLM agent frameworks, coding tools, etc. without complexity of downloading
rtk.
Current State (Why It Doesn't Work Today)
| Check | Result |
|---|---|
[lib] section in Cargo.toml |
Missing |
src/lib.rs |
Does not exist |
| Module visibility | All mod (not pub mod) |
| crates.io package | Name collision ("Rust Type Kit") |
Proposed Change
Modules ready for public exposure (no refactoring needed)
These already return values and avoid println! / std::process::exit():
filter:FilterStrategytrait,get_filter(level),Language::from_extension(),smart_truncate()discover::registry:classify_command(),rewrite_command()discover::rules: static pattern/rule data (PATTERNS,RULES,IGNORED_PREFIXES)utils:strip_ansi(),truncate(),format_tokens()
Changes needed
- Add
[lib]section toCargo.toml(name = "rtk",path = "src/lib.rs") - Create
src/lib.rswithpub modfor the modules listed above - Change
mod→pub modinsrc/main.rsfor those modules - Ensure
src/discover/mod.rssubmodules arepubwhere needed
The [lib] target coexists with the existing [bin]. cargo build produces both, no breaking change.
Out of scope for this issue
The 57+ *_cmd.rs modules (git.rs, cargo_cmd.rs, etc.) use println! and std::process::exit(). Refactoring those to return String is a separate effort that can be tracked in a follow-up issue.
Alternatives Considered
- Fork with lib support: works but fragments the ecosystem; you don't want forks if you can avoid it.
- Separate
rtk-libcrate: splits the codebase; inlining the[lib]target in the existing repo is simpler
Also a fork would require publishing under a different name to crates.io , which is undesireable.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review Cargo.toml, src/main.rs, src/discover/mod.rs, and the listed modules; begin by tracing the current module declarations and existing public APIs. Add the library target and curated exports, then verify that cargo build produces both targets and that the named modules are consumable by downstream crates.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, tooling
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 58/100