permissionlesstech/bitchatPublic

bluetooth mesh chat, IRC vibes

AI summary: A decentralized, peer-to-peer messaging app using local Bluetooth mesh and global Nostr networks.

Stars
36.3K
+21 today
Forks
5.7K
Watchers
304
Open issues
28
Open PRs
89
Contributors
~59
Commits
1.1K
Branches
79

SwiftUnlicenseCreated Jul 4, 2025Last push 6d agoLatest release v1.7.1+46 stars this week+207 this month

Quick answers

What is bitchat?
A decentralized, peer-to-peer messaging app using local Bluetooth mesh and global Nostr networks.
What does bitchat do?
Bitchat is a mobile messaging application built entirely on decentralized protocols, eliminating the need for accounts, phone numbers, or central servers. It employs a dual-transport architecture: utilizing Bluetooth Low Energy to create local mesh networks for offline communication, and the Nostr protocol to route messages globally over the internet. The app focuses on privacy and resilience, ensuring users can communicate during internet outages or in crowded environments like festivals. It provides verifiable source builds to guarantee that the application running on the device matches the audited open-source repository.
Who is bitchat for?
Privacy advocates, activists, and users operating in low-connectivity environments. It is ideal for anyone seeking a resilient, completely decentralized alternative to traditional messaging platforms.
How do I get started with bitchat?
Download from the App Store or Play Store
How popular is bitchat on GitHub?
permissionlesstech/bitchat has 36,318 stars and 5,744 forks on GitHub, and gained 46 stars in the last 7 days.
What license does bitchat use?
permissionlesstech/bitchat is released under the Unlicense license.

Star history

since Jul 27, 2026
010K20K30KJul 2026Aug 2026Sep 2026Oct 2026
36.3K stars as of Oct 3, 2026. Measured daily since Jul 27, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-28: 1 commit2025-09-29: 1 commit2025-09-30: 8 commits2025-10-01: 6 commits2025-10-02: 7 commits2025-10-03: 1 commit2025-10-04: 0 commits2025-10-05: 6 commits2025-10-06: 11 commits2025-10-07: 9 commits2025-10-08: 0 commits2025-10-09: 2 commits2025-10-10: 0 commits2025-10-11: 2 commits2025-10-12: 3 commits2025-10-13: 0 commits2025-10-14: 9 commits2025-10-15: 2 commits2025-10-16: 0 commits2025-10-17: 3 commits2025-10-18: 3 commits2025-10-19: 14 commits2025-10-20: 3 commits2025-10-21: 2 commits2025-10-22: 2 commits2025-10-23: 2 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 1 commit2025-10-28: 3 commits2025-10-29: 2 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 1 commit2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 10 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 10 commits2025-11-25: 10 commits2025-11-26: 10 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 4 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 7 commits2026-01-05: 1 commit2026-01-06: 0 commits2026-01-07: 3 commits2026-01-08: 1 commit2026-01-09: 2 commits2026-01-10: 1 commit2026-01-11: 0 commits2026-01-12: 29 commits2026-01-13: 2 commits2026-01-14: 5 commits2026-01-15: 2 commits2026-01-16: 1 commit2026-01-17: 2 commits2026-01-18: 1 commit2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 1 commit2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 1 commit2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 1 commit2026-02-02: 2 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 1 commit2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 1 commit2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 1 commit2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 1 commit2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 1 commit2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 9 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 1 commit2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 1 commit2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 1 commit2026-03-30: 1 commit2026-03-31: 1 commit2026-04-01: 0 commits2026-04-02: 2 commits2026-04-03: 3 commits2026-04-04: 1 commit2026-04-05: 2 commits2026-04-06: 1 commit2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 1 commit2026-04-11: 0 commits2026-04-12: 1 commit2026-04-13: 0 commits2026-04-14: 1 commit2026-04-15: 1 commit2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 1 commit2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 1 commit2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 1 commit2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 1 commit2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 1 commit2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 1 commit2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 1 commit2026-05-31: 5 commits2026-06-01: 1 commit2026-06-02: 1 commit2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 1 commit2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 12 commits2026-06-11: 21 commits2026-06-12: 12 commits2026-06-13: 0 commits2026-06-14: 1 commit2026-06-15: 0 commits2026-06-16: 1 commit2026-06-17: 1 commit2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 1 commit2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 1 commit2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 4 commits2026-07-06: 13 commits2026-07-07: 24 commits2026-07-08: 16 commits2026-07-09: 7 commits2026-07-10: 2 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 2 commits2026-07-26: 32 commits2026-07-27: 0 commits2026-07-28: 1 commit2026-07-29: 5 commits2026-07-30: 14 commits2026-07-31: 6 commits2026-08-01: 8 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 2 commits2026-08-09: 2 commits2026-08-10: 10 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 4 commits2026-09-24: 11 commits2026-09-25: 0 commits2026-09-26: 0 commits
470 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    36,318 stars

  • Permissive license

    Unlicense

  • Continuous integration

    Automated checks passing

  • Repeat trending

    25 trending appearances

