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.6.tar.gz (425.1 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.6-cp312-cp312-win_amd64.whl (286.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.2.6-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.6-cp312-cp312-macosx_10_13_universal2.whl (498.7 kB view details)

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

pygitzen-0.2.6-cp311-cp311-win_amd64.whl (285.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.2.6-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.6-cp311-cp311-macosx_10_9_universal2.whl (499.9 kB view details)

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

File details

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

File metadata

  • Download URL: pygitzen-0.2.6.tar.gz
  • Upload date:
  • Size: 425.1 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.6.tar.gz
Algorithm Hash digest
SHA256 14d318b35547f2d38f6386f04a98cc9997c66d0de0a495fa1a6f11f2df9e5b36
MD5 102c98ac9619b55a63913ac2541d9521
BLAKE2b-256 2cd134ffe7c01b2205c9f6fbe8081b6ff63f6cea1c816ba4450b734708c90f8b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 286.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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 333eed7a5808ac55bb4d8573313feb812d0a6f6f62ed7d585a8663ae6c4b6ac1
MD5 156adbf2abc6008a8f00076e3c6f5af7
BLAKE2b-256 835c54f1e7cf041f032e556b0c231ca0779a08efe217b02a395721a4bd6940d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d8c9ae010e2b36cc6c54c58b77e6cc1f308d2c0132103634c3fe6379be5c621f
MD5 3a876326c9582005222a22c5bf8cbeaf
BLAKE2b-256 99c6e891704ff7ba032b2c06dbbe1b4b0081374257f25d89ae3158fbdff5aa2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.6-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 28e51a35f611e82afcf69ed64bacd58ff2b914f67e7eff7f766f22f922b85904
MD5 47dc98debb8d090e31bf60d6b552b444
BLAKE2b-256 5bfe2fab95aba965885b01cc2df82056b143914a2126ea0ddc0356014de1271d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 285.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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 52d0b93f5c9c2375315238ed5f445527ca212fa774dc4198135725477b0c468d
MD5 139411120309adf21d81abcaed1cecd8
BLAKE2b-256 4a424dd162c2af5ab9cc1d72089d99c0c21b23b9003643e20eff75c3c5fca5d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 9dac1ce9e57da2b36a34290eeb50a4043d00b1857ae00d5b065ad15a0df73cc7
MD5 86bce2c808af4032473f7ae50dc82782
BLAKE2b-256 37f64794acff0aefe23d4273bfc318de8b5c04b8a85856908aacf7c3e9a3a993

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.6-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 46f50050665025145dd25c4ddfb9268d7736a1b500a88c32543bee96d00145d6
MD5 0b5db0e4f55d681689ba034567053c3b
BLAKE2b-256 5e479a53bfa6ce1a4f52c2754656a4ad0f8585ec2a9a4c4d8e7e403a3983a874

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