pygitzen
A Python-native Terminal-Based Git Client - Navigate and manage your Git repositories with a beautiful TUI interface inspired by LazyGit.
What is pygitzen?
pygitzen is a terminal-based user interface (TUI) for Git repositories. Think of it as a Python-native alternative to LazyGit. It provides a visual, intuitive way to navigate your Git repositories directly in the terminal, without needing external Git CLI tools.
Features
- Terminal-Based UI: Beautiful TUI interface built with Textual and Rich
- Pure Python: Uses dulwich library - no external
gitCLI required for core operations - Real-Time Updates: Live view of your Git repository status
- Multi-Panel Interface: Status, Staged Changes, Changes, Branches, Commits, Patch, Stash, and Command Log
- Branch-Aware: Shows commits specific to the selected branch
- Push Status: Visual indicators for commits pushed/unpushed to remote
- File Status Detection: Automatically detects modified, staged, untracked, and deleted files
- Gitignore Support: Respects
.gitignorerules automatically - Dark Theme: Easy-on-the-eyes color scheme with focus highlighting
- Keyboard Navigation: Efficient vim-style navigation (j/k, h/l)
- Auto-Refresh: Patch panel updates automatically when navigating commits
Installation
pip install pygitzen
Requirements
- Python 3.9 or higher
- A Git repository
Note for source installations: If you're installing from source (when no pre-built wheel is available for your platform), pip will automatically install Cython during the build process. No manual steps required!
Quick Start
-
Navigate to any Git repository:
cd /path/to/your/git/repo
-
Launch pygitzen:
pygitzen
That's it! pygitzen will automatically detect the Git repository and display your repository status.
Where to Use pygitzen
pygitzen is perfect for:
- Local Development: Quickly see what files you've changed, what's staged, and review commits
- Remote Servers: Works great over SSH - no GUI needed
- Code Reviews: Browse commit history and view diffs in the terminal
- Branch Management: See branch-specific commits and push status
- File Tracking: Monitor staged and unstaged changes side-by-side (VSCode-style)
Interface Overview
pygitzen displays your Git repository in a multi-panel interface:
Left Column
- Status Panel: Current branch name and repository information
- Staged Changes: Files with staged changes (green indicators - M, A, D)
- Changes: Files with unstaged modifications (yellow indicators - M, U)
- Branches: List of all local branches - select to switch branches
- Commits: Commit history for the selected branch
- Stash: Placeholder for stashed changes (coming soon)
Right Column
- Patch Panel: Shows commit diff when a commit is selected
- Command Log: Tips and helpful messages
Keyboard Shortcuts
Navigation
- j / ↓: Move down
- k / ↑: Move up
- h / ←: Move left
- l / →: Move right
- Enter: Select item
- Tab: Cycle through panels
Actions
- r: Refresh repository data
- q: Quit application
- @: Toggle Command Log panel
Focus Navigation
- Click on a panel to focus it
- Focused panels have green borders
File Status Indicators
pygitzen uses Git-standard status letters:
| Letter | Meaning | Color | Description |
|---|---|---|---|
| M | Modified | Green (staged) / Yellow (unstaged) | File changed since last commit |
| A | Added | Green | File added to staging area |
| U | Untracked | Cyan | New file not yet added to Git |
| D | Deleted | Red | File deleted but change not yet committed |
| R | Renamed | Blue | File was renamed or moved |
| C | Copied | Blue | File was copied from another tracked file |
| ✓ | Pushed | Green | Commit exists on remote |
| ↑ | Unpushed | Yellow | Commit is local only |
Examples
Viewing Commit History
- Launch pygitzen in a Git repository
- Navigate to Commits panel (use Tab or click)
- Use j/k or arrow keys to navigate commits
- Patch panel automatically shows the diff for selected commit
Switching Branches
- Navigate to Branches panel
- Use j/k or arrow keys to select a branch
- Press Enter or click to switch
- Commits panel updates to show branch-specific commits
Monitoring File Changes
- Staged Changes panel shows files ready to commit (green indicators)
- Changes panel shows files with unstaged modifications (yellow indicators)
- Files with both staged and unstaged changes appear in both panels (VSCode-style)
Key Features Explained
Branch-Specific Commits
When you select a branch, pygitzen shows only commits unique to that branch. This means:
- On
main: Shows all commits from main - On
feature-branch: Shows only commits that don't exist in main (unique to the branch)
This makes it easy to see what's new in your feature branch without scrolling through shared history.
Push Status
Each commit displays its push status:
- ✓ (green): Commit has been pushed to remote
- ↑ (yellow): Commit exists only locally
This helps you track which commits need to be pushed.
Auto-Updating Patch Panel
The Patch panel automatically updates when you navigate commits:
- Use arrow keys or j/k to navigate
- Patch panel shows diff immediately (no need to press Enter)
- Visual highlighting shows which commit is selected
Technical Details
Dependencies
- Textual: Modern TUI framework for Python
- Rich: Rich text and beautiful formatting
- dulwich: Pure-Python Git implementation
How It Works
pygitzen reads directly from the .git directory using dulwich:
- No external
gitCLI calls required - Direct access to Git objects, refs, and index
- Fast and efficient for most operations
Support
- Issues: GitHub Issues
- Repository: GitHub
License
This project is licensed under the MIT License.
Made with ❤️ for developers who love terminal UIs
Metadata
Release files for pygitzen 0.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pygitzen-0.2.7.tar.gz | 436.0 kB | Without provenance | Details for pygitzen-0.2.7.tar.gz |
Built distributions (wheels)
Total release size: 5.5 MB
Release files / pygitzen-0.2.7.tar.gz
| Download URL | pygitzen-0.2.7.tar.gz |
|---|---|
| Size | 436.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ceb24c6fca0ad3b6c1822934ffbad5fcb0f8a9e9057c4d3b1606a439de71cf5
|
|
BLAKE2b-256 checksum How to use checksums |
1088769cb5eb4f5705cd4fa36a50bbd7f6e7fc0640ae2bdf16307b4966881d5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp312-cp312-win_amd64.whl
| Download URL | pygitzen-0.2.7-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 298.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
076665c3e7bc9d80c1b28ed688d196563d3c641033869d780318fc0fc94449f6
|
|
BLAKE2b-256 checksum How to use checksums |
d123cbf90911a0090576d7c1797de0a2a73ed9f91d021518db24a43948c32698
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | pygitzen-0.2.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ff649100f8c90e34da97d4d2fa0210ce097da42da242d1f4894799fc52d4f0b7
|
|
BLAKE2b-256 checksum How to use checksums |
8a96d9d22134476968efc9a3c568a8233688930b1630358efdb3e775cf27df11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp312-cp312-macosx_10_13_universal2.whl
| Download URL | pygitzen-0.2.7-cp312-cp312-macosx_10_13_universal2.whl |
|---|---|
| Size | 510.4 kB |
| Tags | CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
99218cec7d376b481152548c9e6d80e5b2fbb64d9f35b29b2f636cfb46918728
|
|
BLAKE2b-256 checksum How to use checksums |
5dd6e459cf9b3a72146d00a2367af6224f61360407698fa493a60a8530707403
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp311-cp311-win_amd64.whl
| Download URL | pygitzen-0.2.7-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 297.7 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
655420ead0757b12bd2d5c26c6474cf7e0ce59fa6bbcda011e746b3f7b2f834e
|
|
BLAKE2b-256 checksum How to use checksums |
016bf2a70d176db25d8323c876e5fd72e4ab7bd9a14d8b16246d427971438967
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | pygitzen-0.2.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
05c98f63f347a1dd6f63f43b186a9bc139acc291175fece7f8d45d6f314d5e31
|
|
BLAKE2b-256 checksum How to use checksums |
3bbd066fe9b60775c51bf547f64574e207a2e3dba157f6cc5da59c5d0f9d9b04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / pygitzen-0.2.7-cp311-cp311-macosx_10_9_universal2.whl
| Download URL | pygitzen-0.2.7-cp311-cp311-macosx_10_9_universal2.whl |
|---|---|
| Size | 511.7 kB |
| Tags | CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
6b600dbc22058e21b29cd7a2878e9d6be76b8361b455b2598b5f736d8a63ac51
|
|
BLAKE2b-256 checksum How to use checksums |
e4aa581bdfde207f78a698ae654b1c06c2d7183858bcd4bfdd4c0d77194f4da4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for pygitzen 0.2.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.