Skip to main content

A Python-native LazyGit-like TUI using Textual and dulwich

Reason this release was yanked:

Missing CSS files in package distribution causing "app.tcss not found" error. Please use v0.2.5 instead.

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.4.tar.gz (399.8 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.4-cp312-cp312-win_amd64.whl (257.6 kB view details)

Uploaded CPython 3.12Windows x86-64

pygitzen-0.2.4-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.4-cp312-cp312-macosx_10_13_universal2.whl (468.3 kB view details)

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

pygitzen-0.2.4-cp311-cp311-win_amd64.whl (256.7 kB view details)

Uploaded CPython 3.11Windows x86-64

pygitzen-0.2.4-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.4-cp311-cp311-macosx_10_9_universal2.whl (469.8 kB view details)

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

File details

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

File metadata

  • Download URL: pygitzen-0.2.4.tar.gz
  • Upload date:
  • Size: 399.8 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.4.tar.gz
Algorithm Hash digest
SHA256 c81af502ac43f53012c98bfd8f39ad97220d1add202f9e35ff70e933a356aaa7
MD5 a3a53534f07abac2fb38639d0fe28b09
BLAKE2b-256 4200fa2f85fc4f77a44297bf12db24a981aa424d2e2a1c86abfe2e6560ae69d0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 257.6 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e246b9151e2d651ae44fdaf3ed13a3d1e4d92191b92274b41cc494b7da8b5dd5
MD5 4bdcba9ebf72453da9db5d3e058165e5
BLAKE2b-256 a72f032e0449ee33715c98ba37b7bfe577b7068ba0b844857cef10dda06044ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2b03f8c0bf2b3783019e64de73da847d03ca128187a7be4d724fd106f7f54beb
MD5 03676147d1299335af53735742ab5bc7
BLAKE2b-256 8cd1c68e534d2c27503633a219f3a586e13839e06f4ae5caa96ea186e6000ef3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.4-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 0cd50797ecbfbaf0c57db5e2cb023b12b4b8eafa570f1f9f91171ef63f315c24
MD5 ba37195d5f2c6a259712aabfa1f8bb84
BLAKE2b-256 cd61df3b16685c983e6d0b167131391798403eb2a134644f3bb744670d0310a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.2.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 256.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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4d6a300ca6e5513ae73e775782085b422569388881253dc8999bcddac4e12aa9
MD5 cf3536090033c3e819b121746627e401
BLAKE2b-256 8b31a0ee173159e7a7463502391aa28b1179893dc3153f9788e8d259624bb3dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 fe650f26558b909b9daddf9ff15c08415590924dcba906efab785273a60e6c91
MD5 15d4ce9bd972f43f1e388866055dba5c
BLAKE2b-256 846dfdd890f9aaca9872fc342b2b885ee341c66c1bdfa50d99e4a5b3473b0009

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.2.4-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9c4a70861f20bb521fc54e148bbec9d8e742ff42c67bc58f286a4f4888da2e21
MD5 03d791762b348b70e25390c15ad4a7a9
BLAKE2b-256 75dafc713dd76f3108f194eb4fabc000485f231e8a3e2f2fbea7249fa56cc8d6

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