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.1.tar.gz (377.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.1-cp312-cp312-win_amd64.whl (230.5 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.2.1-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.1-cp312-cp312-macosx_10_13_universal2.whl (441.2 kB view details)

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

pygitzen-0.2.1-cp311-cp311-win_amd64.whl (229.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.2.1-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.1-cp311-cp311-macosx_10_9_universal2.whl (442.8 kB view details)

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

File details

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

File metadata

  • Download URL: pygitzen-0.2.1.tar.gz
  • Upload date:
  • Size: 377.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.1.tar.gz
Algorithm Hash digest
SHA256 828f2f663e40618508a5ff7cef450a79e8c56128ad6d39ae34280aaee3e1d42e
MD5 171e9b091587e81ceb121210e4dfeaf9
BLAKE2b-256 9b35bb65c7f5dc1f2651b3c0ca2e8eb8d4fb4254e017f14e9e3b3744c1bb8590

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 230.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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0bb33262ff486e635a901a988a230bbc261f357ffe2b294cf3ce5907f4bbf438
MD5 18123ccb62df38f97e2a082cbc983770
BLAKE2b-256 e061dd712335d78c2ee9687376fe4bc80b2191e2c1b85acac76647ad366b3e69

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 614c7d19af95e491000ede09fd75ea80ef60c2e27043a37579301ae0ff14fec1
MD5 a36422d10bb7b731d22d6a73f6398196
BLAKE2b-256 00ddd7ae81a1f11aca4c0af74b212579253ca2f2376162bf230a0f985482e45e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.1-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 600e6cdcf32b25c3016f719478e294d77d6366de36026aa49b09588ce07bc2a6
MD5 cb3e5b8b555a2f8db5f8b2f0c4fa4791
BLAKE2b-256 755694e8a1152a3d21410901669e8b7c5692a8257db097050d1f89b75df55678

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 229.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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 623b6bb2701006137667d45d8b5dc298196f361c5d955ae415cb39addb6037ad
MD5 089cd6eff49e9e844d8c39042175dac9
BLAKE2b-256 a3b473c7a752702e7dfa611d7d6bf17da1ee52f7eb4afaa0ad95a628512abd94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 34209d1d1f8376c2c101bbdbf350d6dcef183c56a17dbb18885ba56ef17a5bff
MD5 363c0740384a6975fdbdd80cf16aac21
BLAKE2b-256 2f260fe189605933b27e339b6c304f0c3104504a17cbce16fb83d1f64af1f869

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1d7bbe81021a12b9d1e373336e17c964b71fe6563337ef751ca02d7caafa9758
MD5 dc75bffee8980112d8bc5028b38d50df
BLAKE2b-256 acb63d5c585c131c4fa4b01fbc4c422be475f8b631182d78cfe255ef9aa912cf

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