igntui
🌐 Website • 📦 PyPI • 🚀 Quick Start • 💬 Support
A powerful Terminal User Interface (TUI) and CLI for generating
.gitignorefiles from gitignore.io templates.
✨ Features
🎨 Interactive TUI Mode
- Smart Search - Fuzzy, exact, and regex search modes (F1/F2/F3)
- Multi-Template Selection - Select and combine multiple templates
- Live Preview - See generated
.gitignorecontent in real-time - Intuitive Navigation - Tab between panels, arrow keys, vim-style shortcuts
- Beautiful Interface - Animated splash screen with pyfiglet ASCII art
⚡ Performance
- Intelligent Caching - Local template caching for instant access
- Async Loading - Non-blocking template loading and generation
- Rate Limiting - Respects API limits automatically
💾 Export & Save
- Save to File - Save generated
.gitignorewith custom paths - Export Templates - Export selected templates as JSON
- Overwrite Protection - Confirmation dialogs for existing files
🛠️ CLI Mode
- Quick Generation - Generate
.gitignorefrom command line - List Templates - Browse 571+ available templates
- Test Connection - Verify API connectivity
- Cache Management - Clear and manage local cache
📦 Installation
Using pip (Standard)
pip install igntui
Using pipx (Isolated)
pipx installs the package in an isolated environment:
pipx install igntui
From source
git clone https://github.com/MKAbuMattar/igntui.git
cd igntui
pip install -e .
Windows Requirements
On Windows, you'll need the windows-curses package:
pip install windows-curses
🚀 Quick Start
Launch TUI (Interactive Mode)
igntui
or
python -m igntui
CLI Commands
Generate .gitignore
# Single template
igntui generate python
# Multiple templates
igntui generate python node visualstudiocode
# Save to file (also writes .igntui.cfg.toml sidecar by default)
igntui generate python --output .gitignore
# Preview without writing
igntui generate python --output .gitignore --dry-run
# Skip writing the sidecar
igntui generate python --output .gitignore --no-sidecar
# Overwrite without prompt
igntui generate python --output .gitignore --force
List Available Templates
# List all templates
igntui list
# Filter by pattern
igntui list --filter python
# Show count only
igntui list --count
Test API Connection
igntui test
igntui test --timeout 5
Cache Management
igntui cache info # show cache stats
igntui cache stats # show usage statistics
igntui cache clear --force # clear all cached entries
Global Flags
igntui --no-cache list # bypass cache for the session
igntui --config /path/to/config.json # load alternate config
igntui --verbose <command> # verbose / debug output
igntui --version # print version + Python + OS
Project Sidecar (.igntui.cfg.toml)
When you save a .gitignore (via TUI or CLI), igntui writes a small TOML
sidecar next to it that pins the templates and search mode used. Re-running
igntui in the same directory auto-loads that selection so you can iterate
without re-picking templates. The sidecar is safe to commit so teammates
inherit the same starting state.
# .igntui.cfg.toml
schema_version = 1
generated_at = "2026-04-27T12:00:00Z"
igntui_version = "0.0.2"
[selection]
templates = ["python", "node", "macos"]
search_mode = "fuzzy"
[output]
path = ".gitignore"
preserve_user_edits = true
A generated .gitignore carries two marked regions: the template content between
# >>> igntui >>> / # <<< igntui <<<, which is replaced on every re-save, and a
custom-patterns region below it whose contents igntui carries over untouched:
# >>> Start of custom patterns (edit freely; igntui preserves this block) <<<
secrets.local.json
# >>> End of custom patterns (edit freely; igntui preserves this block) <<<
Put your own rules there. Rules outside both regions are preserved too — the region just makes the safe place explicit. See Managed blocks.
Shell Completion
# bash
eval "$(igntui completion bash)"
# zsh — install to a directory on $fpath
igntui completion zsh > ~/.zsh/completions/_igntui
# fish
igntui completion fish | source
🎮 TUI Usage
Keyboard Shortcuts
Navigation
Tab/Shift+Tab— Navigate between panels↑/↓— Move selection up/downPgUp/PgDn— Page up/downHome/End— Jump to top/bottom/— Focus the Search panelEsc(in Search) — Exit search mode and return to Templates
Search Modes
F1— Fuzzy search (default)F2— Exact searchF3— Regex search
Template Management
Space/Enter— Select/deselect templatea— Select all visible (filtered) templatesx— Remove all visible templates from selectionc— Clear entire selection
Actions
s— Save.gitignore(writes.igntui.cfg.tomlsidecar; shows diff preview if file exists)e— Export selected templates as JSONr/F5— Refresh template list from APIh/?/F12— Show help dialogi— Show app infoq/Esc(outside Search) — Quit application
Mouse Support
- Click a panel to focus it
- Click a row in Templates to select it (and toggle on the same click)
- Scroll wheel scrolls the panel under the cursor without changing focus
Panel Layout
┌─────────────────────────────┬──────────────────────────────────┐
│ Search Panel │ Generated Content Panel │
│ (Filter templates) │ (Preview .gitignore) │
├─────────────────────────────┤ │
│ Available Templates │ │
│ (571+ templates) │ │
│ │ │
│ • Select with Space │ │
│ • Multi-select support │ │
│ • Smart search │ │
├─────────────────────────────┴──────────────────────────────────┤
│ Selected Templates (Bottom Panel) │
│ • Shows your current selection │
│ • Remove with Space │
└────────────────────────────────────────────────────────────────┘
│ Status Bar │
│ • Keyboard shortcuts • Current mode • Status messages │
└────────────────────────────────────────────────────────────────┘
🎯 Use Cases
For Developers
# Python project
igntui generate python venv
# Node.js project
igntui generate node npm yarn
# Full-stack project
igntui generate python node react visualstudiocode
# Unity game development
igntui generate unity visualstudio windows
For Teams
# Export team's template selection
igntui # Select templates in TUI, press 'e' to export
# Share the JSON file with team
# Others can import and use the same templates
⚙️ Configuration
Configuration file location: ~/.igntui.cfg.toml
Default Configuration
{
"api": {
"base_url": "https://www.toptal.com/developers/gitignore/api",
"timeout": 10,
"cache_ttl": 3600,
"retry_attempts": 3
},
"ui": {
"theme": "default",
"mouse_support": true,
"animation_speed": 150
},
"behavior": {
"fuzzy_search_threshold": 0.6,
"max_recent_templates": 10
}
}
🐛 Troubleshooting
Windows: "igntui is not recognized"
If you see 'igntui' is not recognized as an internal or external command, the Scripts directory is not in your PATH.
Quick Fix - Use Python Module:
python -m igntui
Permanent Fix - Add to PATH:
- Press
Win + Xand select "System" - Click "Advanced system settings" → "Environment Variables"
- Under "User variables", select "Path" and click "Edit"
- Click "New" and add:
C:\Users\YOUR_USERNAME\AppData\Roaming\Python\Python3XX\Scripts - Click "OK" and restart your terminal
Or use PowerShell (as Administrator):
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
$newPath = $currentPath + ";C:\Users\$env:USERNAME\AppData\Roaming\Python\Python313\Scripts"
[Environment]::SetEnvironmentVariable("Path", $newPath, "User")
Linux/macOS: Permission Denied
If you get permission errors:
# Use --user flag
pip install --user igntui
# Or add ~/.local/bin to PATH
export PATH="$HOME/.local/bin:$PATH"
ImportError: No module named 'curses'
On Windows, install windows-curses:
pip install windows-curses
API Connection Issues
If templates won't load:
- Check internet connection
- Test API:
igntui test - Clear cache:
igntui cache clear(add--forceto skip the confirmation) - Try with verbose:
igntui --verbose
🧪 Development
Setup Development Environment
# Clone repository
git clone https://github.com/MKAbuMattar/igntui.git
cd igntui
# Install the project with the tools CI uses
uv sync --extra test --extra dev
# Run it
uv run igntui
Stay in the repo root when using uv run — from elsewhere it resolves a different
environment and will run a globally installed igntui instead of your checkout.
Running the checks
The same three commands CI runs. All three are clean on main, so anything they report came
from your change:
uvx ruff check src tests
uvx ty check --python .venv src/igntui
uv run --frozen pytest -q
# With coverage
uv run --frozen pytest --cov --cov-report=term-missing
# A single file
uv run --frozen pytest tests/core/test_api.py
The tests need no network and no terminal. They also cannot tell you whether the TUI renders
correctly — see .github/CONTRIBUTING.md for what to check by hand.
🤝 Contributing
Contributions are welcome. Read .github/CONTRIBUTING.md first —
it covers the checks, the threading rule in the TUI, and the managed-block file format.
ROADMAP.md lists what is queued (and what has been rejected on purpose).
- Fork the repository
- Create your feature branch (
git checkout -b feat/my-change) - Commit with a Conventional Commits message
- Push to the branch and open a Pull Request
📝 License
GPL-3.0-or-later — see the LICENSE file for the full text.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
👨💻 Author
Mohammad Abu Mattar
- GitHub: @MKAbuMattar
- Website: MKAbuMattar.com
- Email: info@mkabumattar.com
🙏 Acknowledgments
- gitignore.io - Template source
- pyfiglet - ASCII art generation
- Python curses - Terminal UI framework
📊 Statistics
- 571+ Templates - Comprehensive template library
- Smart Caching - Reduces API calls by 90%
- 3 Search Modes - Fuzzy, exact, and regex
- Multi-select - Combine unlimited templates
- Cross-platform - Windows, macOS, Linux
🔗 Links
- Repository: https://github.com/MKAbuMattar/igntui
- Issue Tracker: https://github.com/MKAbuMattar/igntui/issues
- PyPI Package: https://pypi.org/project/igntui/
- Documentation: https://github.com/MKAbuMattar/igntui/wiki (coming soon)
Give it a ⭐ if you like it!
Metadata
Release files for igntui 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| igntui-0.5.0.tar.gz | 70.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| igntui-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 159.0 kB
Release files / igntui-0.5.0.tar.gz
| Download URL | igntui-0.5.0.tar.gz |
|---|---|
| Size | 70.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a7c50b5036b00336ec7fe779d33547b1c3f1d1a3655790fafe4bd3bb99656f63
|
|
BLAKE2b-256 checksum How to use checksums |
9a71e688241e28c151ad521e2ad5870b4dc62c5bf9a999cedf3e36b5e5f6bf99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / igntui-0.5.0-py3-none-any.whl
| Download URL | igntui-0.5.0-py3-none-any.whl |
|---|---|
| Size | 88.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b8c8576221e88afa7bf19595ef1da84ee585a1469aa4688de35deb0b4d775c4
|
|
BLAKE2b-256 checksum How to use checksums |
5154520446645323a3037b96af0ce234e1c5bc5a62bbffcc12065c33151a4656
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|