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.1.3rc1.tar.gz (205.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.1.3rc1-cp312-cp312-win_amd64.whl (109.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.1.3rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (810.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pygitzen-0.1.3rc1-cp312-cp312-macosx_10_13_universal2.whl (236.2 kB view details)

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

pygitzen-0.1.3rc1-cp311-cp311-win_amd64.whl (108.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.1.3rc1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (878.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pygitzen-0.1.3rc1-cp311-cp311-macosx_10_9_universal2.whl (236.0 kB view details)

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

File details

Details for the file pygitzen-0.1.3rc1.tar.gz.

File metadata

  • Download URL: pygitzen-0.1.3rc1.tar.gz
  • Upload date:
  • Size: 205.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.1.3rc1.tar.gz
Algorithm Hash digest
SHA256 32bfd4a532d0ce09cc5f897cb78a2116717c7327c2a1604722d6d0f02c54062f
MD5 aec9b5a62af68856c02bb0fbf1374dfa
BLAKE2b-256 c6f21a9c663f17c7a4bd654ba6f0205b9ef6f1e705fd6d3c59ed623b1de5bddc

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5f29dbfac2064ec5ebd7c678ce1c71035556186a94eca07b1f2433dc187ed366
MD5 f563715805707502001ffeec9a41c210
BLAKE2b-256 7161106c7b96acf10cac822196cc091fc84428e0d95483e4a17452c9c88330b1

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 6035a38fbad61b40ec449c6b64c718f2df3c8e02734606d77b7e11d9f6dd0e9b
MD5 f5f68af5bd1e95b3cc69b554fcaca855
BLAKE2b-256 d6d77339f0d38db646077c8bcb10a1f13ff35462b5573f6b9680750c09e2de7f

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 2a5d1515f7db37e3f3cf22e9382fbc7d4b6c0d43e479c65c27b569567a509cd0
MD5 0ef8c2ea0f573919b42f063f92df0ba8
BLAKE2b-256 97e6d611c82094efd1b02feb565af25597f60e364e7f511838fb3f473fd8c2ba

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6fb4205cc39a7dfc95352880876505fb95285260fe6d8dc4f1ca3221a74141d9
MD5 f11c3f8550c352d69931218f911e235f
BLAKE2b-256 dd88890d2938de2e37b408264b8832c1ae1f2d72630ad4466e7265a8ee238645

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ffb9102d2955aef39241ab7b597d28942cdc4c4288491e67f70662bb9d3e3f4a
MD5 2226b4688c6723182f75bfd620d19891
BLAKE2b-256 f1765e1093f41e561712a642d18f28303aceae6fd5ded63aa2006ebd81c70e34

See more details on using hashes here.

File details

Details for the file pygitzen-0.1.3rc1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pygitzen-0.1.3rc1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4ef03280271dd02c0d3a7f0f71d58e8d5b413c313cfdfab4759b440cdf46365d
MD5 f6d01e52b307283833334450c8d80a82
BLAKE2b-256 d9f0a8a342829d6176282f14775a1a2d36caa12fa3772fd40551fb716853f739

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