What bitchat does

Bitchat is a mobile messaging application built entirely on decentralized protocols, eliminating the need for accounts, phone numbers, or central servers. It employs a dual-transport architecture: utilizing Bluetooth Low Energy to create local mesh networks for offline communication, and the Nostr protocol to route messages globally over the internet. The app focuses on privacy and resilience, ensuring users can communicate during internet outages or in crowded environments like festivals. It provides verifiable source builds to guarantee that the application running on the device matches the audited open-source repository.

Privacy advocates, activists, and users operating in low-connectivity environments. It is ideal for anyone seeking a resilient, completely decentralized alternative to traditional messaging platforms.

  • Bluetooth Mesh Networking: enables off-grid, peer-to-peer communication between nearby devices without internet access.
  • Nostr Protocol Integration: routes messages globally across decentralized relays when an internet connection is available.
  • No-Account Architecture: completely bypasses traditional sign-ups, requiring no phone numbers or email addresses.
  • End-to-End Encryption: secures all communications natively across both the local mesh and global Nostr transports.
  • Verifiable Builds: provides strict source hash manifests so users can cryptographically verify their App Store downloads.

Where teams use it

Off-Grid Communication

Festival attendees or hikers chatting in remote areas without cellular coverage via the local Bluetooth mesh.

Censorship-Resistant Messaging

Activists communicating over the decentralized Nostr network to avoid state-sponsored internet blocks or surveillance.

Anonymous Group Chats

Privacy advocates creating temporary, identity-free side group chats without linking personal phone numbers.

Disaster Recovery

Communities coordinating emergency response efforts when local cell towers and ISPs are down.

Getting started: Download from the App Store or Play Store

README

main branch
icon_128x128@2x

bitchat

A decentralized peer-to-peer messaging app with dual transport architecture: local Bluetooth mesh networks for offline communication and internet-based Nostr protocol for global reach. No accounts, no phone numbers, no central servers. It's the side-groupchat.

bitchat.free

📲 App Store

📲 Play Store

Getting a copy you can trust

Install from the App Store, or build from source you have verified. A compiled build from anywhere else cannot be verified — see Verifying bitchat for how to check source against the per-release hash manifest, and for what to do if that is the only build you can get.

This matters more than it usually would: this repository has been the target of takedown demands, and when a repository or releases page disappears, mirrors appear that nobody can check.

License

This project is released into the public domain. See the LICENSE file for details.

Features

  • Dual Transport Architecture: Bluetooth mesh for offline + Nostr protocol for internet-based messaging
  • Location-Based Channels: Geographic chat rooms using geohash coordinates over global Nostr relays
  • Intelligent Message Routing: Automatically chooses best transport (Bluetooth → Nostr fallback)
  • Decentralized Mesh Network: Automatic peer discovery and multi-hop message relay over Bluetooth LE
  • Privacy First: No accounts, no phone numbers, no servers. Note that the mesh does use a persistent per-device identifier derived from your identity key — see the whitepaper on identity and metadata for what a nearby radio can observe
  • Private Message End-to-End Encryption: Noise Protocol for mesh, BitChat private envelopes for Nostr fallback
  • IRC-Style Commands: Familiar /slap, /msg, /who style interface
  • Universal App: Native support for iOS and macOS
  • Emergency Wipe: Triple-tap to instantly clear all data
  • Performance Optimizations: LZ4 message compression, adaptive battery modes, and optimized networking

