Chirpush
A project of Orchard Grove Media

Push notifications from your own site.
No vendor in the middle.

Chirpush is a WordPress plugin for web push. Readers subscribe on your site, the subscriber list lives in your own database, and WordPress sends each notification straight to the browser’s own push service. No monthly bill, no third-party script, and no one else holding your list.

In development · Free & open source · GPL-2.0 · WordPress 6.6+ · PHP 8.1+ · No accounts or telemetry

No vendor
between your site and your readers
Your list
subscribers stored in your own WordPress database
Free
delivery, by the browsers’ own push services
No account
no sign-up, no API key, nothing that calls home
What it does

The parts of push you actually use

Hosted push services sell segments, journeys and A/B tests. Most sites send one notification per story. Chirpush does that job well and keeps it on your site. It’s still being built; these are the features planned for the first full release.

A polite subscribe prompt

A small slide-in asks first, after a set number of pageviews and seconds. The browser’s own permission prompt appears only after a reader clicks Allow, so browsers don’t quiet your site for asking on page load. There’s a plain “Get notifications” button too.

Send a post from the editor

Tick “Send a push notification when this post is published” in the editor. Scheduled posts send when they go live. A post that has already been sent needs a confirm to send again, so a re-save never pushes twice.

One-off messages

A “New notification” screen for anything that isn’t a post: a title, a message, a link and an optional image from the Media Library. Send a test to yourself, then send to everyone.

A welcome notification

A short thank-you right after someone subscribes, in your own words. It’s on by default, and it’s never sent to readers moved over from another service.

Clicks land in the right tab

Each notification carries the headline, image and link. A click brings forward a tab that’s already open on that page, or opens a new one. A newer push for the same send replaces an undelivered older one instead of doubling up.

Plain numbers

Every send reports how many were accepted by the push services, failed, removed and clicked, with a click rate. A subscribers card shows the total, readers seen this week, new today, and the split by browser.

A list that stays clean

When a push service says a subscription is gone, Chirpush deletes it at once. Busy services get a few polite retries. Dead rows don’t pile up, and nothing grows without a cap.

Sends never slow your pages

A send is a queue entry. Real server cron works through it in batches in the background, so sending to tens of thousands of readers never happens inside a page request.

Private and locked down

No cookies, user accounts or IP addresses stored. Subscriptions are accepted only for the browsers’ own push services, and your site’s private signing key is never shown on screen.

How it works

Four steps, all between your site and the browser

Web push is an open standard built into the browsers. A vendor only ever supplied the subscriber list, the sending loop and a dashboard. Chirpush keeps all three in WordPress.

1

A reader subscribes

They click Allow. The browser creates a subscription at its own push service (Google’s for Chrome, Mozilla’s for Firefox, Microsoft’s for Edge, Apple’s for Safari) and hands your site its address and two public keys.

2

Your site stores it

WordPress saves the subscription in its own table: one row per browser. No cookies, no user accounts, no IP addresses.

3

Your site signs and encrypts

To send, WordPress signs each request with your site’s own key and encrypts the message so only that browser can read it.

4

The push service delivers

The browser’s push service carries it to the reader for free, and the notification appears even when your site isn’t open in a tab.

Chrome, Edge, Firefox and Safari all speak the same Web Push standard, so the same sending code reaches every one of them.

Where it stands

In development

Chirpush isn’t released yet. The sending code is the same for every browser, so the order below is simply the order we test in, starting with the browsers most readers use.

Now

Proof of concept: Chrome and Edge on desktop

  • A “Get notifications” button, the browser’s permission prompt, and a stored subscription
  • A test send from wp-admin that shows up as a notification and opens the right page
  • Subscriptions the push service says are gone, deleted on the next send
  • Edge is built on Chrome’s engine, so one round of testing covers both
Next

Firefox, then Safari on the Mac

  • Firefox on desktop
  • Safari 16 or newer on macOS 13 or newer, which only allows the permission prompt inside a click
Then

Chrome on Android

  • Mostly the same as desktop Chrome
  • Large post images show in the notification on Android
After that

iPhone and iPad, via the Home Screen

  • iOS and iPadOS 16.4 or newer allow web push only from a site added to the Home Screen
  • An optional web app manifest, and an “Add to Home Screen to get alerts” hint in place of the prompt

Along the way, in this order: the send queue, editor panel and reports; the subscribe prompt and welcome notification; then the tools for switching from a hosted service.

Coming from a hosted push service?

Switch without asking readers again

Notification permission belongs to your site’s address, not to the vendor. If your subscriptions already live on your own domain, a returning reader who said yes before can be moved to Chirpush with no new prompt. Planned for OneSignal and PushEngage first, with room to recognise others.

