Open-source, web-based event analysis tool for protective relay oscillography.
Development and release of Synchrowave Web is sponsored by Best Energy Partners.
docker compose up --buildOpen http://localhost:3000 in your browser.
| Feature | Description |
|---|---|
| Waveform Plotting | Plot relay oscillography with zoom, pan, and dual cursors |
| MHO Circle Diagram | Visualize distance element characteristics and apparent impedance |
| Phasor Diagram | Real-time voltage/current phasor visualization |
| Digital Elements | Monitor TRIP, breaker status, and other digital signals |
| Custom Calculations | Build equations using sin, cos, sqrt, RMS, and signal math |
| Time Alignment | Compare signals from multiple events with time cursors |
| File Support | COMTRADE (.cfg/.dat), EVE, CEV, CSV, and more |
- COMTRADE — IEEE C37.111 (.cfg + .dat pair)
- ASCII — .EVE event reports
- Compressed Event — .CEV compressed event reports
- CSV — Comma-separated values
- Demo Mode — Built-in 3-phase fault event for quick testing
Synchrowave automatically saves your view preferences and remembers them across sessions.
| Preference | Scope | Behavior |
|---|---|---|
| Active Tab | Global | Remembers last viewed tab (Waveform, MHO, Phasor, Settings) across all events |
| Channel Selection | Per-Event | Saves your selected channels for each event file—switch events and your channels are restored |
| Channel Defaults | Global | New events inherit your most recently used channels |
-
When you load an event:
- If you've opened that event before, your previously selected channels are restored
- If it's a new event, the channels you used most recently are selected by default
- Your active tab preference is always restored
-
When you change channels:
- Your selection is saved for the current event
- It also becomes your new default for future events
- This gives you the best of both worlds: per-event memory + global defaults
-
When you refresh the page:
- Your active tab is restored
- Channel preferences are preserved
- Cursor position resets to the beginning (intentional—start fresh with each session)
To clear all saved preferences and start fresh:
- Go to Settings tab
- Scroll to View Preferences section
- Click Reset All View Preferences
- Confirm the dialog
- The page will reload with all defaults
- Storage: Browser's
localStorage(local to your computer) - Privacy: All data stays in your browser—nothing sent to server
- Size: Typically < 10 KB per browser
- Persistence: Data remains until you manually reset or clear browser storage
synchrowave-web/
├── docker-compose.yml
├── backend/ Python FastAPI backend
│ ├── app/
│ │ ├── main.py API endpoints
│ │ ├── parsers/ File format parsers
│ │ │ ├── comtrade.py IEEE C37.111 parser
│ │ │ ├── eve.py ASCII parser
│ │ │ ├── cev.py compressed parser
│ │ │ └── csv.py CSV parser
│ │ └── calculations/
│ │ └── engine.py Custom calculation engine
│ └── Dockerfile
├── frontend/ React + Vite frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── Header.jsx App header with file open
│ │ │ ├── Sidebar.jsx Signal selector panel
│ │ │ ├── MainContent.jsx Tab container
│ │ │ ├── WaveformChart.jsx Oscillography plots
│ │ │ ├── DigitalChart.jsx Digital element plots
│ │ │ ├── PhasorChart.jsx Phasor diagram
│ │ │ ├── MhoChart.jsx MHO circle diagram
│ │ │ ├── CalcBar.jsx Calculation input bar
│ │ │ ├── StatusBar.jsx Bottom status bar
│ │ │ └── WelcomeScreen.jsx Welcome / upload screen
│ │ └── styles/
│ │ └── global.css Dark theme styles
│ └── Dockerfile
└── sample-data/ Place .eve/.cfg/.dat files here
| Method | Path | Description |
|---|---|---|
| GET | /health |
Health check |
| POST | /api/upload |
Upload an event file |
| GET | /api/sample-files |
List available sample files |
| POST | /api/load-sample/{filename} |
Load a sample file |
| POST | /api/calculate |
Run a custom calculation expression |
| GET | /api/mho-params/{file_id} |
Get MHO zone parameters |
Place event files in the sample-data/ directory:
cp /path/to/your/event.eve sample-data/
cp /path/to/your/event.cfg sample-data/
cp /path/to/your/event.dat sample-data/sqrt(VA**2 + VB**2 + VC**2)
abs(IA) * 1.732
rms(IA, 100)
(VA - VB) / sqrt(3)
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Not a Substitute for Human Review This software application is provided strictly for informational and visualization purposes. It is an unofficial utility and is absolutely not a substitute for professional engineering judgment, verified system analysis, or rigorous human review.
Operational Decisions & Verification The data parsed, interpreted, and displayed by this tool must never be used as the sole basis for operational decisions, switching procedures, fault clearing, or system modifications. All outputs and findings must be independently double-checked and verified against primary, manufacturer-approved commercial tools and native raw data before any physical or systematic action is taken.
Safety and Qualified Personnel Power system operations involve severe and inherent physical risks. Any field actions, hardware interactions, or system testing must be executed exclusively by qualified personnel. Proper safety protocols, including the use of appropriate Personal Protective Equipment (PPE), shall be strictly adhered to at all times.
Limitation of Liability The developers, creators, and contributors of this software assume absolutely no liability and cannot be held responsible for any equipment failure, property damage, system outages, injuries, or loss of life resulting from the use or misuse of this tool. This software is provided "as is," without warranty of any kind, express or implied, including but not limited to the warranties of accuracy, reliability, merchantability, or fitness for a particular purpose.
Development Context This software was developed independently in a platform vacuum. It is an independent, community-driven project. It has not been tested, vetted, or certified by any hardware manufacturer, and its underlying parsing logic is entirely unaffiliated with any official commercial analysis suites.
This project is licensed under the MIT License.