๐ฆ rusty_repl
A lightweight, modular framework for building interactive REPLs in Rust โ with clean prompts, terminal isolation, and customisable input handling.
โจ Features
- ๐ฅ๏ธ Alternate screen mode โ clean, isolated terminal workspace
- ๐ฌ Custom prompts โ easily define your own
Promptstyle viaCleanPrompt - โก Input handling loop โ powered by
reedline - ๐งน Automatic cleanup โ restores cursor, title, and screen on exit
- ๐จ Keyword highlighting โ built-in highlighter with custom color schemes (
KeywordStyle) - ๐งฉ Extensible design โ drop in new highlighters, prompts, or REPL logic
- ๐ ๏ธ Config builder โ safely construct REPL configuration with
ReplConfig::new().with_title(...).with_prompt(...).with_kw_style(...)
๐ Quick Start
Add to your Cargo.toml:
[]
= "0.3.0"
Then in your project:
use Repl;
Or
use ;
This opens an alternate terminal screen with a minimal prompt.
Type exit to leave the session.
๐งฉ Architecture
| Module | Responsibility |
|---|---|
repl::input |
Handles user input with reedline |
repl::terminal |
Manages terminal (alternate screen, cursor, cleanup) |
repl::prompt |
Defines a cleaner, customisable prompt |
repl::highlighter |
Highlights configured keywords during input |
repl::style |
Configures keyword styles (colors, word list) |
repl::repl |
Connects all components into a cohesive REPL session |
๐ง Future Enhancements
- ๐พ Persistent command history
- ๐ง Syntax-aware input completion
- ๐ Theming and multi-color highlighting
๐ License
Licensed under the MIT License
๐ Changelog
0.3.0
- Introduced
ReplConfigbuilder with.with_title(),.with_prompt(),.with_kw_style() - REPL prompt now uses
Arc<dyn Prompt>to avoid ownership/move issues - InputHandler stores the prompt internally; run no longer requires external prompt
- Updated all modules to consume
Arc<ReplConfig>instead of cloning individual fields - Documentation updated for builder pattern, prompt handling, and
Arcusage - Example code updated to reflect new API
0.2.0
- Added keyword highlighting support
- Introduced
KeywordHighlighterfor basic keyword-based styling. - Exposed
KeywordStyleas part of the public API. - Updated
Repl::newto accept an optionalKeywordStyleargument.