Cloudsteading
Bark Worker test push notifications, supplied by the upstream repository

Bark Worker

Send API-triggered notifications to Bark on your iPhone from a Cloudflare Worker.

Bark Worker is a self-hosted Pushover alternative built on Cloudflare (D1, Workers). Free tier eligible within limits. Inspect the source and license in the linked repository.

Source & license

Upstream license: GPL-3.0

License TL;DR

You can run it and change it privately. If you give others copies of the program or a modified version, provide the corresponding source under the GPL. You can charge money. Running it as a web service alone doesn’t trigger that source-sharing requirement.

Explain GPL v3 in plain English →

Summary of the main license. Separate packages and assets can have different terms.

Inspect repository ↗Read this project’s actual license ↗

Repository owner

@cwxiaos

See the upstream repository for the original creator and contributors.

Maintain this project? Maintainer verification →

Cloudflare hosting

Free tier eligible within limits

The documented Bark Worker deployment can use Cloudflare Free allowances for a small workload under the request, CPU and service-specific quotas below. This is conditional eligibility, not a measured zero-cost deployment; optional features, domains and external providers can add costs.

Hosting requirements
  • Workers Free allows 100,000 requests per day shared across the account and 10 ms CPU per invocation; measure CPU-heavy authentication, parsing and rendering before assuming it fits.
  • Keep aggregate D1 use below 5 million rows read/day, 100,000 rows written/day and 5 GB total storage; a request can touch many rows.
  • Use a small personal or team workload; domain registration and optional third-party providers are separate costs. Provision your own IDs, secrets and migrations.
Check current pricing ↗
Sources checked 01/10/2026