1

Collect quietly

Run Chirpush in shadow mode for a few weeks beside your current service, which keeps sending as before. Each time a reader who already allowed notifications visits, Chirpush makes its own subscription for them: no prompt, no welcome message.

2

Switch over in a day

Turn off the old service’s plugin and remove any of its code added by hand, then turn on Chirpush’s prompt and editor panel. Only one system sends at a time, so nobody gets every push twice.

3

Tidy up as readers return

On later visits, Chirpush unsubscribes the old service and removes its worker from each reader’s browser. It only touches workers it recognises.

What can’t be moved

  • Readers who don’t come back. Each old subscription is tied to the vendor’s own signing key, so it can’t be copied. A reader is moved on their next visit, and readers who never visit again stay behind.
  • Subscriptions on the vendor’s address. If your service collected subscribers on its own subdomain rather than yours, the permission belongs to that subdomain. Those readers see your prompt again, like new visitors.
Who made it

Built by Orchard Grove Media

Chirpush comes from Orchard Grove Media, the studio of Ted Slater. It was built for national news publishers paying a hosted service every month for something WordPress and the browsers can do on their own: keep a list of subscribers and send to it. Chirpush moves the list and the sending back onto the publisher’s own site, one copy per site, with nothing in between.

Orchard Grove Media is a boutique studio that has been building the web since 1994 — three decades of designing, running and rescuing websites, these days for national news publishers serving millions of pageviews a day. Every plugin we publish runs on those sites first, and is maintained for years afterward rather than abandoned after launch.

It’s free and open source, in the same spirit as our other plugins, like SleekSearch and Heirloom SEO: do the essential work exactly right, stay fast, and stay out of the way.

Questions

Frequently asked

Is it really free?
Yes — free and open source under the GPL-2.0 license. No paid tier, no accounts, no telemetry. The browsers’ push services deliver notifications at no charge, so there’s nothing to pay per subscriber or per send.
When can I use it?
Not yet. Chirpush is in development, starting with Chrome and Edge on desktop; the status section above shows the order. The first download will appear on this page, with its changelog.
Is there a Chirpush server in the middle?
No. Each site runs its own copy, with its own keys and its own subscriber list. There’s nothing for us to host, and a reader’s browser talks only to your site and its own push service.
Which browsers will it reach?
Chrome, Edge, Firefox, Chrome on Android, and Safari 16 or newer on the Mac all use the same Web Push standard. On iPhone and iPad (iOS 16.4 or newer), web push works only for a site added to the Home Screen, so Chirpush will offer an optional web app manifest and a hint for that.
What does it add to my pages?
One small script, loaded with defer, and a short settings object. Once a reader has decided (subscribed or blocked), the script does nothing more except a once-a-day “still here” ping from subscribed browsers. Sending never happens during a page request, and the page stays safe to cache.
How does it send to a large list?
Through a queue. A send is one database row, not one row per subscriber. Real server cron works through the subscribers in batches of a few hundred, many at a time. If your host has no server cron, WordPress’s own cron runs the queue instead, more slowly, and Chirpush tells you so.
What do I need to run it?
WordPress 6.6 or newer, PHP 8.1 or newer, and HTTPS (browsers only allow push on secure sites). Real server cron is recommended for large lists. No API keys and no external accounts.
What does it store about readers?
One row per subscribed browser: the push service address, the browser’s two public keys, when it subscribed and when it was last seen. No cookies, no user accounts, no IP addresses. A push address still identifies a browser, so the privacy-policy text Chirpush suggests says so.
What if I lose my site’s key?
Every subscription is tied to your site’s signing key. Lose or change it and the existing subscriptions stop working, so keep it backed up. Chirpush never shows the private key or loads it on every page, and it recommends keeping it in wp-config.php on production.
Can I script it?
Yes, with WP-CLI: wp chirpush status, wp chirpush send <post-id>, wp chirpush queue run (what cron calls) and wp chirpush subscribers prune.
What doesn’t it do?
The first release leaves out segments, journeys, A/B tests, time-zone delivery, email, SMS and native app push. Most sites never use them. They’ll be considered if editors ask.
Actively developed

Changelog

Every release, newest first.

No releases yet. The first version will be listed here.

Get in touch

Questions or feedback?

Want to hear when it’s ready, or thinking about leaving a hosted push service? I’d genuinely like to hear from you.

Your readers. Your list. Your site.

Free and open source. The first release is on its way, and this is where you’ll download it.

Coming soon See where it stands

When it’s out: Plugins → Add New → Upload the ZIP → activate → add the button or turn on the prompt.

In development: no release yet.