permissionlesstech/bitchatPublic

bluetooth mesh chat, IRC vibes

AI summary: A decentralized peer-to-peer messaging app using Bluetooth mesh and the Nostr protocol.

Stars
34.7K
+81 today
Forks
5.5K
Watchers
303
Open issues
35
Open PRs
69
Contributors
~59
Commits
1K
Branches
78

SwiftUnlicenseCreated Jul 4, 2025Last push 5d agoLatest release v1.7.1+1K stars this week+2.7K this month

Star history

since Jul 6, 2025
010K20K30KJul 2025Nov 2025Mar 2026Aug 2026
34.7K stars as of Aug 7, 2026, tracked back to Jul 6, 2025. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

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

Signals and awards

derived from tracked data
  • Widely adopted

    34,722 stars

  • Very active

    605 commits in 52 weeks

  • Permissive license

    Unlicense

  • Continuous integration

    Automated checks passing

  • Repeat trending

    16 trending appearances

What bitchat does

bitchat is a censorship-resistant communication platform designed for dual-transport networking. It utilizes local Bluetooth mesh networks for offline, local peer-to-peer communication, and bridges to the Nostr protocol for internet-based, global messaging. It requires no accounts, no phone numbers, and no central servers, functioning as the ultimate resilient 'side-groupchat'. The application is designed to keep users connected during internet outages or in environments with heavy network surveillance.

Privacy advocates, activists, and users seeking resilient communication tools that work offline. Requires a mobile device.

  • Bluetooth Mesh Networking: Enables local, off-grid communication directly between nearby devices without internet.
  • Nostr Protocol Integration: Seamlessly syncs local messages to global decentralized relays when an internet connection is available.
  • Zero KYC Onboarding: Creates accounts using cryptographic key pairs instantly—no emails or phone numbers required.
  • End-to-End Encryption: Secures direct messages to ensure extreme privacy.
  • Cross-Platform Availability: Native apps available for both iOS (App Store) and Android (Play Store).

Where teams use it

Off-Grid Communication

Users stay in contact during natural disasters, internet blackouts, or at large crowded events like festivals where cellular networks fail.

Censorship-Resistant Activism

Activists coordinate safely without relying on corporate servers that can monitor, block, or subpoena their data.

Private Group Chats

Privacy-conscious groups maintain persistent side-chats that exist outside the purview of big tech platforms.

Decentralized Networking Exploration

Tech enthusiasts experiment with building resilient mesh networks and bridging them to the broader Nostr ecosystem.

Getting started: Download the app from the iOS App Store or Google Play Store and generate a key to start chatting.

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

Recent open issues

view all

Discussions

all 123

Releases and announcements

20 total
  1. v1.7.1v1.7.1Jul 31, 2026104 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
+401K-401KWeek of 2025-08-10: +494 linesWeek of 2025-08-10: -2,480 linesWeek of 2025-08-17: +16,828 linesWeek of 2025-08-17: -18,433 linesWeek of 2025-08-24: +5,535 linesWeek of 2025-08-24: -2,595 linesWeek of 2025-08-31: +412 linesWeek of 2025-08-31: -281 linesWeek of 2025-09-07: +358,555 linesWeek of 2025-09-07: -1,916 linesWeek of 2025-09-14: +3,464 linesWeek of 2025-09-14: -3,198 linesWeek of 2025-09-21: +6,806 linesWeek of 2025-09-21: -1,976 linesWeek of 2025-09-28: +401,018 linesWeek of 2025-09-28: -367,780 linesWeek 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: +0 linesWeek of 2026-08-02: -0 linesAug 10, 2025Aug 2, 2026
+1.1M lines added, -870K removed over the last year.

Commits per week

last 52 weeks
660Week of 2025-08-10: 13 commitsWeek of 2025-08-17: 60 commitsWeek of 2025-08-24: 21 commitsWeek of 2025-08-31: 2 commitsWeek of 2025-09-07: 28 commitsWeek of 2025-09-14: 22 commitsWeek of 2025-09-21: 18 commitsWeek 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: 0 commitsAug 10, 2025Aug 2, 2026
605 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 — 11 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 — 0 commitsMon 8:00 — 2 commitsMon 9:00 — 3 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 — 0 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 — 10 commitsWed 20:00 — 3 commitsWed 21:00 — 16 commitsWed 22:00 — 7 commitsWed 23:00 — 6 commitsThu 0:00 — 11 commitsThu 1:00 — 9 commitsThu 2:00 — 2 commitsThu 3:00 — 3 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 12 commitsThu 10:00 — 8 commitsThu 11:00 — 15 commitsThu 12:00 — 20 commitsThu 13:00 — 18 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 — 3 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 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
Aug 2, 2026monthly#1+7,687
Aug 2, 2026weekly#1+5,737
Aug 1, 2026monthly#1+7,687
Jul 31, 2026monthly#1+7,511
Jul 30, 2026monthly#1+7,255
Jul 29, 2026daily#1+2,346
Jul 29, 2026monthly#1+7,019
Jul 28, 2026daily#1+2,346
Jul 27, 2026daily#1+1,166
  • 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.

    109.3K stars · Swift

  • warpdotdev/warp

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

    64K stars · Rust

  • tw93/Mole

    🐹 Clean, uninstall, analyze, optimize, and monitor your Mac from the terminal.

    62.2K stars · Shell

  • tw93/Pake

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

    60.5K stars · Rust

  • apple/container

    A tool for creating and running Linux containers using lightweight virtual machines on a Mac. It is written in Swift, and optimized for Apple silicon.

    48.7K stars · Swift

  • DioxusLabs/dioxus

    Fullstack app framework for web, desktop, and mobile.

    38.5K stars · Rust