WizardMerge Frontends
This directory contains multiple frontend implementations for WizardMerge, each designed for different use cases and workflows.
Available Frontends
1. Qt6 Desktop Frontend (qt6/)
Type: Native desktop application
Language: C++ with Qt6 and QML
Platforms: Linux, Windows, macOS
A native desktop application providing the best performance and integration with desktop environments.
Features:
- Native window management and desktop integration
- Offline capability with embedded backend option
- High-performance rendering
- Three-panel diff viewer with QML-based UI
- Keyboard shortcuts and native file dialogs
Best for: Desktop users who want a fast, native application with full offline support.
See qt6/README.md for build and usage instructions.
2. Next.js Web Frontend (nextjs/)
Type: Web application
Language: TypeScript with React/Next.js
Runtime: bun
A modern web-based interface accessible from any browser.
Features:
- Cross-platform browser access
- No installation required
- Real-time collaboration (planned)
- Responsive design
- Easy deployment and updates
Best for: Teams needing shared access, cloud deployments, or users who prefer web interfaces.
See nextjs/README.md for development and deployment instructions.
3. CLI Frontend (cli/)
Type: Command-line interface
Language: C++
Platforms: Linux, Windows, macOS
A command-line tool for automation and scripting.
Features:
- Non-interactive batch processing
- Scriptable and automatable
- CI/CD pipeline integration
- Git workflow integration
- Minimal dependencies
Best for: Automation, scripting, CI/CD pipelines, and terminal-based workflows.
See cli/README.md for usage and examples.
Architecture
All frontends communicate with the WizardMerge C++ backend through a common HTTP API:
┌─────────────────────────────────────────────────┐
│ Frontends │
│ ┌────────────┐ ┌────────────┐ ┌──────────┐ │
│ │ Qt6 Native │ │ Next.js │ │ CLI │ │
│ │ (C++) │ │(TypeScript)│ │ (C++) │ │
│ └─────┬──────┘ └──────┬─────┘ └────┬─────┘ │
└────────┼─────────────────┼─────────────┼───────┘
│ │ │
└─────────────────┼─────────────┘
│
HTTP REST API
│
┌─────────────────▼──────────────────┐
│ WizardMerge C++ Backend │
│ (Drogon HTTP Server) │
│ │
│ - Three-way merge algorithm │
│ - Conflict detection │
│ - Auto-resolution │
│ - Semantic analysis │
└────────────────────────────────────┘
Backend API
The backend provides a REST API on port 8080 (configurable):
POST /api/merge- Perform three-way merge
All frontends use this common API, ensuring consistent merge behavior regardless of the interface used.
Choosing a Frontend
| Feature | Qt6 | Next.js | CLI |
|---|---|---|---|
| Native Performance | ✓ | - | ✓ |
| Offline Support | ✓ | - | ✓ |
| Web Browser Access | - | ✓ | - |
| Collaboration | - | ✓ (planned) | - |
| Automation/Scripting | - | - | ✓ |
| Visual UI | ✓ | ✓ | - |
| Installation Required | ✓ | - | ✓ |
| Platform Support | All | All | All |
Building All Frontends
Prerequisites
Install dependencies for all frontends you want to build:
# Qt6 (for qt6 frontend)
# Ubuntu/Debian:
sudo apt-get install qt6-base-dev qt6-declarative-dev
# macOS:
brew install qt@6
# Next.js (for nextjs frontend)
curl -fsSL https://bun.sh/install | bash
# CLI (for cli frontend)
# Ubuntu/Debian:
sudo apt-get install libcurl4-openssl-dev
# macOS:
brew install curl
Build All
# Build Qt6 frontend
cd qt6
mkdir build && cd build
cmake .. -G Ninja
ninja
cd ../..
# Build/setup Next.js frontend
cd nextjs
bun install
bun run build
cd ..
# Build CLI frontend
cd cli
mkdir build && cd build
cmake .. -G Ninja
ninja
cd ../..
Development Guidelines
When developing a frontend:
- Consistency: Maintain consistent UX across all frontends where applicable
- API Usage: Use the common backend API for all merge operations
- Error Handling: Properly handle backend connection errors and API failures
- Documentation: Update frontend-specific README files
- Testing: Add tests for new features
Adding a New Frontend
To add a new frontend implementation:
- Create a new directory under
frontends/ - Implement the UI using your chosen technology
- Use the backend HTTP API (
POST /api/merge) - Add a README.md with build and usage instructions
- Update this file to list the new frontend
License
See ../LICENSE for details.