BitChat uses a hybrid messaging architecture with two complementary transport layers:

Bluetooth Mesh Network (Offline)

  • Local Communication: Direct peer-to-peer within Bluetooth range
  • Multi-hop Relay: Messages route through nearby devices (max 7 hops)
  • No Internet Required: Works completely offline in disaster scenarios
  • Noise Protocol Encryption: End-to-end encryption, with forward secrecy for live sessions (store-and-forward mail is sealed without it — see the whitepaper)
  • Binary Protocol: Compact packet format optimized for Bluetooth LE constraints
  • Automatic Discovery: Peer discovery and connection management
  • Adaptive Power: Battery-optimized duty cycling

Nostr Protocol (Internet)

  • Global Reach: Connect with users worldwide via internet relays
  • Location Channels: Geographic chat rooms using geohash coordinates
  • 440+ Relay Network: Distributed across the globe for reliability
  • BitChat Private Envelopes: App-specific encrypted private messages over Nostr relays
  • Ephemeral Keys: Fresh cryptographic identity per geohash area

BitChat's private-envelope format is proprietary and is not NIP-17, NIP-44, or NIP-59 compatible. It uses Nostr as a relay transport but only interoperates with BitChat clients: private payloads travel inside kind-1059 events whose v2:-prefixed content is a BitChat-specific XChaCha20-Poly1305 construction, not NIP-44 encryption.

Channel Types

mesh #bluetooth
  • Transport: Bluetooth Low Energy mesh network
  • Scope: Local devices within multi-hop range
  • Internet: Not required
  • Use Case: Offline communication, protests, disasters, remote areas
