A modern, feature-rich PyQt5 application for previewing and rendering Velocity templates with real-time syntax highlighting, validation, and export capabilities.
Project description
Velocity Template Previewer
Desktop application for previewing and rendering Apache Velocity templates with real-time syntax highlighting and validation. Perfect for developers working with Atlassian products (Jira, Confluence), ScriptRunner, email templates, and web applications.
What is This?
Apache Velocity is a Java-based template engine commonly used in:
- Atlassian Products: Jira email templates, Confluence macros, ScriptRunner scripts
- Email Systems: Dynamic email generation
- Web Applications: Server-side templating
- Code Generation: Template-based code scaffolding
This tool lets you preview and test your Velocity templates instantly without deploying to production.
Features
- Real-time Preview: See changes as you type
- Syntax Highlighting: Color-coded templates and JSON data
- Validation: Catch errors before deployment
- Background Rendering: Smooth performance with large templates
- Auto-save: Never lose your work (saves every 30 seconds)
- Export: Generate static HTML from your templates
- Dark Mode: Easy on the eyes
- Recent Files: Quick access to your projects
Installation
Requirements: Python 3.10+ (Windows, macOS, Linux)
pip install velocity-previewer
velocity-previewer
Or from source:
git clone https://github.com/star7js/velocity-previewer.git
cd velocity-previewer
pip install -e .
velocity-previewer
Quick Start
- Open a template: File > Open or Ctrl+O
- Add your data: Switch to Data tab, paste JSON
- Render: Press F5
- Export (optional): File > Export to HTML
Try the included examples/example-template.vm with examples/example-data.json to see it in action.
Use Cases
Atlassian/ScriptRunner Development
Test Jira email notifications, Confluence macros, or ScriptRunner templates locally before deploying:
#if($issue.priority.name == "Critical")
<span style="color: red;">$issue.key - $issue.summary</span>
#end
Email Template Design
Preview dynamic email templates with test data:
Hello $customer.name,
Your order #$order.id has shipped!
#foreach($item in $order.items)
- $item.name (Qty: $item.quantity)
#end
Dynamic Reports
Generate reports from JSON data without manual formatting.
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| Render Template | F5 |
| Open Template | Ctrl+O |
| Save Template | Ctrl+S |
| Validate Template | Ctrl+Shift+V |
| Validate Data | Ctrl+Shift+D |
Supported Velocity Syntax
- Variables:
$variable,${variable} - Directives:
#if,#foreach,#set,#macro - Comments:
##(single line),#* ... *#(multi-line) - Properties:
$object.property,$array[0] - Methods:
$string.substring(0, 5)
Full Apache Velocity specification supported via Airspeed engine.
Platform Support
- ✅ Windows 10/11
- ✅ macOS 10.15+
- ✅ Linux (Ubuntu, Fedora, Arch)
Development
# Install dependencies
pip install -e .
# Run tests
pytest
# Type check
mypy src/
# Project structure
├── src/velocity_previewer/ # Main package
│ ├── main.py # Application UI and logic
│ ├── renderer.py # Background rendering & context building
│ ├── styles.py # Light/dark Qt stylesheets
│ ├── utils.py # Template processing
│ └── syntax_highlighters.py # Syntax highlighting
├── examples/ # Example templates and data
├── tests/ # Test files
└── pyproject.toml # Project configuration
Settings (window size, recent files) are saved to:
- Windows:
%APPDATA%/VelocityPreviewer - macOS:
~/Library/Application Support/VelocityPreviewer - Linux:
~/.config/VelocityPreviewer
Troubleshooting
| Issue | Solution |
|---|---|
| Template won't render | Use Tools > Validate Template (Ctrl+Shift+V) to see errors |
| JSON parse errors | Use Tools > Validate Data (Ctrl+Shift+D) to check format |
| Slow performance | Large templates render in background automatically |
| App won't start | Ensure PyQt5 is installed: pip install PyQt5 |
Roadmap
- Live preview mode (render on every keystroke)
- Multiple data sets for testing
- Template snippet library
- Velocity macro autocomplete
License
MIT License
Built With
Project details
Release history Release notifications | RSS feed
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 velocity_previewer-1.1.1.tar.gz.
File metadata
- Download URL: velocity_previewer-1.1.1.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6cb5324a434be82f9f2cf089d1605a52ec09060c7c3edd9a7889d1b95d98d9da
|
|
| MD5 |
e34ce49d5494d42066a8fa3a5e3851cc
|
|
| BLAKE2b-256 |
313da240a638b2d20f20b1a3c973084a3597229f72d0a4244f9b658013304bb3
|
Provenance
The following attestation bundles were made for velocity_previewer-1.1.1.tar.gz:
Publisher:
publish.yml on star7js/velocity-previewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
velocity_previewer-1.1.1.tar.gz -
Subject digest:
6cb5324a434be82f9f2cf089d1605a52ec09060c7c3edd9a7889d1b95d98d9da - Sigstore transparency entry: 2084263381
- Sigstore integration time:
-
Permalink:
star7js/velocity-previewer@a1ce169e7e71b5edacbb16af8a98bb45438ccc6e -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/star7js
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a1ce169e7e71b5edacbb16af8a98bb45438ccc6e -
Trigger Event:
release
-
Statement type:
File details
Details for the file velocity_previewer-1.1.1-py3-none-any.whl.
File metadata
- Download URL: velocity_previewer-1.1.1-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7d09b5de3af4969c25c3b840d0f36db440ccc0bd4810d5b36bfe67fa4565f12
|
|
| MD5 |
ded44fe05be3047b7b8aa1369c827046
|
|
| BLAKE2b-256 |
f65f2fe5096a134d083695747efc6731ae057fc03fe596d132196d5e058dc11f
|
Provenance
The following attestation bundles were made for velocity_previewer-1.1.1-py3-none-any.whl:
Publisher:
publish.yml on star7js/velocity-previewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
velocity_previewer-1.1.1-py3-none-any.whl -
Subject digest:
f7d09b5de3af4969c25c3b840d0f36db440ccc0bd4810d5b36bfe67fa4565f12 - Sigstore transparency entry: 2084263390
- Sigstore integration time:
-
Permalink:
star7js/velocity-previewer@a1ce169e7e71b5edacbb16af8a98bb45438ccc6e -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/star7js
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a1ce169e7e71b5edacbb16af8a98bb45438ccc6e -
Trigger Event:
release
-
Statement type: