A universal CLI tool to preview uncommitted code changes with rich syntax highlighting — before you commit them.
Project description
Code Preview
A universal CLI tool to preview uncommitted code changes with rich syntax highlighting — before you commit them.
It works with any language and any Git repository.
Quickly visualize what your next commit will look like — right in your terminal.
Features
- Colored Diff Preview: Additions (green), deletions (red), and context (gray).
- Language-Agnostic: Works for Java, Python, JavaScript, Scala, Go, etc.
- Rich Terminal Output: Powered by Textualize Rich.
- Git-Integrated: Shows all unstaged and staged file changes.
- No Commit Required: Safe to preview changes locally anytime.
- Extensible Design: Add plugins or render to HTML in the future.
Example Output
Here is a preview of what changed in a Java file:
──────────────────────────────────────────────────────────────
a/src/main/java/com/example/App.java → b/src/main/java/com/example/App.java
@@ -14,6 +14,8 @@
public class App {
public static void main(String[] args) {
- System.out.println("Hello, world!");
+ System.out.println("Hello, Aryant!");
+ System.out.println("Code preview is working");
}
}
──────────────────────────────────────────────────────────────
Installation
From PyPI (Recommended)
You can install code-preview using pip:
pip install code-preview
From Source
If you want to install it from your local folder for development:
git clone https://github.com/Aryant-Tripathi/code-preview.git
cd code-preview
pip install -e .
Usage
Preview All Unstaged Changes
Simply run the command in the root of your Git repository:
code-preview
Preview Changes in a Specific Folder
You can limit the preview to a specific directory or file:
code-preview src/
Run Directly Without Installation
You can also run the tool directly as a Python module:
python -m code_preview.cli
How It Works
- Detects all files with uncommitted changes using GitPython.
- Reads their last committed version (HEAD).
- Compares against your local version using difflib.
- Renders the diff with syntax highlighting via Rich.
Roadmap
- Auto-detect syntax for each file type (
.java,.py,.js, etc.) - Add
--htmlmode for browser-based diff preview - Add
--watchmode for real-time change tracking - Support for non-Git directories (via snapshots)
- VSCode/IntelliJ plugin integration
Development
Interested in contributing? Here's how to set up your environment.
Setup Virtual Environment
python3 -m venv venv
source venv/bin/activate
Install Dependencies
Install the project in "editable" mode:
pip install -e .
Run Locally
Run the tool using the development entry point:
python -m code_preview.cli
Project Structure
code-preview/
├── src/
│ └── code_preview/
│ ├── __init__.py # Package initializer
│ ├── cli.py # Main CLI entry point (argparse)
│ ├── git_utils.py # Git interaction logic
│ ├── diff_renderer.py # Logic for rendering diffs with Rich
│ └── file_utils.py # File reading utilities
├── pyproject.toml # Build configuration (PEP 621)
├── setup.cfg # Package metadata
├── README.md
└── LICENSE
Publishing (For Maintainers)
-
Build:
python3 -m build
-
Upload to TestPyPI:
python3 -m twine upload --repository testpypi dist/*
-
Test Install:
pip install -i https://test.pypi.org/simple/ code-preview
-
Publish to PyPI:
python3 -m twine upload dist/*
Contributing
Contributions are welcome! If you find this project useful:
- Star it on GitHub → Aryant-Tripathi/code-preview
- Open issues for feature requests or bugs
- Submit pull requests for enhancements
Acknowledgements
- Rich for beautiful terminal rendering
- GitPython for Git integration
- Inspired by the need for more readable
git diffpreviews for all developers
Author
Aryant Tripathi
- Software Engineer | Open Source Contributor | DSA Mentor
- Email: aryanttripathi@gmail.com
- GitHub: @Aryant-Tripathi
- LinkedIn: in/aryant-tripathi
License
This project is licensed under the Apache-2.0 License — see the LICENSE file for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file code_preview-1.0.0.tar.gz.
File metadata
- Download URL: code_preview-1.0.0.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35898517fbcb1e1c15d1a33a18ef8da47540289a9b185101c5a718a3319f59b3
|
|
| MD5 |
5c06662c006761f83ff94ea8def9ca2d
|
|
| BLAKE2b-256 |
77bee032ddef98f9e64066755ea92bd97fcbca31501e53b0f4affa188840ebd3
|
File details
Details for the file code_preview-1.0.0-py3-none-any.whl.
File metadata
- Download URL: code_preview-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f9ddce15e8cf7441149362c37d5280ea574ca4698b40d01fa131ed442161b9f
|
|
| MD5 |
3f1d2e1291d4d531ed6d71d3af24408f
|
|
| BLAKE2b-256 |
400f15fe8bdcc485a04460fc2a61b29604892008ef558738d4fc5e4cd0f9041d
|