One day, my friend and I just got an idea: we needed a simple, fast utility that could search across GitHub, GitLab, and Bitbucket simultaneously from the terminal. The continuous context-switching between web UIs, browser searches, and our editor was a constant friction point, so we decided to build a dedicated TUI application for repository discovery.
We chose Rust for the performance and robustness, making this our first significant project with the language. The result is RepoScout, a fully keyboard-driven Terminal User Interface (TUI) built on the ratatui framework.
Here is a clear statement of what the project does: RepoScout allows users to search, analyze, and manage repositories across multiple Git platforms without leaving their terminal.
Technical Details & Implementation
We struggled and learned a lot while implementing these core technical components:
- Vector Search (Work In Progress): This was the most complex technical challenge. Our goal was to let users find projects by use case (e.g., "low-latency logging library for Rust") rather than exact keywords. The current solution involves generating repository embeddings using open-source models (fastembed) and performing vector similarity lookups using the usearch library. It is still rough, but we are working to refine the results.
- Asynchronous Backend: The entire search pipeline runs on an asynchronous backend built with the tokio runtime, handling multiple API calls and background tasks (like fetching dependencies) concurrently.
- Repository Analysis: We implemented a "Health Score" algorithm to generate a factual 0-100 rating based on project maintenance activity, age, and community metrics.
- Offline Performance: All results, search history, and fetched content are persisted in a local SQLite database, which utilizes FTS5 for fast fuzzy searching, ensuring the tool works even offline.
- Dependency Inspection: The TUI previews include the ability to inspect package dependencies (Cargo, npm, PyPI, Go, etc.) for over 13 ecosystems.
My friend and I are still learning the best practices for building command-line tooling in Rust. We would be sincerely grateful for any honest, technical critique, especially regarding the design of the asynchronous search pipeline and overall Rust architecture.
Thank you for checking out our simple attempt to build something useful.
Github Repo: https://github.com/shreeshjha/RepoScout