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.7.tar.gz (436.0 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.7-cp312-cp312-win_amd64.whl (298.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.2.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pygitzen-0.2.7-cp312-cp312-macosx_10_13_universal2.whl (510.4 kB view details)

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

pygitzen-0.2.7-cp311-cp311-win_amd64.whl (297.7 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.2.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pygitzen-0.2.7-cp311-cp311-macosx_10_9_universal2.whl (511.7 kB view details)

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

File details

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

File metadata

  • Download URL: pygitzen-0.2.7.tar.gz
  • Upload date:
  • Size: 436.0 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.7.tar.gz
Algorithm Hash digest
SHA256 9ceb24c6fca0ad3b6c1822934ffbad5fcb0f8a9e9057c4d3b1606a439de71cf5
MD5 70293311f173a7a663598610a018702a
BLAKE2b-256 1088769cb5eb4f5705cd4fa36a50bbd7f6e7fc0640ae2bdf16307b4966881d5e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 298.8 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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 076665c3e7bc9d80c1b28ed688d196563d3c641033869d780318fc0fc94449f6
MD5 6dbb4b7e2d62abb368edc1114687e847
BLAKE2b-256 d123cbf90911a0090576d7c1797de0a2a73ed9f91d021518db24a43948c32698

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ff649100f8c90e34da97d4d2fa0210ce097da42da242d1f4894799fc52d4f0b7
MD5 5655d535550be1fc9ab37bc3ff59d100
BLAKE2b-256 8a96d9d22134476968efc9a3c568a8233688930b1630358efdb3e775cf27df11

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.7-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 99218cec7d376b481152548c9e6d80e5b2fbb64d9f35b29b2f636cfb46918728
MD5 8ac98abfe51627d7665e9cf58efb2f38
BLAKE2b-256 5dd6e459cf9b3a72146d00a2367af6224f61360407698fa493a60a8530707403

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 297.7 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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 655420ead0757b12bd2d5c26c6474cf7e0ce59fa6bbcda011e746b3f7b2f834e
MD5 dc4ea3d55fe44e3b8ef8f776fad46a8e
BLAKE2b-256 016bf2a70d176db25d8323c876e5fd72e4ab7bd9a14d8b16246d427971438967

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 05c98f63f347a1dd6f63f43b186a9bc139acc291175fece7f8d45d6f314d5e31
MD5 79da0bec7b129b0e8e644fcd97eb3c39
BLAKE2b-256 3bbd066fe9b60775c51bf547f64574e207a2e3dba157f6cc5da59c5d0f9d9b04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.7-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6b600dbc22058e21b29cd7a2878e9d6be76b8361b455b2598b5f736d8a63ac51
MD5 f66c16502dfb9d445a9abf830bbef61f
BLAKE2b-256 e4aa581bdfde207f78a698ae654b1c06c2d7183858bcd4bfdd4c0d77194f4da4

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