๐ฆ LazyLlama
LazyLlama is a lightweight, fast Terminal User Interface (TUI) client for Ollama. It is designed for running local AI models with minimal overhead and intuitive, Emacs-inspired controls directly in your terminal.
โจ Features
- Real-time Streaming: Responses are generated live, providing immediate feedback.
- Markdown Support: Automatic formatting for headers, lists, and bold text.
- Code Highlighting: Syntax blocks are visually separated with custom borders and background colors.
- Smart Scrolling: *
AUTOSCROLL: Automatically follows the AI output.MANUAL SCROLL: Locks the view (๐) when you use PageUp/Down, allowing you to read previous messages undisturbed.
- Model Management: Easily switch between installed Ollama models using Ctrl+arrow keys with separate input/output buffers per model.
- Smart Buffer Management: Each LLM maintains its own chat history, input text, and scroll position.
- Automatic Logging: Every chat session is automatically saved as a text file in
~/.local/share/lazyllama/(both combined and per-model histories). - Performance: Built with Rust and Ratatui for ultra-low latency and minimal resource footprint.
๐ Installation
From crates.io (Recommended)
Arch Linux (AUR)
# Source build
# Pre-built binary
Flatpak (All Linux Distributions)
Windows
Download the latest Windows x64 ZIP from GitHub Releases and extract it to a directory in your PATH.
Note: Ollama must be installed and running separately. Visit ollama.com for installation instructions.
Build from Source
Prerequisites
Steps
-
Clone the repository:
-
Install it system-wide:
โจ๏ธ Controls
| Key | Action |
|---|---|
Enter |
Send message / Re-activate Autoscroll |
Shift + Enter |
Insert newline (multiline input) |
C-q |
Quit application safely |
C-c |
Clear chat history |
C-s |
Manually toggle Autoscroll |
Ctrl + Shift + C |
Copy selected text to clipboard |
Ctrl + Shift + V |
Paste text from clipboard |
Ctrl + โ / โ |
Switch between AI Models (loads separate buffers per model) |
โ / โ |
Move cursor up/down between lines in multiline input |
PgUp / PgDn |
Scroll history (activates Manual Mode) |
โ / โ |
Move cursor left/right in the input field |
Shift + โ / โ |
Select text character-wise |
Home / End |
Jump to start/end of the input line |
Shift + Home / End |
Select text to start/end of line |
Ctrl + โ / โ |
Move cursor word-wise |
Ctrl + Shift + โ / โ |
Select text word-wise |
Backspace |
Delete character before the cursor |
Delete |
Delete character after the cursor |
Ctrl + Backspace |
Delete previous word |
Ctrl + Delete |
Delete next word |
Optional debug:
LAZYLLAMA_DEBUG_KEYS=1shows key/scroll/render info in the status bar.
๐ Project Structure
The project follows a modular design for easy maintainability:
main.rs: Entry point and terminal event handling.app.rs: State management and Ollama API integration.ui.rs: Rendering logic and Markdown parsing.utils.rs: File system operations and session logging.
๐ Documentation
You can generate the full technical documentation locally:
๐งช Testing
LazyLlama features a comprehensive test suite with 78 tests covering all functionality:
- Unit Tests: 68 modularized tests for individual components
- Integration Tests: 7 end-to-end tests for component interaction
- Performance Benchmarks: Continuous performance monitoring
Running Tests
# Run all tests (unit, integration, doc tests)
# Run only unit tests
# Run benchmarks with detailed output
Performance Benchmarks
LazyLlama is optimized for ultra-low latency with all operations completing well within the 16ms frame budget for 60 FPS rendering:
| Category | Operation | Avg. Time | Performance |
|---|---|---|---|
| String Operations | Character Insertion | 384 ns | โกโก |
| Unicode Insertion (๐ฆ) | 163 ns | โกโก | |
| Pattern Matching | 7.55 ยตs | โก | |
| Text Parsing | History Parsing | 2.11 ยตs | โก |
| Line Iteration | 7.23 ยตs | โก | |
| Character Counting | 206 ns | โกโก | |
| Cursor Operations | Index Conversion | 1 ns | โกโกโก |
| Word Boundary Detection | 2.81 ยตs | โก | |
| Memory | HashMap Lookups | 6.97 ยตs | โก |
| Vec Pre-allocation | 576 ns | โกโก | |
| Real-World | Large History (100KB) | 66.2 ยตs | โ |
| Model Switching | 13.0 ยตs | โ |
Legend: โกโกโก < 10 ns | โกโก < 1 ยตs | โก < 10 ยตs | โ < 100 ยตs
Benchmark results from 2 March 2026 ยท Release build ยท cargo test --release --benches
All benchmarks run on optimized release builds. Run cargo test --release --benches to execute the full benchmark suite.
For detailed testing information, test structure, and maintenance guidelines, see TESTING.md.
๐ License
This project is licensed under the GPL-2.0-or-later. See the LICENSE file for details.
๐ Changelog
v0.5.1 - March 2026
- ๐ Scroll Fix: Correctly calculate visual scroll height when
Wrapis activetotal_linesis now computed as the sum of wrapped visual rows per logical line- Fixes issue where the scroll area ended too early after multiple messages, making the last responses unreachable
- Auto-scroll now reliably positions at the true bottom of the conversation
v0.5.0 - February 2026
- ๐ฆ GitHub Releases: Automated release pipeline with pre-built binaries for multiple platforms
- Linux x64 tarballs for easy installation on any distribution
- Windows x64 ZIP archives with native binaries
- AppImage packages for universal Linux compatibility
- ๐ง AppImage Support: Portable single-file executables that run on any Linux distribution
- No installation required - just download and run
- Includes all dependencies in a self-contained package
- ๐ช Windows Binary Distribution: Official Windows builds available through GitHub Releases
- Pre-compiled executables for x64 architecture
- No Rust toolchain required for Windows users
- ๐ฆ AUR Packages: Official Arch Linux User Repository packages
lazyllama: Build from source via crates.iolazyllama-bin: Pre-built binary package for faster installation
- ๐ Website Redesign: Complete overhaul of project website with modern glassmorphism design
- Responsive layout optimized for all devices
- Custom typography with Satoshi font
- Interactive code examples and installation guides
- ๐ค Automated Build Pipeline: Comprehensive release automation scripts
- One-command release workflow to all platforms
- Automatic version management and checksums
- Integrated testing before deployment
- ๐ Documentation Improvements: Enhanced documentation across the project
- Detailed build script documentation in
scripts/README.md - Comprehensive testing guide in
TESTING.md - Updated installation instructions for all platforms
- Detailed build script documentation in
- ๐ง Build Infrastructure: New AppImage build system replacing Flatpak
- Simplified build process with
linuxdeploy - Faster compilation and smaller package size
- Better integration with GitHub release workflow
- Simplified build process with
v0.4.1 - February 2026
- ๐ผ Extended Input Height: Input field now expands up to 5 lines (increased from 4)
- Maximum height: 5 lines, giving more space for longer prompts
- ๐ Smart Cursor Scrolling: Input field automatically scrolls to keep cursor visible
- When cursor moves beyond visible area, the input scrolls automatically
- Smooth navigation in long multiline inputs
- โจ๏ธ Improved Keybindings:
Ctrl+โ/โ: Switch between AI models (changed from plain arrow keys)โ/โ: Move cursor up/down between lines in multiline input (new feature)- More intuitive navigation in multiline text editing
v0.4.0 - February 2026
- ๐ Dynamic Input Height: Input field now automatically expands from 1 to 5 lines based on content
- Grows dynamically when pressing
Shift+Enterto add newlines - Minimum height: 1 line, Maximum height: 5 lines
- Provides more comfortable editing space for longer prompts
- Grows dynamically when pressing
- โจ Improved Multiline Rendering: Proper line-by-line rendering with selection and cursor support
- Each line is rendered independently with correct styling
- Selection highlighting works correctly across multiple lines
- Cursor position is accurately displayed within multiline text
- ๐ Multiline Input: Press
Shift+Enterto insert line breaks in the input field for multiline messages - โ๏ธ Text Selection: Select text in the input field using keyboard shortcuts
Shift+โ/โ: Select text character by characterShift+Ctrl+โ/โ: Select text word by wordShift+Home/End: Select from cursor to start/end of input
- ๐ Clipboard Operations: Copy and paste functionality for the input field
Ctrl+Shift+C: Copy selected text to clipboardCtrl+Shift+V: Paste text from clipboard at cursor position
- ๐จ Visual Selection Feedback: Selected text is highlighted with a blue background for clear visibility
- ๐ Smart Text Insertion: Pasting text automatically replaces any active selection
- ๐ฆ Dependency: Added
arboardlibrary for cross-platform clipboard access - ๐ฆ Dependency Updates: Updated all dependencies to their latest versions
- ratatui: 0.26 โ 0.30.0 (TUI framework with improved frame API)
- crossterm: 0.27 โ 0.29.0 (terminal manipulation library)
- dirs: 5.0 โ 6.0.0 (platform-specific directory paths)
- tokio-stream: 0.1 โ 0.1.18 (async stream utilities)
- tempfile: 3.8 โ 3.25.0 (dev dependency for test file management)
- tokio-test: 0.4 โ 0.4.5 (dev dependency for async testing)
- ๐ API Migration: Updated code to use
frame.area()instead of deprecatedframe.size()method - ๐งช Comprehensive Test Suite: Added 78 tests for robust code quality assurance
- Unit Tests: 68 modularized tests extracted to separate files for better maintainability
- App functionality: 33 tests for cursor navigation, model management, text editing, selection, clipboard
- UI components: 13 tests for markdown parsing, syntax highlighting, text rendering
- Utilities: 10 tests for filesystem operations, history management
- Event handling: 12 tests for key combinations, terminal integration
- Integration Tests: 7 end-to-end tests for component interaction
- Performance Benchmarks: Continuous monitoring for performance-critical functions
- Unit Tests: 68 modularized tests extracted to separate files for better maintainability
- ๐ง Improved Testability: Made internal functions public for comprehensive unit testing
- ๐ Enhanced Documentation: Updated test documentation and added detailed testing guide
v0.3.0 - February 2026
- ๐งน Clean Chat Redraw: Clears the chat area before rendering to prevent leftover characters when scrolling
- โจ๏ธ Input Cursor: Horizontal cursor navigation with Left/Right and a blinking caret in the input field
- ๐ Home/End Navigation: Jump to start/end of the input line
- ๐งญ Word-wise Movement: Ctrl+Left/Right moves by words with smart separators
- ๐ Word Deletion: Ctrl+Backspace deletes previous word, Ctrl+Delete deletes next word
- โฆ Delete Key Support: Delete removes the character after the cursor
- ๐งช Dev Key Debug Mode: Optional status bar debug via
LAZYLLAMA_DEBUG_KEYS=1
v0.2.0 - February 2026
- ๐ฏ Per-Model Buffer Management: Each LLM now maintains separate input buffers, chat histories, and scroll positions
- ๐ Smart Model Switching: Ctrl+Arrow keys now seamlessly switch between models while preserving individual states
- ๐พ Enhanced Logging: Separate history files are saved for each model on application exit
- ๐จ Improved UI: Model list shows buffer status indicators and current model highlighting
- ๐ช Windows Compatibility: Fixed double character input issue on Windows by filtering key event types
- ๐ Translated Documentation: Documentation in source code AI-translated from german to english
- Please report any gramatical errors, AI weirdness and/or other inaccuracies in the github issues.
v0.1.0 - Initial Release
- Basic TUI interface for Ollama
- Real-time streaming responses
- Markdown and code highlighting
- Smart scrolling with autoscroll/manual modes
- Model selection and automatic logging
Developed with โค๏ธ in the black forest.