Location Channels (block #dr5rsj7, neighborhood #dr5rs, country #dr)
  • Transport: Nostr protocol over internet
  • Scope: Geographic areas defined by geohash precision
    • block (7 chars): City block level
    • neighborhood (6 chars): District/neighborhood
    • city (5 chars): City level
    • province (4 chars): State/province
    • region (2 chars): Country/large region
  • Internet: Required (connects to Nostr relays)
  • Use Case: Location-based community chat, local events, regional discussions

Direct Message Routing

Private messages use intelligent transport selection:

  1. Bluetooth First (preferred when available)

    • Direct connection with established Noise session
    • Fastest and most private option
  2. Nostr Fallback (when Bluetooth unavailable)

    • Uses recipient's Nostr public key
    • BitChat's app-specific private-envelope encryption
    • Routes through global relay network
  3. Smart Queuing (when neither available)

    • Messages queued until transport becomes available
    • Automatic delivery when connection established

For detailed protocol documentation, see the Technical Whitepaper.

Setup

Option 1: Using Xcode

open bitchat.xcodeproj

For a signed device build, create your ignored local configuration and replace the example team ID with your Apple Developer Team ID:

cp Configs/Local.xcconfig.example Configs/Local.xcconfig

Local.xcconfig.example derives unique app and App Group identifiers from that team ID. The entitlement files already reference $(APP_GROUP_ID), so tracked project or entitlement files do not need to be edited.

Useful command-line checks from the repository root:

# macOS Debug build without signing
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" \
  -configuration Debug CODE_SIGNING_ALLOWED=NO build

# Full SwiftPM test suite
swift test

# iOS simulator tests
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (iOS)" \
  -sdk iphonesimulator \
  -destination 'platform=iOS Simulator,name=iPhone 17' test

If iPhone 17 is unavailable, choose an installed simulator from:

xcodebuild -showdestinations -project bitchat.xcodeproj -scheme "bitchat (iOS)"

Option 2: Using just

brew install just
just check
just run

just build and just run use the current bitchat (macOS) scheme and keep Xcode output in the ignored .DerivedData/ directory. They never patch source, project, configuration, or entitlement files.

just clean removes only .DerivedData/ and .build/. It does not invoke Git or restore tracked files, so uncommitted work is preserved. just test runs the SwiftPM suite and just test-ios runs the iPhone 17 simulator suite.

Localization

  • App localizations live in bitchat/Localizable.xcstrings.
  • Share extension strings are separate in bitchatShareExtension/Localization/Localizable.xcstrings.
  • Prefer keys that describe intent (app_info.features.offline.title) and reuse existing ones where possible.
  • Run xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build to compile-check any localization updates.
View on GitHub

Recent activity

commits and pull requests

Releases and announcements

20 total
  1. v1.7.1v1.7.1Jul 31, 2026619 downloads

    bitchat 1.7.1 is a security and reliability release. Every change below was field-verified on devices before tagging. ### Security - **Noise sessions are bound to claimed peer identities**, and leave messages must be signed (#1432). A peer can no longer complete a handshake claiming someone else's ID and receive DMs encrypted for them. - **Private media is encrypted before BLE fragmentation** (#1434) — DM photos and voice notes no longer cross the mesh as plaintext; relays never see the bytes. - **Announce signing keys are TOFU-pinned** against mesh identity spoofing (#1349). Relayed public messages from a claimed sender are rejected until a verified announce is seen — fail closed. - **Identity keys are now device-bound (`ThisDeviceOnly`, never synchronized)** (#1431). They cannot be extracted via backup or cloud sync — and consequently an identity no longer survives migrating to a new phone or deleting and reinstalling the app. Existing installs migrate automatically on first unlock; nothing to do on upgrade. - Panic wipe is deterministic and complete (#1431), and what a locked or seized device reveals is reduced across the board (#1484, #1552 — media now carries an expl

  2. v1.7.0v1.7.0Jul 8, 2026

    ## What's Changed * Header: globe opens channel sheet; deterministic crowding cascade by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1400 * Fix press-and-hold mic dying instantly in private chats by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1405 * Live push-to-talk voice for DMs (streams while you talk, voice note as fallback) by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1403 * Public-mesh push-to-talk: signed live voice bursts in the mesh channel by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1406 * Heal peer-ID rotation: rebind link on verified announce, retire ghost peer by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1401 * Fix received DM images stuck as grey box: stamp incoming media delivered, reveal tap as Button by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1402 * Require signed sender for broadcast file transfers (#1406 follow-up) by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1407 * Dead-code cleanup: remove 277 unused declarations + 13 orphaned l10n keys; add Periphery CI by @jackjackbits in https://g

  3. v1.6.0v1.6.0Jul 7, 2026

    ## What's Changed * Single-source MARKETING_VERSION in the xcconfig by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1369 * Harden REQUEST_SYNC and stop gossip-sync re-send loops by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1371 * Expand store-and-forward: open couriers, spray-and-wait, persistent outbox, 6h public history by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1372 * Sync cleanups: normalize SyncTypeFlags, single announce-ID path by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1373 * Add capability negotiation bits to announce TLV by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1375 * docs: reconcile whitepaper and protocol docs with implementation by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1374 * Gate Tor/relay startup on network reachability (no more 'connecting to Tor' offline) by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1389 * NIP-13 proof-of-work for geohash channels: mine on send, relax rate limits for PoW senders by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1382

  4. 1.5.4v1.5.4Jul 6, 2026

    ## What's Changed * Fix security audit findings: 3 critical, 7 high by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1345 * CI: use Xcode-bundled Swift instead of a standalone toolchain by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1353 * Add SwiftLint as an advisory CI-only lint job (no Xcode plugin dependency) by @ecgang in https://github.com/permissionlesstech/bitchat/pull/1361 * Burn down SwiftLint advisory violations from 109 to 4 by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1362 * Fix slash-command suggestions that insert commands the processor rejects by @hotpixelgroup in https://github.com/permissionlesstech/bitchat/pull/1354 * Route command output to the conversation where the command was typed by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1363 * Make private-message delivery status legible and accessible by @hotpixelgroup in https://github.com/permissionlesstech/bitchat/pull/1356 * Give private DMs an unmistakable visual signature by @hotpixelgroup in https://github.com/permissionlesstech/bitchat/pull/1357 * Require confirmation before deleting a received image; labe

  5. v1.5.3v1.5.3Jun 12, 2026

    ## What's Changed * Fix launch crash: recursive dispatch_once between NostrRelayManager and NetworkActivationService by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/1343 **Full Changelog**: https://github.com/permissionlesstech/bitchat/compare/v1.5.2...v1.5.3

Code frequency

additions and deletions
+360K-360KWeek of 2025-10-05: +5,550 linesWeek of 2025-10-05: -5,226 linesWeek of 2025-10-12: +33,329 linesWeek of 2025-10-12: -28,993 linesWeek of 2025-10-19: +6,725 linesWeek of 2025-10-19: -5,244 linesWeek of 2025-10-26: +1,561 linesWeek of 2025-10-26: -773 linesWeek of 2025-11-02: +1 linesWeek of 2025-11-02: -1 linesWeek of 2025-11-09: +0 linesWeek of 2025-11-09: -0 linesWeek of 2025-11-16: +2,275 linesWeek of 2025-11-16: -1,886 linesWeek of 2025-11-23: +6,311 linesWeek of 2025-11-23: -3,326 linesWeek of 2025-11-30: +0 linesWeek of 2025-11-30: -0 linesWeek of 2025-12-07: +282 linesWeek of 2025-12-07: -111 linesWeek of 2025-12-14: +0 linesWeek of 2025-12-14: -0 linesWeek of 2025-12-21: +0 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +1,358 linesWeek of 2026-01-04: -135 linesWeek of 2026-01-11: +15,131 linesWeek of 2026-01-11: -360,040 linesWeek of 2026-01-18: +272 linesWeek of 2026-01-18: -269 linesWeek of 2026-01-25: +316 linesWeek of 2026-01-25: -295 linesWeek of 2026-02-01: +531 linesWeek of 2026-02-01: -360 linesWeek of 2026-02-08: +253 linesWeek of 2026-02-08: -225 linesWeek of 2026-02-15: +283 linesWeek of 2026-02-15: -250 linesWeek of 2026-02-22: +273 linesWeek of 2026-02-22: -283 linesWeek of 2026-03-01: +260 linesWeek of 2026-03-01: -274 linesWeek of 2026-03-08: +9,017 linesWeek of 2026-03-08: -751 linesWeek of 2026-03-15: +259 linesWeek of 2026-03-15: -270 linesWeek of 2026-03-22: +283 linesWeek of 2026-03-22: -261 linesWeek of 2026-03-29: +1,246 linesWeek of 2026-03-29: -1,078 linesWeek of 2026-04-05: +805 linesWeek of 2026-04-05: -772 linesWeek of 2026-04-12: +4,125 linesWeek of 2026-04-12: -3,549 linesWeek of 2026-04-19: +277 linesWeek of 2026-04-19: -272 linesWeek of 2026-04-26: +267 linesWeek of 2026-04-26: -277 linesWeek of 2026-05-03: +263 linesWeek of 2026-05-03: -266 linesWeek of 2026-05-10: +258 linesWeek of 2026-05-10: -267 linesWeek of 2026-05-17: +263 linesWeek of 2026-05-17: -259 linesWeek of 2026-05-24: +10,991 linesWeek of 2026-05-24: -6,450 linesWeek of 2026-05-31: +9,209 linesWeek of 2026-05-31: -3,073 linesWeek of 2026-06-07: +22,391 linesWeek of 2026-06-07: -7,184 linesWeek of 2026-06-14: +644 linesWeek of 2026-06-14: -407 linesWeek of 2026-06-21: +380 linesWeek of 2026-06-21: -378 linesWeek of 2026-06-28: +10 linesWeek of 2026-06-28: -5 linesWeek of 2026-07-05: +104,757 linesWeek of 2026-07-05: -31,172 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +3,753 linesWeek of 2026-07-19: -36 linesWeek of 2026-07-26: +48,778 linesWeek of 2026-07-26: -6,960 linesWeek of 2026-08-02: +103 linesWeek of 2026-08-02: -70 linesWeek of 2026-08-09: +19,127 linesWeek of 2026-08-09: -847 linesWeek of 2026-08-16: +0 linesWeek of 2026-08-16: -0 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +3,758 linesWeek of 2026-09-20: -261 linesWeek of 2026-09-27: +0 linesWeek of 2026-09-27: -0 linesOct 5, 2025Sep 27, 2026
+315.7K lines added, -472.6K removed over the last year.

Commits per week

last 52 weeks
660Week of 2025-09-28: 24 commitsWeek of 2025-10-05: 30 commitsWeek of 2025-10-12: 20 commitsWeek of 2025-10-19: 23 commitsWeek of 2025-10-26: 6 commitsWeek of 2025-11-02: 1 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 10 commitsWeek of 2025-11-23: 30 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 4 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 15 commitsWeek of 2026-01-11: 41 commitsWeek of 2026-01-18: 1 commitsWeek of 2026-01-25: 2 commitsWeek of 2026-02-01: 3 commitsWeek of 2026-02-08: 1 commitsWeek of 2026-02-15: 1 commitsWeek of 2026-02-22: 1 commitsWeek of 2026-03-01: 1 commitsWeek of 2026-03-08: 10 commitsWeek of 2026-03-15: 1 commitsWeek of 2026-03-22: 1 commitsWeek of 2026-03-29: 9 commitsWeek of 2026-04-05: 4 commitsWeek of 2026-04-12: 3 commitsWeek of 2026-04-19: 1 commitsWeek of 2026-04-26: 1 commitsWeek of 2026-05-03: 1 commitsWeek of 2026-05-10: 1 commitsWeek of 2026-05-17: 1 commitsWeek of 2026-05-24: 2 commitsWeek of 2026-05-31: 7 commitsWeek of 2026-06-07: 46 commitsWeek of 2026-06-14: 3 commitsWeek of 2026-06-21: 1 commitsWeek of 2026-06-28: 1 commitsWeek of 2026-07-05: 66 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 2 commitsWeek of 2026-07-26: 66 commitsWeek of 2026-08-02: 2 commitsWeek of 2026-08-09: 12 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 15 commitsSep 28, 2025Sep 20, 2026
470 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 1 commitsSun 2:00 — 3 commitsSun 3:00 — 0 commitsSun 4:00 — 1 commitsSun 5:00 — 2 commitsSun 6:00 — 24 commitsSun 7:00 — 5 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 10 commitsSun 11:00 — 13 commitsSun 12:00 — 8 commitsSun 13:00 — 14 commitsSun 14:00 — 14 commitsSun 15:00 — 5 commitsSun 16:00 — 1 commitsSun 17:00 — 1 commitsSun 18:00 — 1 commitsSun 19:00 — 11 commitsSun 20:00 — 2 commitsSun 21:00 — 11 commitsSun 22:00 — 12 commitsSun 23:00 — 7 commitsMon 0:00 — 7 commitsMon 1:00 — 5 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 4 commitsMon 8:00 — 4 commitsMon 9:00 — 4 commitsMon 10:00 — 12 commitsMon 11:00 — 10 commitsMon 12:00 — 4 commitsMon 13:00 — 7 commitsMon 14:00 — 11 commitsMon 15:00 — 4 commitsMon 16:00 — 17 commitsMon 17:00 — 4 commitsMon 18:00 — 6 commitsMon 19:00 — 4 commitsMon 20:00 — 3 commitsMon 21:00 — 6 commitsMon 22:00 — 4 commitsMon 23:00 — 8 commitsTue 0:00 — 3 commitsTue 1:00 — 5 commitsTue 2:00 — 4 commitsTue 3:00 — 3 commitsTue 4:00 — 6 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 2 commitsTue 8:00 — 5 commitsTue 9:00 — 7 commitsTue 10:00 — 5 commitsTue 11:00 — 18 commitsTue 12:00 — 12 commitsTue 13:00 — 7 commitsTue 14:00 — 21 commitsTue 15:00 — 11 commitsTue 16:00 — 14 commitsTue 17:00 — 6 commitsTue 18:00 — 9 commitsTue 19:00 — 7 commitsTue 20:00 — 5 commitsTue 21:00 — 11 commitsTue 22:00 — 1 commitsTue 23:00 — 3 commitsWed 0:00 — 5 commitsWed 1:00 — 2 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 1 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 3 commitsWed 9:00 — 7 commitsWed 10:00 — 9 commitsWed 11:00 — 5 commitsWed 12:00 — 13 commitsWed 13:00 — 6 commitsWed 14:00 — 4 commitsWed 15:00 — 10 commitsWed 16:00 — 15 commitsWed 17:00 — 1 commitsWed 18:00 — 5 commitsWed 19:00 — 13 commitsWed 20:00 — 4 commitsWed 21:00 — 16 commitsWed 22:00 — 7 commitsWed 23:00 — 6 commitsThu 0:00 — 12 commitsThu 1:00 — 9 commitsThu 2:00 — 3 commitsThu 3:00 — 4 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 13 commitsThu 10:00 — 8 commitsThu 11:00 — 15 commitsThu 12:00 — 20 commitsThu 13:00 — 25 commitsThu 14:00 — 5 commitsThu 15:00 — 7 commitsThu 16:00 — 7 commitsThu 17:00 — 7 commitsThu 18:00 — 9 commitsThu 19:00 — 11 commitsThu 20:00 — 3 commitsThu 21:00 — 11 commitsThu 22:00 — 12 commitsThu 23:00 — 8 commitsFri 0:00 — 2 commitsFri 1:00 — 5 commitsFri 2:00 — 4 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 1 commitsFri 6:00 — 1 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 3 commitsFri 10:00 — 6 commitsFri 11:00 — 9 commitsFri 12:00 — 14 commitsFri 13:00 — 8 commitsFri 14:00 — 11 commitsFri 15:00 — 15 commitsFri 16:00 — 19 commitsFri 17:00 — 10 commitsFri 18:00 — 9 commitsFri 19:00 — 8 commitsFri 20:00 — 8 commitsFri 21:00 — 3 commitsFri 22:00 — 5 commitsFri 23:00 — 3 commitsSat 0:00 — 1 commitsSat 1:00 — 0 commitsSat 2:00 — 1 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 1 commitsSat 8:00 — 0 commitsSat 9:00 — 1 commitsSat 10:00 — 2 commitsSat 11:00 — 3 commitsSat 12:00 — 5 commitsSat 13:00 — 0 commitsSat 14:00 — 7 commitsSat 15:00 — 2 commitsSat 16:00 — 0 commitsSat 17:00 — 2 commitsSat 18:00 — 11 commitsSat 19:00 — 4 commitsSat 20:00 — 5 commitsSat 21:00 — 16 commitsSat 22:00 — 1 commitsSat 23:00 — 1 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Aug 24, 2026monthly#5+9,757
Aug 23, 2026monthly#5+9,757
Aug 22, 2026monthly#2+9,730
Aug 21, 2026monthly#2+9,710
Aug 20, 2026monthly#2+9,639
Aug 19, 2026monthly#2+9,555
Aug 10, 2026monthly#1+8,840
Aug 9, 2026monthly#1+8,840
Aug 8, 2026monthly#1+8,777
Aug 7, 2026monthly#1+8,701
Aug 6, 2026monthly#1+8,603
Aug 5, 2026monthly#1+8,467
Aug 4, 2026weekly#7+4,942
Aug 4, 2026monthly#1+8,367
Aug 3, 2026weekly#7+4,942
  • flutter/flutter

    Flutter makes it easy and fast to build beautiful apps for mobile and beyond

    179.3K stars · Dart

  • jaywcjlove/awesome-mac

     This project is dedicated to collecting high-quality macOS software and organizing them systematically by different categories for easy search and use.

    115.4K stars · Swift

  • tw93/Mole

    🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app.

    69.1K stars · Shell

  • warpdotdev/warp

    Warp is an agentic development environment, born out of the terminal.

    65.3K stars · Rust

  • tw93/Pake

    🤱🏻 Turn any webpage into a desktop app with one command.

    61.9K stars · Rust

  • agalwood/Motrix

    A full-featured download manager.

    56.1K stars · TypeScript