Hello.
Mhoroi.
Bonjour.
Hola.
Konnichiwa.
Welcome.
ShaunChivandire
00%
Loading…

Menu

Connect

Developer Tools · Open Source2026 · Ongoing

Open-source TypeScript SDK for ZIMRA fiscalisation. Talk to FDMS directly with your own device certificate, no middleware

The Pain

Every POS, invoicing and accounting product in Zimbabwe has to fiscalise its receipts with ZIMRA's Fiscalisation Data Management System. The spec is stateful, cryptographic and quiet about failure. Send a signature in the wrong encoding, sort two counters alphabetically or pad the device ID wrong, and FDMS answers with an error code and nothing else. A Red error on one receipt locks the fiscal day, and only ZIMRA can close it.

A shop shouldn't stop trading because a library sorted Card before Cash.

0

Red error locks the fiscal day until ZIMRA closes it

0h

Offline window before receipts must reach FDMS

0

Digits the device ID needs in the certificate request, zero-padded

The Insight

Each POS team was learning FDMS on live devices, one rejected receipt at a time, or paying middleware a fee on every receipt to avoid it. The device's own certificate is all FDMS needs. What was missing was a library that had already made the mistakes on ZIMRA's test environment and shipped the answers as defaults.

“Nobody needs a middleman to fiscalise. They need the hard parts done once, in the open.”

The Solution

zimra-fdms registers devices, runs mutual TLS, signs hash-chained receipts and opens and closes fiscal days against FDMS. The same package ships a CLI, an MCP server, a local FDMS simulator and a React Native adapter for Android.

Hash-Chained Receipt Signing

Canonical signing strings, cents-exact money and the receipt-to-receipt hash chain, DER-signed the way FDMS verifies them

Registration Without Exporting the Key

The SDK builds the certificate request itself and has your signer sign it, so a key in Android Keystore, an HSM or a cloud KMS can register

One Core, Every Runtime

The fiscal engine uses no Node APIs, so it runs on Node, Bun, Deno, browsers and Hermes. A lint step fails the build if one creeps in

Offline Queue & Crash Recovery

Receipts are signed at sale time and journaled for the 72-hour offline window. A pending marker settles a lost submit without a duplicate

CLI & MCP Server

Register, open the day, submit and close from a terminal, or run the same eight tools from Claude Code over MCP

Simulator & Conformance Vectors

A local FDMS with real mTLS that replays the error codes seen live, plus test vectors that check a port in any language

Visual Proof
zimra-fdms — Fiscalisation, solved once

Fiscalisation, solved once

zimra-fdms — The hard parts, done in the open

The hard parts, done in the open

zimra-fdms — Knowledge that cost real fiscal days

Knowledge that cost real fiscal days

The Impact

MIT-licensed on npm as zimra-fdms 0.4.1, with docs at zimrasdk.com

0

Validation errors on ZIMRA's test environment

0

Automated tests

0+

GitHub stars

The Lesson

Most of the work wasn't code. It was finding out, receipt by receipt, that FDMS wants DER signatures, counters in enum order and a ten-digit device ID. Each of those is now a default with a regression test behind it, and that is what makes the SDK worth installing.

What's Next

Version 1.0: a Gradle build on a real Android device, pipelined offline flush and TLS session resumption.

Tech Stack

Carefully selected technologies for performance, scalability, and developer experience.

Core

TypeScriptWebCryptoECDSA P-256

Core technologies powering the application's foundation and user experience.

Node

Mutual TLS@peculiar/x509CLI

AI

MCP ServerZod

Mobile

React NativeKotlinOkHttpAndroid Keystore

Testing & Docs

Node Test RunnerGitHub ActionsGSAPVercel
16+

Technologies

5

Categories

100%

Type Safe

Modern

Stack

Fetchr

Next Project

Fetchr

On-demand courier delivery for Harare. Book a rider, track the parcel live, pay when it arrives

View Project

Work With Me

Let's Build Something Like This

Need an AI-powered product that actually works in the real world? Let's talk about your project.