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.3rc2.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.3rc2-cp312-cp312-win_amd64.whl (109.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.1.3rc2-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.3rc2-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.3rc2-cp311-cp311-win_amd64.whl (108.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.1.3rc2-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.3rc2-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.3rc2.tar.gz.

File metadata

  • Download URL: pygitzen-0.1.3rc2.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.3rc2.tar.gz
Algorithm Hash digest
SHA256 3615cabf29321f17a4e749b885239e4da3174db8ce1ced2def61431fe25f5f7f
MD5 da8340944209515b50f3708367800c40
BLAKE2b-256 4e87d70b25d815617aa6c177737391e1bfdde59865e08bd0f323d0631d843323

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9cf003b6787519b3a4c36aae9a5bc0f4c7b73bca757a70c027355246b6efff85
MD5 bee0f521bbf300b0f59a48e58213fa1d
BLAKE2b-256 604f4b587eabcb01d69f274327e00175876b9048adc4abda997f072468eed5b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1dad84949aa7a63eb423f7855c0bb6e01944b3745f7ba4ddbb1233f86b7e2194
MD5 3f884afe097b40982bb3b654f3c1f217
BLAKE2b-256 5a609c6791170988a70bf27ab0a5d7aa81e4c9dce4fe148b5619281b8b18ed45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 a84c5028b46b656d0155d60a5f7925a98134f983bed6fe90b792b4a639b851de
MD5 ac51aa3f794128f0c52a702f98233b67
BLAKE2b-256 0bbf0e9921ef86ed3a1e5a30c0f7c8f44e75952c4cb601d5091cb09ecba85090

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2e5915eb43452ccf5c922ea078e7e3345b3c06cf901603f9c10c9cf411914f05
MD5 ebc3225b5d5057409c5b2950a459a23f
BLAKE2b-256 0269729723eb81bd34b262b92fc5d91ff77feec754d50f11af545d90e73468a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 551bd808ed8e01fe7b10dd7c523bd1548a40391d9d6bf6fc9e0fb8bfb776992a
MD5 165defea9e7f7d976f014b4ed866df73
BLAKE2b-256 89ea1802a4906096b5e26fabb13f3c296d0d6bc6572dda14c0ad86d6e2e199c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3rc2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 15c213df932b267a952a18735e56efcf654603adcb19f9630a21e4dc253b344a
MD5 e1324ddb167acc909877ce143ba3ee1b
BLAKE2b-256 1d13d9c30059badb9b60d141d491a39fb5f5c7f8752ef38fa9cdba4c631c8450

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