{"id":47572505,"url":"https://github.com/Spl0itable/NYM","last_synced_at":"2026-04-14T17:00:46.429Z","repository":{"id":311272583,"uuid":"1043110440","full_name":"Spl0itable/NYM","owner":"Spl0itable","description":"A lightweight, yet feature-rich, ephemeral chat client built on Nostr protocol, bridged with Bitchat for anonymous, temporary messaging.","archived":false,"fork":false,"pushed_at":"2026-04-10T06:50:57.000Z","size":10691,"stargazers_count":50,"open_issues_count":1,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-10T08:36:34.275Z","etag":null,"topics":["android","android-app","android-application","bitchat","chat","chat-app","chat-application","chatapp","chatroom","ios","ios-app","ios-application","messenger","messenger-platform","nostr","nostr-client","nostr-protocol"],"latest_commit_sha":null,"homepage":"https://nymchat.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Spl0itable.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-23T06:49:55.000Z","updated_at":"2026-04-10T06:51:00.000Z","dependencies_parsed_at":"2025-08-23T18:30:38.024Z","dependency_job_id":"fa37b35d-54f3-47d9-81e7-24972b62da16","html_url":"https://github.com/Spl0itable/NYM","commit_stats":null,"previous_names":["spl0itable/nym"],"tags_count":324,"template":false,"template_full_name":null,"purl":"pkg:github/Spl0itable/NYM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spl0itable%2FNYM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spl0itable%2FNYM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spl0itable%2FNYM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spl0itable%2FNYM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Spl0itable","download_url":"https://codeload.github.com/Spl0itable/NYM/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Spl0itable%2FNYM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31806209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-app","android-application","bitchat","chat","chat-app","chat-application","chatapp","chatroom","ios","ios-app","ios-application","messenger","messenger-platform","nostr","nostr-client","nostr-protocol"],"created_at":"2026-03-30T21:00:21.931Z","updated_at":"2026-04-14T17:00:46.417Z","avatar_url":"https://github.com/Spl0itable.png","language":"JavaScript","funding_links":[],"categories":["Clients"],"sub_categories":["Mobile"],"readme":"```\n                                            ##\\                  ##\\     \n                                            ## |                 ## |    \n#######\\  ##\\   ##\\ ######\\####\\   #######\\ #######\\   ######\\ ######\\   \n##  __##\\ ## |  ## |##  _##  _##\\ ##  _____|##  __##\\  \\____##\\\\_##  _|  \n## |  ## |## |  ## |## / ## / ## |## /      ## |  ## | ####### | ## |    \n## |  ## |## |  ## |## | ## | ## |## |      ## |  ## |##  __## | ## |##\\ \n## |  ## |\\####### |## | ## | ## |\\#######\\ ## |  ## |\\####### | \\####  |\n\\__|  \\__| \\____## |\\__| \\__| \\__| \\_______|\\__|  \\__| \\_______|  \\____/ \n          ##\\   ## |                                                     \n          \\######  |                                                     \n           \\______/                                                      \n\n```\n\n# Nymchat\n\nA lightweight, yet feature-rich, ephemeral chat client built on [Nostr](https://github.com/nostr-protocol/nostr) protocol, bridged with [Bitchat](https://bitchat.free) for anonymous, temporary messaging.\n\n## Overview\n\nNymchat, also known as NYM (Nostr Ynstant Messenger), is a Progressive Web App (PWA) chat messenger that uses [Nostr](https://github.com/nostr-protocol/nostr)'s ephemeral events (kind 20000) for non-geohash and geohash-based location channels and [NIP-17](https://github.com/nostr-protocol/nips/blob/master/17.md) encrypted events (kind 1059) for private messages. No registration required - just pick a nym and start chatting.\n\n![Nymchat Screenshot](https://nymchat.app/images/nymchat-app.png)\n\n## Features\n\n### Identity\n- **Ephemeral Identity** - Generate temporary keypairs and pseudonyms per session\n- **Auto-Ephemeral Mode** - Auto-start ephemeral sessions without a welcome screen\n\n### Channels\n- **Geohash Channels** - Location-based channels using geohash encoding (kind 20000)\n- **Non-Geohash Channels** - Non-geohash channels (kind 20000)\n- **Channel Sharing** - Generate shareable URLs for channels\n- **Channel Pinning** - Pin frequently used channels to the top of your list\n- **Proximity Sorting** - Sort geohash channels by distance from your location\n\n### Messaging\n- **Private Messages** - End-to-end encrypted 1:1 PMs using [NIP-17](https://github.com/nostr-protocol/nips/blob/master/17.md) (kind 14 rumor format) wrapped in NIP-59 gift wraps\n- **MLS Group Chats (Marmot Protocol)** - End-to-end encrypted group messaging using the [Marmot Protocol](https://github.com/nicobao/NIP-EE) (MLS / [RFC 9420](https://www.rfc-editor.org/rfc/rfc9420)), providing forward secrecy and post-compromise security for group conversations. Uses kind 443 (KeyPackage), kind 444 (Welcome), and kind 445 (group messages). Falls back to NIP-17 automatically if MLS is unavailable.\n- **Private Group Chats (Legacy)** - End-to-end encrypted multi-party group chats via [NIP-59](https://github.com/nostr-protocol/nips/blob/master/59.md); each message is individually gift-wrapped per member with an ephemeral sender key and a randomized envelope timestamp (±2 h) so relays cannot correlate group membership or timing\n- **Rich Text** - Markdown support for bold, italic, strikethrough, code blocks, and quotes\n- **Message Reactions** - React to messages with emojis ([NIP-25](https://github.com/nostr-protocol/nips/blob/master/25.md))\n- **Auto-Reply** - Set away messages with `/brb` command\n- **Image/Video Sharing** - Upload and share images or video\n\n### Lightning Integration\n- **Lightning Zaps** - Send Lightning payments to messages and user profiles ([NIP-57](https://github.com/nostr-protocol/nips/blob/master/57.md))\n- **Lightning Addresses** - Set your Lightning address for receiving zaps\n- **QR Invoice Display** - Visual QR codes for Lightning invoices\n\n### Moderation \u0026 Privacy\n- **User Blocking** - Block unwanted users and channels\n- **Keyword Filtering** - Block messages containing specific keywords or phrases\n- **Flood Protection** - Automatic spam prevention\n- **Image Blur** - Option to blur images from other users until clicked\n\n### Customization\n- **Multiple Themes** - Matrix Green, Amber, Cyberpunk, Hacker Blue, Ghost (B\u0026W), Bitchat (Multicolor)\n- **Notification Sounds** - Classic Beep, ICQ Uh-Oh, MSN Alert, or Silent\n- **Time Format** - 12-hour or 24-hour time display\n- **Auto-Scroll** - Toggle automatic message scrolling\n\n## Protocol Implementation\n\n### Channels\n- Geohash event `kind 20000` with `['g', geohash]` tag\n- Non-Geohash event `kind 20000` with `['g', channel]` tag\n- Tag `['n', nym]` for nickname\n\n### Private Messages \u0026 Group Chats (NIP-17)\n- NIP-17 `kind 14` rumor (message content + metadata) sealed inside NIP-59 `kind 1059` gift wraps\n- Each gift wrap uses a one-time ephemeral sender key; the `created_at` timestamp is randomized ±2 hours so relays cannot correlate senders, recipients, or timing\n- Group chats send one gift wrap per member — each individually encrypted to that member's public key\n\n### MLS Group Chats (Marmot Protocol)\n- Based on the [Messaging Layer Security (MLS)](https://www.rfc-editor.org/rfc/rfc9420) protocol via [Marmot Protocol](https://github.com/marmot-protocol/marmot)\n- `kind 443` — KeyPackage publication (pre-keys for group invitations)\n- `kind 444` — Welcome messages (gift-wrapped to invited members)\n- `kind 445` — Group messages (encrypted with epoch-level keys from the MLS ratchet tree)\n- Provides forward secrecy and post-compromise security — compromising a single key does not expose past or future messages\n- Falls back to legacy NIP-17 gift wraps automatically when MLS is unavailable\n- Typing indicators, reactions, and read receipts work across both NIP-17 and MLS groups\n\n### Reactions \u0026 Zaps\n- Reaction events `kind 7` (NIP-25) with `['k', originalKind]` tag for proper categorization\n- Lightning zaps `kind 9735` (NIP-57) with full invoice generation and payment tracking\n\n## Available Commands\n\n**Basic Commands:**\n- `/help` - Show available commands\n- `/join \u003cchannel\u003e` - Join a channel (e.g., /join #9q5)\n- `/j` - Shortcut for /join\n- `/pm \u003cnym\u003e` - Open a 1:1 private message (e.g., /pm nym or /pm nym#xxxx)\n- `/nick \u003cnym\u003e` - Change your nym\n- `/who` - List online nyms in current channel\n- `/w` - Shortcut for /who\n- `/clear` - Clear chat messages\n- `/leave` - Leave current channel or group chat\n- `/quit` - Disconnect from Nymchat\n\n**Group Chat Commands:**\n- `/group @user1 @user2 [name]` - Create a new private group (uses MLS when available)\n- `/invite @nym` - In a channel: invite user to the channel. In a group chat: add a new member to the group\n- `/addmember @nym` - Add a member to the current group chat\n- `/groupinfo` - Show members of the current group\n- `/leave` - Leave and remove yourself from the current group chat\n\n**Moderation Commands:**\n- `/block [nym|#channel]` - Block a user or channel\n- `/unblock \u003cnym|#channel\u003e` - Unblock a user or channel\n\n**Social Commands:**\n- `/slap \u003cnym\u003e` - Slap someone with a trout\n- `/hug \u003cnym\u003e` - Give a warm hug\n- `/me \u003caction\u003e` - Action message (e.g., /me is coding)\n- `/shrug` - Send a shrug ¯\\_(ツ)_/¯\n- `/brb \u003cmessage\u003e` - Set away message\n- `/back` - Clear away message\n- `/poll` - Create a poll\n\n**Formatting Commands:**\n- `/bold \u003ctext\u003e` or `/b` - Send bold text\n- `/italic \u003ctext\u003e` or `/i` - Send italic text\n- `/strike \u003ctext\u003e` or `/s` - Send strikethrough text\n- `/code \u003ctext\u003e` or `/c` - Send code block\n- `/quote \u003ctext\u003e` or `/q` - Send quoted text\n\n**Lightning Commands:**\n- `/zap \u003cnym\u003e` - Send Lightning zap to user profile\n\n**Channel Commands:**\n- `/share` - Share current channel URL\n\n## Nymbot\n\nNymbot is a built-in AI-powered chat bot that responds to `?` commands in any channel. You can also mention **@Nymbot** in a message or quote-reply to a Nymbot response to continue a conversation.\n\n### Bot Commands\n\n**AI \u0026 Knowledge:**\n- `?ask \u003cquestion\u003e` - Ask the AI anything (also triggered via `@Nymbot \u003cquestion\u003e`)\n- `?define \u003cword\u003e` - Look up a word's definition, part of speech, and example usage\n- `?translate \u003ctext\u003e` - Translate text (auto-detects language; English text translates to Spanish)\n- `?news` - Latest breaking news headlines\n\n**Games \u0026 Fun:**\n- `?trivia [category]` - Trivia questions (categories: general, history, science, crypto, nostr)\n- `?joke` - Random tech/Bitcoin-themed joke\n- `?riddle` - Random riddle — reply to answer\n- `?wordplay [mode]` - Word games (modes: wordle, anagram, scramble) — reply to guess\n- `?roll [NdN]` - Roll dice (e.g., `?roll 2d6`; default 1d6)\n- `?flip` - Flip a coin\n- `?8ball \u003cquestion\u003e` - Magic 8-ball\n- `?pick \u003coption1\u003e \u003coption2\u003e ...` - Randomly pick from a list of options\n\n**Utility:**\n- `?math \u003cexpression\u003e` - Calculate a math expression\n- `?units \u003cvalue\u003e \u003cfrom\u003e to \u003cto\u003e` - Unit converter (e.g., `?units 10 km to mi`)\n- `?time` - Current UTC time and Unix timestamp\n- `?btc` - Current Bitcoin price\n\n**Channel Activity:**\n- `?who` - Who's active in the current channel\n- `?summarize` - Summary of the current channel discussion\n- `?top` - Top channels by recent message activity\n- `?last [N]` - Last N messages across channels (default 10, max 25)\n- `?seen \u003cnym|@mention|pubkey\u003e` - Where and when a nym was last seen\n\n**Info:**\n- `?help` - List all available bot commands\n- `?about` - About Nymchat\n- `?nostr` - Random Nostr protocol tips\n\n### Conversational AI\n\nNymbot is context-aware — when you use `?ask` or `?summarize`, the bot receives the recent channel messages and active user list, so it can answer questions about the current conversation, reference what users said, and summarize discussions intelligently.\n\nQuote-reply to any Nymbot response to continue the conversation — the bot automatically carries context from the reply chain (up to 6 messages of history). You can also quote any message and mention `@Nymbot` to ask the AI about it.\n\n## Running PWA Locally\n\nYou can load Nymchat directly on your own machine by opening the `index.html` file in your browser:\n\n1. Clone or download this repository\n2. Open `index.html` in any modern web browser (Chrome, Firefox, Safari, Edge)\n3. That's it — Nymchat will connect to the Nostr relay network and you can start chatting\n\nNo build tools, web server, or dependencies are required. The entire web app is self-contained in the `index.html`, `css/`, and `js/` directories.\n\n## Mobile App (iOS \u0026 Android)\n\nNymchat is also available as an open source Flutter app for iOS and Android. The source code is located in the [`android-ios-app/`](android-ios-app/) directory.\n\nThe Flutter app is a native shell wrapper around the Nymchat PWA, providing:\n- **Push Notifications** - Native push notifications for new messages\n- **Native Performance** - Smooth, native-feeling experience on both platforms\n\n### Building the Flutter App\n\n1. Ensure you have the [Flutter SDK](https://flutter.dev/docs/get-started/install) installed (requires SDK ^3.6.0)\n2. Navigate to the app directory:\n   ```\n   cd android-ios-app\n   ```\n3. Install dependencies:\n   ```\n   flutter pub get\n   ```\n4. Run on your device or emulator:\n   ```\n   flutter run\n   ```\n   \n## Contributing\n\nPlease feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch\n3. Commit your changes\n4. Push to the branch\n5. Open a Pull Request\n\n## Changelog\n\nSee the [releases page](https://github.com/Spl0itable/NYM/releases) for each update's changes.\n\n## Legal\n\nIf you choose to use Nymchat on 21 Million LLC operated infrastructure and domain (nymchat.app), your use is subject to the below Terms of Service and Privacy Policy.\n\n- [Terms of Service](https://web.nymchat.app/static/tos)\n- [Privacy Policy](https://web.nymchat.app/static/pp)\n\n## Contact\n\nCreated and operated by [21 Million LLC](https://nostrservices.com) - Lead developer: [@Luxas#a8df](https://nostr.band/npub16jdfqgazrkapk0yrqm9rdxlnys7ck39c7zmdzxtxqlmmpxg04r0sd733sv)\n\n## License\n\nCopyright 21 Million LLC\n\nLicensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the [LICENSE](LICENSE) file for details. https://www.gnu.org/licenses/agpl-3.0.html","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSpl0itable%2FNYM","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSpl0itable%2FNYM","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSpl0itable%2FNYM/lists"}