Skip to main content

A Python-native LazyGit-like TUI using Textual and dulwich

Project description

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 git CLI 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 .gitignore rules 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

  1. Navigate to any Git repository:

    cd /path/to/your/git/repo
    
  2. 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

  1. Status Panel: Current branch name and repository information
  2. Staged Changes: Files with staged changes (green indicators - M, A, D)
  3. Changes: Files with unstaged modifications (yellow indicators - M, U)
  4. Branches: List of all local branches - select to switch branches
  5. Commits: Commit history for the selected branch
  6. Stash: Placeholder for stashed changes (coming soon)

Right Column

  1. Patch Panel: Shows commit diff when a commit is selected
  2. 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

  1. Launch pygitzen in a Git repository
  2. Navigate to Commits panel (use Tab or click)
  3. Use j/k or arrow keys to navigate commits
  4. Patch panel automatically shows the diff for selected commit

Switching Branches

  1. Navigate to Branches panel
  2. Use j/k or arrow keys to select a branch
  3. Press Enter or click to switch
  4. 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 git CLI calls required
  • Direct access to Git objects, refs, and index
  • Fast and efficient for most operations

Support

License

This project is licensed under the MIT License.


Made with ❤️ for developers who love terminal UIs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygitzen-0.2.5.tar.gz (401.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pygitzen-0.2.5-cp312-cp312-win_amd64.whl (259.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pygitzen-0.2.5-cp312-cp312-macosx_10_13_universal2.whl (470.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

pygitzen-0.2.5-cp311-cp311-win_amd64.whl (258.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.2.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pygitzen-0.2.5-cp311-cp311-macosx_10_9_universal2.whl (471.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file pygitzen-0.2.5.tar.gz.

File metadata

  • Download URL: pygitzen-0.2.5.tar.gz
  • Upload date:
  • Size: 401.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pygitzen-0.2.5.tar.gz
Algorithm Hash digest
SHA256 d3030cf330939676bf925bf0c609bc5f68db6ea255e9b72877b47e1e84952dbf
MD5 e96efa3f2b1a49e42ccc77e9dc1bc1c2
BLAKE2b-256 862a562d451865fa9fe8da639bdcb434ab9b06d77c6c307ed9f66cb9e97722ed

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pygitzen-0.2.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 259.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pygitzen-0.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a682d11c3f973ae374becea74cba98e0f3d3e8e15505237d19c2a5e7f237ca12
MD5 e3525e5b3c6a57cc89f486e3a3cbe66c
BLAKE2b-256 6e186a5ceee385cfabee57d9f7c77ef85b50b63aa2b011246a741cfc5d53c457

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pygitzen-0.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8307b8ad7599e5dd71f832e80b1c9e883a196b38f86237db4300cc025a07b81c
MD5 e9ae555f84d287917780cab90a8bbe32
BLAKE2b-256 27c5a5a52b9dce1d7eeacd03eca0f2d7cc3947692f98e301b067b5301ce5e2d8

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pygitzen-0.2.5-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 7b59e83c6c647f7b232046ba23d82c16252f667978c32852514e42758d869bc1
MD5 dd30ae49b025883d92726e2a42050138
BLAKE2b-256 02ff2b883f035c36881f40e6fdbb20788177d489ec68e18b3f1cca50c3bd9c44

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pygitzen-0.2.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 258.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pygitzen-0.2.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 82413d4e8767ab38f4782126b5cb0a32b7832f7fd39d305f101737dacf192eec
MD5 1181548d75958bc587171bcbc6ef9771
BLAKE2b-256 23068468fc3ef90d2f77a83345581219fd62bff83f2559624a4f3488a0d80142

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pygitzen-0.2.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 568163797dfbbba683e69da5845cba6d58ffcd43a062ee255a4d3c77d7590ea4
MD5 1743d4b037ee9045056141e70295f566
BLAKE2b-256 f3d56016a6f041520435213136e400ed20e47d87b934a7d2360c0092e7d8a8a2

See more details on using hashes here.

File details

Details for the file pygitzen-0.2.5-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pygitzen-0.2.5-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f60e8898166c3fc7075f488a3e78471a7c8c918a9649683c69cfc649d2215f38
MD5 2e63d8fe2665b687c3f2dcd6c8b6ff71
BLAKE2b-256 d8a784f3f57f7f9100204c0ad9ead3ea755c2f2ac0b2798cf0eee18aaac77b31

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page