A desktop app for reading SPORTident cards at orienteering events. Shows a full-screen happy/sad face result display with course validation — great for school and youth events.
Go to the Releases page and download the right file for your computer:
- Windows:
NGZ Setup 0.1.1.exe(installer) orNGZ 0.1.1.exe(portable, no install needed) - macOS:
NGZ-0.1.1.dmg - Linux:
NGZ-0.1.1.AppImage
Your computer needs the Silicon Labs CP210x driver to communicate with the SPORTident station.
- Windows: Download from Silicon Labs. Windows 10/11 may install it automatically when you plug in the station.
- macOS: Download from Silicon Labs.
- Linux: Usually built in. If the station isn't detected, run
sudo usermod -a -G dialout $USERand log out/in.
- Plug in your SPORTident station via USB
- Launch NGZ
- Select the COM port (auto-detected SPORTident stations are marked with ★)
- Select an event (Animal-O is built in, or create your own)
- Click Connect — the station beeps twice when ready
- Insert SI cards to read them!
Insert an SI card into the station and a full-screen result appears:
- Green happy face + ascending chime = all controls correct
- Red sad face + descending buzz = missing or wrong controls
Shows the course name, race time, card number, and a per-control breakdown. Click to pause the display, click again to dismiss (or it auto-dismisses after 10 seconds).
An event is a set of courses. On the setup screen:
- The Animal-O event is built in with 10 courses (Lion, Bee, Crab, etc.)
- Click + New Event to create your own:
- Paste Controls — type courses like
Lion: 31, 33, 36, 38, 39(one per line) - IOF XML — import a course file from Purple Pen, OCAD, or Condes
- Paste Controls — type courses like
The app auto-detects which course a card matches based on the punches.
- Inline courses: Controls must appear in the correct order. Extra controls are allowed (the app only checks that the required sequence is present).
- Score-O courses: Controls can be in any order.
- Only punches between the card's start and finish times are considered, so you don't need to clear cards between runs.
- Read History: Table of all cards read with OK/PM status
- Protocol Log: Raw SI protocol messages for debugging
Your SPORTident station must be configured with:
- Extended protocol → ON
- Handshake mode → ON (autosend → OFF)
- Operating mode → Readout
Configure using SI-Config or SportIdent Config+.
SiCard 5, 6, 6*, 8, 9, 10, 11, SIAC (including 192-punch mode)
After installing the CP210x driver and plugging in the SPORTident station, it may appear under Other devices as "SPORTident USB to UART Bridge Controller" with a warning icon instead of under Ports (COM & LPT). To fix this, force Windows to use the CP210x driver:
- In Device Manager, right-click SPORTident USB to UART Bridge Controller → Update driver
- Choose Browse my computer for drivers
- Choose Let me pick from a list of available drivers on my computer
- In the device type list, select Ports (COM & LPT) → Next
- On the left (Manufacturer), select Silicon Labs
- On the right, select Silicon Labs CP210x USB to UART Bridge → Next
The device should now appear under Ports (COM & LPT) with a COM port number.
- Check USB connection and make sure the CP210x driver is installed
- Try unplugging and replugging the USB cable
- Linux:
sudo usermod -a -G dialout $USER
- Verify station is in readout mode with extended protocol
- Ensure no other program (SI-Config, etc.) is using the serial port
The app is not code-signed, so Windows may show a blue warning the first time you run it. Click More info → Run anyway. This only happens once.
- Node.js 18+ (download from https://nodejs.org)
- SPORTident station connected via USB
# Install dependencies
npm install
npm install serialport
npm install --save-dev @types/serialport
npm run renderer:install
# Development mode (hot-reload)
npm run dev
# Build and run production
npm startnpx ts-node src/cli.ts # Auto-detect SI station
npx ts-node src/cli.ts COM3 # Specify port
npx ts-node src/cli.ts --list # List available portsnpm run dist:win # Windows .exe
npm run dist:mac # macOS .dmg
npm run dist:linux # Linux .AppImageInstallers are output to the release/ folder. The GitHub Actions workflow builds all three platforms automatically when you push a version tag (git tag v0.2.0 && git push origin v0.2.0).
ngz/
├── src/ # Core library (no Electron dependency)
│ ├── si-protocol/ # SI protocol implementation (from GecoSI)
│ │ ├── crc.ts # CRC calculator
│ │ ├── SiMessage.ts # Frame structure and constants
│ │ ├── SiDataFrame.ts # Card data parsers
│ │ ├── SiDriver.ts # Protocol state machine
│ │ ├── SiSerial.ts # Serial port adapter
│ │ └── __tests__/ # Unit tests with real card data
│ ├── course-validator/ # Course validation algorithms
│ │ └── validator.ts # Inline (Levenshtein) + Score-O
│ └── cli.ts # CLI card reader tool
├── electron/
│ ├── main.ts # Electron main process
│ ├── preload.ts # IPC bridge to renderer
│ └── renderer/ # React UI (Vite + React)
│ └── src/
│ ├── App.tsx # Main app component
│ └── App.css # Styles
├── .github/workflows/
│ └── build.yml # CI/CD: builds all platforms on tag push
└── package.json