Finb/Bark
Bark is an iOS App which allows you to push custom notifications to your iPhone
Healthy across all four use cases
Permissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 3w ago
- ✓4 active contributors
- ✓MIT licensed
Show 4 more →Show less
- ✓CI configured
- ✓Tests present
- ⚠Small team — 4 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 95% of recent commits
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/finb/bark)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/finb/bark on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: Finb/Bark
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/Finb/Bark shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across all four use cases
- Last commit 3w ago
- 4 active contributors
- MIT licensed
- CI configured
- Tests present
- ⚠ Small team — 4 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 95% of recent commits
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live Finb/Bark
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/Finb/Bark.
What it runs against: a local clone of Finb/Bark — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in Finb/Bark | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | Last commit ≤ 54 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of Finb/Bark. If you don't
# have one yet, run these first:
#
# git clone https://github.com/Finb/Bark.git
# cd Bark
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of Finb/Bark and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "Finb/Bark(\\.git)?\\b" \\
&& ok "origin remote is Finb/Bark" \\
|| miss "origin remote is not Finb/Bark (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift — was MIT at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 54 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~24d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/Finb/Bark"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Bark is an iOS app that receives custom push notifications via HTTP requests to a self-hosted or public API endpoint (api.day.app). It leverages Apple Push Notification (APNs) service to deliver notifications with advanced features like custom icons, sounds, grouping, time-sensitive/critical alert levels, and optional end-to-end encryption—all without draining device battery. Users generate a unique API key from the app and send GET/POST requests to receive instant notifications. Standard iOS app monorepo structure: Bark/ contains the main app target with AppDelegate.swift, Assets.xcassets (color system, app icons), and domain logic; app extensions in separate scheme targets (NotificationContentExtension, NotificationServiceExtension) for handling rich notifications; Xcode workspace coordinates the app and extensions; CI workflows in .github/workflows/ automate testing and TestFlight deployment.
👥Who it's for
iOS users who need a lightweight, self-hosted notification delivery system (developers testing integrations, system administrators monitoring services, users wanting privacy-first alerts). Also appeals to developers integrating Bark into automation scripts, home automation systems, or monitoring dashboards who want Apple-native notifications without building their own APNs infrastructure.
🌱Maturity & risk
Active and production-ready. The app is published on the App Store (id 1403753865), has structured CI/CD workflows (testflight.yaml, tests.yaml, deploy-docs.yaml in .github/workflows/), organized Xcode projects with multiple schemes (Bark, NotificationContentExtension, NotificationServiceExtension), and comprehensive documentation at bark.day.app. Likely maintained by a small team given the single GitHub organization and organized project structure.
Low risk for a mature notification app. The 401KB of Swift code is contained in a well-structured Xcode workspace with clear app extensions (NotificationServiceExtension, NotificationContentExtension). Primary risks: (1) dependency on Apple's APNs ecosystem—any APNs service disruption breaks the entire feature, (2) single public API endpoint (api.day.app) creates a point of failure unless users self-host, (3) encryption feature (ciphertext parameter) requires careful cryptographic implementation review. No visible open issue/PR backlog in provided data, so maintenance status unclear beyond CI presence.
Active areas of work
Active CI/CD pipeline visible: testflight.yaml handles automated beta builds, tests.yaml runs automated test suite, deploy-docs.yaml maintains documentation at bark.day.app. The workspace has Package.resolved (Swift Package Manager dependencies), suggesting recent dependency management updates. No specific PR/issue data provided, so recent feature commits are not visible in file list alone.
🚀Get running
Clone and open in Xcode:
git clone https://github.com/Finb/Bark.git
cd Bark
open Bark.xcworkspace
Then select the 'Bark' scheme in Xcode and build/run on simulator or device. The app requires iOS 13+ and Xcode 12+ for Swift Package Manager support (visible from Package.resolved).
Daily commands: In Xcode: (1) Open Bark.xcworkspace, (2) Select 'Bark' scheme from the scheme dropdown, (3) Select simulator or connected device, (4) Press Cmd+R to build and run. For extensions testing, switch to NotificationServiceExtension or NotificationContentExtension schemes. No CLI tooling visible—development is exclusively Xcode-based.
🗺️Map of the codebase
- Bark/AppDelegate.swift: Core app lifecycle, handles remote notification callbacks and passes received payloads to Realm storage
- Bark/AppDelegate+Realm.swift: Realm database initialization and notification persistence layer—critical for storing and retrieving push history
- NotificationServiceExtension/: App extension target that processes incoming APNs payloads (decryption, sound playback, grouping logic) before notification display
- NotificationContentExtension/: App extension that renders rich/custom notification UI (icons, custom layouts) when user expands notification
- .github/workflows/testflight.yaml: Automates beta distribution; shows build pipeline and code signing setup required for APNs
- Bark.xcworkspace/: Workspace coordinates app and extension targets; modifying schemes here affects how builds are orchestrated
- Bark/Assets.xcassets/Colors/: Centralized color system (background, text, blue, grey variants) used across UI—modify for theme changes
🛠️How to make changes
Start here for common changes:
- Notification handling logic:
Bark/AppDelegate.swiftandNotificationServiceExtension/for push receipt and processing - UI/UX changes:
Bark/Assets.xcassets/Colors/for theme tweaks; main views likely inBark/(not visible in file list, but standard structure) - Notification grouping/storage:
Bark/AppDelegate+Realm.swiftmanages Realm database persistence - API parameters: Review README for supported URL parameters (url, group, icon, sound, call, ciphertext, level), then trace to handler logic in app delegate or extensions
- Rich notification UI:
NotificationContentExtension/scheme targets the custom notification UI layer
🪤Traps & gotchas
(1) APNs certificate provisioning: building for physical device requires valid Apple Developer account with APNs capability enabled in the provisioning profile—simulator mode may work without it but real notifications won't arrive. (2) App extension targets (NotificationServiceExtension, NotificationContentExtension) must be signed with the same team ID as the main app, or notification extension will silently fail to load. (3) Realm database: AppDelegate+Realm.swift initializes a shared instance; if corrupted, notifications may not persist—consider testing migration paths when schema changes. (4) Custom notification sound must be in supported formats (m4a, wav, aiff) under 30 seconds per Apple docs; unsupported formats silently fail. (5) Encryption feature (ciphertext parameter) requires the backend server to implement the matching cipher—key management not visible in provided files; check backend repo for crypto implementation.
💡Concepts to learn
- Apple Push Notification (APNs) service — Bark's entire value proposition depends on APNs—you must understand APNs certificate/key provisioning, payload format, and delivery guarantees to debug notification failures or extend Bark
- App Extensions (iOS) — Bark uses NotificationServiceExtension (process payloads server-side before display) and NotificationContentExtension (custom UI for expanded notifications)—these are distinct targets with separate code signing and runtime lifecycles, not part of the main app
- Realm mobile database — Bark persists all received notifications in Realm (AppDelegate+Realm.swift)—you need to understand Realm schemas, migrations, and query patterns to modify notification storage or add filtering features
- REST API endpoint design (URL path parameters) — Bark's core UX is the URL structure (/:key/:title/:body, with optional query params like ?icon=, ?group=)—understanding RESTful URL design and parameter parsing is essential for extending the API or understanding the backend
- End-to-end encryption (ciphertext parameter) — Bark supports encrypted push notifications (ciphertext parameter) for privacy—if modifying or auditing encryption, you must understand symmetric/asymmetric crypto, key derivation, and padding schemes (implementation details not visible in this iOS target)
- Notification grouping and threading — Bark's 'group' parameter (e.g., ?group=groupName) allows users to organize notifications—iOS notification threading requires threadIdentifier matching and Realm queries to fetch grouped notifications
🔗Related repos
gotify/server— Alternative self-hosted push notification server (web/mobile agnostic) that Bark users may want to evaluate for privacy-first deploymentsntfy-sh/ntfy— Lightweight, open-source pub/sub notification service with iOS app support—direct competitor solving the same 'send HTTP to get iOS notification' problemFinb/Bark-Server— Official backend server for Bark (not in file list but assumed to exist)—essential companion repo for self-hosting Bark notificationsapple/swift-coredata-persistence— Apple's CoreData patterns; Bark uses Realm but developers may want to understand iOS persistence layer best practicesonmyway133/PushNotifications— Comprehensive APNs guide and examples in Swift—reference for understanding how Bark integrates with Apple's push notification system
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add unit tests for NotificationServiceExtension and NotificationContentExtension
The repo has .github/workflows/tests.yaml indicating a test infrastructure exists, but there are no visible test files for the two notification extensions (NotificationServiceExtension.xcscheme and NotificationContentExtension.xcscheme). These extensions are critical for notification handling, rich media, and custom UI. Adding tests would improve reliability and prevent regressions in core notification features.
- [ ] Create NotificationServiceExtensionTests target in Bark.xcodeproj
- [ ] Create NotificationContentExtensionTests target in Bark.xcodeproj
- [ ] Add unit tests covering notification decryption (if applicable), media attachment handling, and custom notification UI rendering
- [ ] Update
.github/workflows/tests.yamlto run extension tests alongside main app tests - [ ] Document test setup in a TESTING.md file for contributors
Add GitHub Action workflow to validate asset catalog integrity and detect missing localizations
The repo contains extensive Assets.xcassets with 30+ color definitions and multiple image sets, but there's no automated validation. A new workflow could detect duplicate color definitions, missing @2x/@3x variants for image assets, and verify that all UI text strings have corresponding localization files. This prevents runtime crashes from missing assets.
- [ ] Create
.github/workflows/asset-validation.yaml - [ ] Add script to validate imageset completeness (all @2x/@3x variants present)
- [ ] Add script to detect orphaned or duplicate color definitions in Bark/Assets.xcassets/Colors/
- [ ] Integrate SwiftGen or similar to validate color/image asset references against code usage
- [ ] Run on pull requests that modify files under
Bark/Assets.xcassets/
Create Architecture documentation with service layer overview
The file structure shows AppDelegate+Realm.swift and AppDelegate.swift, suggesting Realm database integration and complex initialization logic, but there's no architecture documentation. New contributors cannot understand the service layer design, data flow, or extension communication patterns. A ARCHITECTURE.md would explain the app's layering, how notifications flow through extensions, and Realm data models.
- [ ] Create docs/ARCHITECTURE.md explaining the main app, NotificationServiceExtension, and NotificationContentExtension communication
- [ ] Document Realm schema and data models used in AppDelegate+Realm.swift
- [ ] Add diagrams showing notification push flow from server → APNs → extensions → UI
- [ ] Document key classes in Bark/ directory with their responsibilities
- [ ] Include guidance on where to add new features (main app vs. service extension vs. content extension)
🌿Good first issues
- Add unit tests for the Realm persistence layer in AppDelegate+Realm.swift—no test files visible in the file list, so this target likely has zero coverage. Start by testing notification creation, retrieval by group, and deletion.
- Document the self-hosted server setup in the README (currently only api.day.app is referenced)—add a 'Self-Hosting' section with Docker/config examples, as users wanting privacy will need this but it's not explained in the repo.
- Add support for custom badge icons via a new 'badge' URL parameter (similar to 'icon' and 'sound')—requires changes to both the API parameter parsing (README) and NotificationContentExtension to display custom badge images on the notification.
⭐Top contributors
Click to expand
Top contributors
- @Finb — 95 commits
- @sylingd — 3 commits
- @sunvc — 1 commits
- @guanguans — 1 commits
📝Recent commits
Click to expand
Recent commits
6a2997a— 升级 actions/upload-artifact (Finb)0fc8a8d— 异步同步数据到Widget,减少APP启动时间 (Finb)ce3eabe— MessageListSkeletonView 使用 safeAreaLayoutGuide,优化在iPad下的显示效果 (Finb)80b491b— 保存widget数据时限制长度 (Finb)1cdf194— 升级 actions/checkout 和 actions/cache (Finb)61a80a4— 简化过渡动画效果 (Finb)f1e7dd1— 调整过渡动画 (Finb)85ffa12— 消息列表添加异步加载过渡动画 (Finb)eef4e38— 异步加载消息列表数据, 防止阻塞APP启动 (Finb)b68167b— 小组件可以选择查看指定分组的最新消息 (Finb)
🔒Security observations
The Bark iOS application shows a reasonable security baseline for a notification delivery app, but several areas require attention. The main concerns are: (1) Potential lack of encryption for Realm database storing sensitive data, (2) No visible implementation of certificate pinning for secure communications, (3) Insufficient input validation mechanisms evident in the codebase structure, and (4) Incomplete visibility into third-party dependencies. The project appears to follow iOS development best practices with proper use of extensions and app architecture, but security-critical components like secure storage, secure communication, and input validation should be explicitly verified and hardened. Regular security audits, dependency scanning, and penetration testing are recommended before production deployment.
- Medium · Incomplete Dependency Visibility —
Bark.xcworkspace/xcshareddata/swiftpm/Package.resolved. The Package.resolved file exists but the actual dependency specifications are not provided in the analysis context. This makes it difficult to assess whether the project uses vulnerable third-party libraries. Swift Package Manager dependencies should be audited for known vulnerabilities. Fix: Regularly audit dependencies using tools like SwiftSec or OWASP Dependency-Check. Enable automated dependency scanning in CI/CD pipelines and subscribe to security advisories for Swift packages. - Medium · Potential Insecure Data Storage in Realm Database —
Bark/AppDelegate+Realm.swift. The codebase uses Realm database (evidenced by AppDelegate+Realm.swift). If the database is not properly encrypted and handles sensitive notification data (including device tokens or user credentials), this could expose sensitive information at rest. Fix: Ensure Realm database is configured with encryption enabled. Use Realm's encryptionKey property to encrypt the database file. Never store plain-text credentials or device tokens without encryption. - Medium · Lack of Certificate Pinning —
AppDelegate.swift (inferred). As a notification delivery app, Bark communicates with remote servers and APNs. Without visible implementation of certificate pinning or public key pinning, the application is vulnerable to MITM attacks if the user's device is compromised or on a malicious network. Fix: Implement certificate pinning for all remote API communications. Use libraries like TrustKit or implement custom URLSessionDelegate with certificate validation. Pin both the production APNs certificates and backend server certificates. - Medium · No Visible Input Validation Framework —
Bark/ (general codebase). The README indicates users can 'modify the content' of notifications. Without visible input validation, sanitization, or rate-limiting logic in the file structure, there's a risk of injection attacks or abuse (e.g., XSS-like payloads in notification content if synchronized with web platforms, or denial of service through rapid requests). Fix: Implement comprehensive input validation for all user-provided content. Validate notification payloads on both client and server side. Implement rate limiting to prevent abuse. Sanitize any content that will be displayed or transmitted. - Low · Build Artifacts in Version Control —
Bark/Assets.xcassets/. The file structure includes compiled/generated files (AppIcon.appiconset with binary PNG files, .xcodeproj metadata). While not directly a security vulnerability, this can increase repository size and make it harder to audit actual source code changes. Fix: Review .gitignore to ensure build artifacts, derived data, and Xcode-generated files are properly excluded. Consider using git-lfs for large binary assets if they must be version-controlled. - Low · Multiple Build Targets with Shared Code —
Bark.xcodeproj/xcshareddata/xcschemes/. The project contains multiple schemes (Bark.xcscheme, NotificationContentExtension.xcscheme, NotificationServiceExtension.xcscheme) which suggests app extensions. Code sharing between targets without proper sandboxing validation could lead to privilege escalation or unintended data access across extension boundaries. Fix: Ensure each extension (content and service) operates with minimal required permissions. Validate data passing between the main app and extensions. Use App Groups carefully and only share necessary data. Review extension entitlements to ensure least privilege.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.