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.3.tar.gz (205.9 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.3-cp312-cp312-win_amd64.whl (110.3 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

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

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

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

File details

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

File metadata

  • Download URL: pygitzen-0.1.3.tar.gz
  • Upload date:
  • Size: 205.9 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.3.tar.gz
Algorithm Hash digest
SHA256 a3465304db924d6b8362468e3dd112e07063d252c2bef886e33e4dafe97728f0
MD5 04c66fdf4cb6458119aa178a07c46d1b
BLAKE2b-256 4862ffbf046a34e964de5640a4deb19312c364dfd0183219d22e4ede376a4091

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 110.3 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.1.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 63efe11feaf1e65b72abd64c0ea246d5e11b8b26e1530315c4ced0026857c770
MD5 d6a1e0a7f4625b2034005cc9d14195d1
BLAKE2b-256 7908f3f3d0f8ccb4a6f36e66162707e08a035f027786747e77e20d431d8a229f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 bc2c0c31922b95371e3cfe534d46dfd3065f539fb73fa3a4cd92f37713a61487
MD5 a203963941ef215f4c647f5acbbe536b
BLAKE2b-256 6284cc9ee7bde2a5066020e21bea4781bbdb7e41c1fe0aa837e3b526795a08a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 d503e7cfe9d50e6fa59bca29e5e51e02c35495bfe564dbfaee91d745ab36ed9a
MD5 8cb66394d75504d7dfd13eceb1b79d5d
BLAKE2b-256 12a02c6fb7d5157d514bc8aec2c09fdea5d2efe7b0f9f8a1292cb9d571c1b939

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygitzen-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 109.3 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.1.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d3883e58d4ed6f6ad40f430e044d4830dc13390a984f94c40e5e13b854d10a7c
MD5 561330c03eb8e6874e1f15e2fb7bb985
BLAKE2b-256 8a6d226f382d1cd484d3ea6363115f2405ba8fee8b192bfaf39ce73ec6419877

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 cfb92acaf9af4e62925ee11090e042812585385762a02b428b7cb09cceeee253
MD5 93c82a13ee32c07d1f8d27d9964e1cbb
BLAKE2b-256 013f5e6fc5629520a1b532b9b91aadb56df3a9c2bb2bdb3e160be42527a43585

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pygitzen-0.1.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c717079830b4164dc03fd1d44becd506b945e0b865a0805548d6511dd8a8a09f
MD5 65946286319ab4aa4a631872db1d17ef
BLAKE2b-256 ad6a34709c24a2adc2006c6f13ea2f9b8d9da2e8018375c59e38cfcc7e5700c1

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