Now on the Mac App Store

Send. Debug. Ship.

Push Tools is a native desktop workbench for testing Expo, FCM, APNs, and Live Activities — no backend, no accounts, no noise. Built for native iOS developers, native Android developers, Flutter developers, and Expo / React Native developers alike.

Expo PushFCM HTTP v1APNs .p8 AuthLive Activities
Push Tools
Expo
FCM
APNs
Live Activity
Device Token
ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]
Title
Test Push
Body
Hello from Push Tools
Send Push Notification
Response
status: ok · id: d3f9a…

Four Providers

Every push stack covered

Expo Push

Expo Push API

Compose and send to ExponentPushToken targets. Set title, body, data, priority, TTL, badge, sound, and channel ID. View ticket and receipt responses inline.

exp.host/--/api/v2/push/send
FCM

Firebase Cloud Messaging

Authenticate via a service-account JSON using Google OAuth2. Sends HTTP v1 messages with notification, data, and Android-specific config. Token cached ~55 min.

fcm.googleapis.com/v1/projects/…/messages:send
APNs

Apple Push Notification service

Native iOS / macOS push with .p8 token auth. Switch between sandbox and production. Configure alert, badge, sound, content-available, mutable-content, and priority.

api.push.apple.com / api.sandbox.push.apple.com
Live Activity

Live Activities

Build and dispatch ActivityKit push payloads — start, update, or end. Set content-state, relevance score, stale date, and dismiss date. APNs push-type: live-activity.

api.push.apple.com (push-type: liveactivity)

Any Stack, Any Platform

Built for every kind of developer

Push Tools talks directly to the raw provider APIs — so it doesn't matter what your app is written in. Native iOS developers, native Android developers, and Flutter developers all send from the same desktop workbench.

Native iOS

Test APNs .p8 auth and Live Activity payloads straight from Xcode workflows — sandbox and production, no server required.

Native Android

Fire FCM HTTP v1 messages with your service-account JSON to any registration token — verify delivery before you ship.

Flutter

Flutter apps talk to FCM and APNs under the hood — Push Tools tests both endpoints directly, no plugin or emulator needed.

Expo / React Native

Paste an ExponentPushToken and send in seconds — built for the Expo Push API from day one.

Workflow

From token to delivery in seconds

Four tabs, one workflow. No dashboards to navigate, no documentation to cross-reference.

01

Pick your provider

Choose Expo, FCM, APNs, or Live Activity from the tab bar. Each tab exposes exactly the fields that provider supports—nothing more.

02

Paste token, compose payload

Enter your device token (or pick one from Device Book), fill in title, body, and any advanced fields like data, TTL, priority, or content-state.

03

Send and inspect

Push Tools fires the request from your machine using your credentials. The full response—ticket ID, error code, HTTP status—appears instantly.

04

Iterate fast

Adjust one field, hit Send again. Import/export JSON payloads to save test scenarios. Keep tokens in Device Book so you never retype them.

Local First

Your data never leaves your machine

Push Tools has no cloud component. Credentials, tokens, and payloads stay on your device.

Credentials in system keyring

APNs .p8 keys, FCM service accounts, and Expo access tokens are stored in the macOS Keychain via the OS keyring API. Never written to plaintext files.

Zero telemetry

The app contains no analytics SDK, no crash reporter, and no usage tracking. Every network request goes directly to the push provider you chose—nothing else.

No accounts required

Push Tools has no sign-in, no cloud sync, and no subscription. Install and start sending in under a minute.

File access sandbox

The app only reads .p8 and .json files from Desktop, Documents, Downloads, or temp — max 1 MiB. No arbitrary filesystem access.

Read the full Privacy Policy →

Available Now

Start testing in minutes

Free to download. No subscription, no sign-in. Available on the Mac App Store.

Download on the Mac App Store

Requires macOS 13+