Repository snapshot: a243fe5. Hosting eligibility reflects the deployment documentation and listed assumptions.

  • pushover ↗

    Bark-Worker is a [Bark-Server](https://github.com/Finb/bark-server) implenmention on Cloudflare Worker. It provides privacy-aware users with a cheap and private bark backend.

  • workers ↗

    { "name": "bark-worker", "main": "main.js", "compatibility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" }

  • d1 ↗

    bility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" } ], "keep_vars": true, "vars": { "ALLOW_NEW_DEVICE": "true", "ALLOW_QUERY_NUMS": "true", "ROOT_PATH": "/", // "BASIC_AUTH": "" } }

  • free-tier-eligible ↗

    { "name": "bark-worker", "main": "main.js", "compatibility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" }

  • free-tier-eligible ↗

    bility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" } ], "keep_vars": true, "vars": { "ALLOW_NEW_DEVICE": "true", "ALLOW_QUERY_NUMS": "true", "ROOT_PATH": "/", // "BASIC_AUTH": "" } }

  • free-tier-eligible ↗

    up>1, 2, 3, 4</sup> | Duration | CPU time | | --- | --- | --- | --- | | **Free** | 100,000 per day | No charge for duration | 10 milliseconds of CPU time per invocation | | **Standard** | 10 million included per month <br> +$0.30 per additional million | No charge or limit for duration | 30 million CPU milliseconds included per month<br> +$0.02 per additional million CPU milliseconds<br><br> Max of [5 minutes of CPU time](https://developers.cloudflare.com/workers/platform/limits/#account-plan-limits) per invocation (default: 30 seconds)<br> Max of 15 minutes of CPU time per [Cron Trigger](https://developers.cloudflare.com/workers/configuration/cron-triggers/) or [Queue Consumer](https://developers.cloudflare.co

  • free-tier-eligible ↗

    oudflare.com/workers/platform/pricing/#workers) | | --- | --- | --- | | Rows read | 5 million / day | First 25 billion / month included + $0.001 / million rows | | Rows written | 100,000 / day | First 50 million / month included + $1.00 / million rows | | Storage (per GB stored) | 5 GB (total) | First 5 GB included + $0.75 / GB-mo | Track your D1 usage To accurately track your usage, use the [meta object](https://developers.cloudflare.com/d1/worker-api/return-object/), [GraphQL Analytics API](https://developers.cloudflare.com/d1/observability/metrics-analytics/#query-via-the-graphql-api), or the [Cloudflare dashboard ↗︎](https://dash.cloudflare.com/?to=/:account/workers/d1/). Select your D1 database, then vie

  • GPL-3.0 ↗

    GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Pub

  • architecture ↗

    { "name": "bark-worker", "main": "main.js", "compatibility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" }

  • architecture ↗

    bility_date": "2026-03-01", "compatibility_flags": [ "nodejs_compat" ], "observability": { "enabled": true }, "d1_databases": [ { "binding": "database", "database_name": "database-bark", "database_id": "<unique-ID-for-your-database>" } ], "keep_vars": true, "vars": { "ALLOW_NEW_DEVICE": "true", "ALLOW_QUERY_NUMS": "true", "ROOT_PATH": "/", // "BASIC_AUTH": "" } }

Upstream screenshot · cwxiaos/bark-worker repository contributors ↗. Depicts the upstream project. We have not deployed and tested a fresh installation here.

What it can replace

Compare the workflow you need. These mappings describe overlap; full feature parity requires a separate comparison.

Pushover logoPushover ↗

API-triggered mobile push notifications, delivered to the Bark iOS application; cross-platform clients and managed Pushover operations are excluded.

See supporting source ↗
external SaaS target
varies
→ D1 + Workers

How it works

The shape of Bark Worker on Cloudflare, and how it stacks up against the rented tools it replaces.

Architecture

Diagram of deployment declarations at the reviewed commit. Each app has its own entrypoint; declared resources do not prove runtime calls. Follow file and line sources below.

View upstream source ↗
Public interface
Configured entry points1
bark-worker
wrangler.jsonc
↓
App
bark-worker
entry
Cloudflare Workers
Entrypoint: main.js
↓

Configuration and workflow sources

Reviewed commit a243fe59b68b. Files were read as data; upstream applications and CI jobs were not executed.

Deployment configuration · 1 files
wrangler.jsonc ↗

Cloudflare Workers · compatibility 2026-03-01

bark-worker · default

Entrypoint: main.js

  • database → D1

Named environments are separate deployments. Bindings are shown only where declared. Configured routes are URL patterns, not verified application endpoints.

Runtime source · handlers, binding usage and workflow steps

Observed TypeScript/JavaScript declarations from Worker entrypoints and resolved relative imports. Calls and workflow steps may run conditionally; their listed order is not a proven end-to-end request flow. Router declarations may be mounted under a prefix or may not be registered. This shows code wiring, not a successful deployment or runtime test. Dynamic wiring, aliases and generated code may not resolve.

main.js ↗
  • L2 · fetch handler exported · calls handleRequest
  • L7 · handleRequest calls (conditional paths may differ): Boolean, ctx.waitUntil, db.cleanupExpiredSessions, pathname.replace, rootPath.replace, handler.register, handler.ping, handler.healthz, util.validateBasicAuth, handler.info, handler.mcp, realPathname.split, request.headers.get, contentType.includes, request.json, reduce, Object.keys, key.toLowerCase, request.formData, formData.forEach

Environment references: env.ALLOW_NEW_DEVICE · env.ALLOW_QUERY_NUMS · env.ROOT_PATH · env.BASIC_AUTH · env.database

Build and deployment pipeline · 1 GitHub Actions workflows

Repository CI declarations, separate from runtime request processing. Job dependencies and conditions are shown as written; long commands are shortened with an ellipsis; a workflow file does not prove a recent successful run.

Deploy · .github/workflows/deploy.yml ↗

Triggers: push, workflow_dispatch

Deploy · no job dependencies declared

  1. actions/checkout@v4actions/checkout@v4
  2. Setup Nodeactions/setup-node@v4
  3. Install wranglernpm install -g wrangler
  4. Verify Cloudflare API Tokenecho "Verifying Cloudflare API Token..." wrangler whoami
  5. Check and Create D1 Databaseset -x DB_LIST=$(wrangler d1 list --json) DB_ID=$(echo $DB_LIST | jq -r '.[] | select(.name == "database-bark") | .uuid') if [ -z "$DB_ID" ]; then CREATE_OUTPUT=$(wrangler d1 create database-bark) DB_ID=$(echo "$CREATE_OUTPUT" | sed -n 's/.*"database_id": "\([a-f0-9-]*\)".*/\1/p') else echo "Found existing database-bark database" fi echo "Database ID: $DB_ID" echo "DB_ID=$DB_ID" >> $GITHUB_ENV
  6. Update wrangler.tomlsed -i 's/"database_id": ".*"/"database_id": "'$DB_ID'"/' wrangler.json
  7. Deploy workercloudflare/wrangler-action@v3.14.1Wrangler command: deploy
package.json ↗
  • deploy: wrangler deploy
  • predeploy: npm run db:migrate:remote

Full upstream document by @cwxiaos · README.md · snapshot a243fe5

Bark-Worker

License: GPL v3

English | 中文文档

[!NOTE] KV Version will probably not support MCP due to limited quota, but if the MCP route can be optimized to some extent, there may have MCP support in KV version.

[!NOTE] Batch Push has the highest priority, if device_keys is specified and not empty, device_key will be ignored, in both V1 and V2 APIs.

Bark-Worker is a Bark-Server implenmention on Cloudflare Worker. It provides privacy-aware users with a cheap and private bark backend.

What is Bark?

Bark is an iOS App which allows you to push customed notifications to your iPhone.

[!NOTE] A domain is required if worker.dev is unavailable in your country/region

Features

  • Full Bark-Server APIs support
    • register
    • ping
    • healthz
    • info
    • push
  • Path based parameters resolve
  • Easy to deploy, Cheap to use and Convenient to manage

Setup

[!NOTE] Select one, D1 or KV Version are both available. D1 Version is recommended for its higher usage than KV Version

Follow the instructions for D1 Version

[!NOTE] The Cloudflare API Token must have D1 permission.

Deploy to Cloudflare Workers

Or manually deploy

Refer to Setup Guide

Cloudflare D1 Version

Create a Worker and a D1 Database, bind D1 database to Worker with name database

Cloudflare KV Version

Create a Worker and a KV Storage, bind KV Storage to Worker with name database

Tips

  • Multi Device Key to one Device
  • Device Key Alias
  • D1 Database Manage in Console
  • etc.

Refer to Tips

Frequently asked about Bark Worker

What is Bark Worker?+

Bark Worker is a self-hosted Pushover alternative built on the Cloudflare developer platform. Send API-triggered notifications to Bark on your iPhone from a Cloudflare Worker.

What does Bark Worker replace?+

Bark Worker is listed as an alternative to Pushover. Compare the features and tradeoffs before migrating.

What Cloudflare primitives does Bark Worker use?+

Bark Worker is built on D1, Workers.

How much does Bark Worker cost to run?+

The documented Bark Worker deployment can use Cloudflare Free allowances for a small workload under the request, CPU and service-specific quotas below. This is conditional eligibility, not a measured zero-cost deployment; optional features, domains and external providers can add costs. Workers Free allows 100,000 requests per day shared across the account and 10 ms CPU per invocation; measure CPU-heavy authentication, parsing and rendering before assuming it fits. Keep aggregate D1 use below 5 million rows read/day, 100,000 rows written/day and 5 GB total storage; a request can touch many rows. Use a small personal or team workload; domain registration and optional third-party providers are separate costs. Provision your own IDs, secrets and migrations. Check current Cloudflare pricing before deploying.

Is Bark Worker open source?+

The upstream repository declares the GPL-3.0 license. Read its terms at https://raw.githubusercontent.com/cwxiaos/bark-worker/a243fe59b68bfc5c5ce4b7386a674b9d76aaf0e8/LICENSE. Source code and contributor credit are available at https://github.com/cwxiaos/bark-worker.

Discussion · 0

sign in to comment →
No comments yet — be the first.