CLI tool for testing mobile push notifications via FCM and APNs — with reusable JSON message templates.
Send real push notifications to devices from terminal: pick a template, pass a device token, done.
Status: FCM sending is fully functional. APNs support is work in progress (template routing exists, delivery is stubbed).
- Go 1.25+
- A Firebase service account key (JSON) for FCM sending (Firebase Console → Project Settings → Service Accounts → Generate new private key)
git clone https://github.com/CuttyRobot/norman.git
cd norman
go build -o norman .Optionally move the binary somewhere on PATH:
mv norman /usr/local/bin/Before sending anything, point the CLI at your credentials:
norman setupAn interactive form will ask to:
- Choose a root directory to search from (defaults to the current directory).
- Pick FCM credentials file (Firebase service account JSON).
- Pick APN credentials file (optional for now — APNs delivery is in development).
The paths are saved to a config file in your user config directory:
- macOS:
~/Library/Application Support/kratos/config.yaml - Linux:
~/.config/kratos/config.yaml
Check the current configuration at any time:
norman infonorman addWalks through an interactive form (provider type, title, body, platform options) and saves the result as a JSON template. Templates are named by provider prefix: fcm.<name>.json or apn.<name>.json — the prefix decides how the message is routed on send.
Templates also can be written by hands.
{
"displayName": "hello-world",
"platforms": ["android", "ios"],
"android": {
"priority": "high",
"notification": {
"channelId": "com.online.test"
}
},
"notification": {
"title": "Hello World",
"body": "Hello World"
}
}Save it as e.g. fcm.hello-world.json in working directory.
# Fully interactive: choose a template from the current directory, then enter a token
norman send
# Template chosen, prompt only for the device token
norman send fcm.hello-world
# One-shot: template + device token
norman send fcm.hello-world <device-token>norman version
norman| Command | Description |
|---|---|
norman setup |
Interactive configuration: pick FCM / APN credential files |
norman info |
Show current configuration |
norman add |
Create a new message template interactively |
norman send [template] [token] |
Send a push notification (arguments optional — missing ones are prompted) |
norman version |
Print version |
- APNs delivery
-
templates listcommand - Template clone / edit commands
- Sending to a file with a list of tokens