A Nostr client that makes relays a first-class concept
Go to file
Jon Staab 88cd8cee2b Fix some bugs, show loading when logging in with nip46 2024-06-12 10:21:47 -07:00
.husky Fix formatting check 2023-03-08 08:13:53 -06:00
android Add android directory 2024-05-27 10:03:34 -07:00
cypress Add cypress tests 2023-10-12 16:23:32 -07:00
public Update wordmark 2024-03-12 08:19:16 -07:00
src Fix some bugs, show loading when logging in with nip46 2024-06-12 10:21:47 -07:00
.ackrc Move loadPeople to PubkeyLoader 2023-07-11 13:47:28 -07:00
.editorconfig Work on recursive feed editor 2024-05-16 09:50:15 -07:00
.env Bump welshman 2024-06-11 08:31:04 -07:00
.eslintrc.cjs Update deps 2024-05-16 09:50:14 -07:00
.fdignore Add capacitorjs 2023-04-24 20:19:22 -05:00
.gitattributes Re-work feeds based on new spec 2024-05-16 09:50:15 -07:00
.gitignore Add android directory 2024-05-27 10:03:34 -07:00
.nvmrc Add support for kind 30023 2023-06-19 05:48:55 -07:00
.prettierrc Upgrade deps 2023-12-01 11:51:48 -08:00
CHANGELOG.md Add k tag to deletions 2024-06-11 15:22:10 -07:00
CNAME Adjust urls 2023-04-10 09:05:16 -05:00
CONTRIBUTING.md Remove nip28 chat 2023-09-27 09:59:22 -07:00
Dockerfile add a very basic docker image (#299) 2024-03-07 11:22:51 -08:00
LICENSE Switch license back to MIT 2023-03-16 09:09:23 -07:00
README.md Small fixes 2024-03-12 08:19:16 -07:00
capacitor.config.ts Bump changelog, update capacitor 2024-05-24 08:42:34 -07:00
cypress.config.ts Add cypress tests 2023-10-12 16:23:32 -07:00
index.html Move plausible script 2024-05-08 15:15:09 -07:00
package-lock.json Use a different indexeddb wrapper 2024-06-11 14:47:25 -07:00
package.json Use a different indexeddb wrapper 2024-06-11 14:47:25 -07:00
postcss.config.cjs First commit 2022-11-22 17:28:33 -08:00
pwa-assets.config.js Generate dynamic manifest/meta/favicons 2024-03-12 08:19:16 -07:00
tailwind.config.cjs Improve feed form 2024-05-16 09:50:15 -07:00
tsconfig.json Upgrade deps 2023-12-01 11:51:48 -08:00
vite.config.js Fix manifest 2024-03-12 08:19:16 -07:00


What is this?

Coracle is a web client for the Nostr protocol focused on pushing the boundaries of what's unique about nostr, including relay selection and management, web-of-trust based moderation and content recommendations, and privacy protection. Check it out at coracle.social.

If you like Coracle and want to support its development, you can donate sats via Geyser.


  • Threads/social
  • Profile search using NIP-50
  • Login via extension, nsecbunker, and pubkey
  • Profile sharing via QR codes
  • NIP 05 verification
  • NIP 65 relay selection and NIP 32 relay reviews
  • NIP 89 app recommendations
  • NIP 32 labeling and recommendations
  • NIP 99 classifieds
  • NIP 52 calendar events
  • NIP 87 closed groups
  • NIP 72 communities
  • NIP 89 client tag support
  • NIP 32 labeling and collections
  • Private group calendars and listings
  • Cross-posting between communities and main feed
  • Bech32 entity search and scan
  • Mention, reply, and reaction notifications
  • Direct messages - NIP 04 and NIP 24
  • Note composition with mentions and topics
  • Content warnings, mute, and keyword mute
  • Profile pages, follow/unfollow, follow/follower count
  • Thread muting, collapse thread
  • Invoice, quote, mention, link, image, and video rendering
  • Installable as a progressive web app
  • Integrated media uploads via NIP 96
  • Lightning zaps and reactions
  • Feeds customizable by person, relay, and topic using NIP-51
  • AUTH (NIP-42) support for closed relays
  • Multiplextr support for reducing bandwidth
  • Profile and note metadata
  • White-labeling support
  • NIP 51 person lists
  • Exports/imports of user events
  • User profile editing
  • NIP XX encrypted read receipts for notifications
  • Topic and relay feeds
  • Onboarding workflow
  • Multi-account support
  • Notifications view

You can find a more complete changelog here.

Run Coracle locally:

  • Clone the project repository: git clone https://github.com/coracle-social/coracle.git
  • Navigate to the project directory: cd coracle
  • Install dependencies: yarn
  • Customize configuration in .env (optional, see below)
  • Start the development server: yarn dev


Coracle is intended to be fully white-labeled by groups of various kinds. The following environment variables can be set in .env.local to customize Coracle's appearance and behavior:

  • VITE_DARK_THEME and VITE_LIGHT_THEME are comma-separate lists of key/value pairs defining theme colors.
  • VITE_DVM_RELAYS is a comma-separated list of relays to use when making requests against DVMs.
  • VITE_SEARCH_RELAYS is a comma-separated list of relays to use when using NIP 50 search.
  • VITE_DEFAULT_RELAYS is a comma-separated list of relays to use as defaults/fallbacks.
  • VITE_DEFAULT_FOLLOWS is a comma-separated list of hex pubkeys to fetch content from when the user isn't following anyone.
  • VITE_ONBOARDING_LISTS is a comma-separated list of kind:30003 person lists to populate onboarding with.
  • VITE_NIP96_URLS is a comma-separated list of default upload providers.
  • VITE_IMGPROXY_URL is an imgproxy instance url for protecting user privacy and reducing bandwidth use.
  • VITE_DUFFLEPUD_URL is a Dufflepud instance url, which helps Coracle with things like link previews and image uploads.
  • VITE_PLATFORM_ZAP_SPLIT is a decimal between 0 and 1 defining the default zap split percent.
  • VITE_PLATFORM_PUBKEY is the pubkey of the platform owner. This gets zapped when using the platform zap split.
  • VITE_FORCE_GROUP is an optional kind:34550 or kind:35834 address. If provided, the home page of Coracle will be the home page for the group, and most views will be filtered down to the group's scope.
  • VITE_PLATFORM_RELAYS is an optional comma-separated list of relay urls to use for feeds. If provided, most UI components related to relay selection will be hidden from the user.
  • VITE_ENABLE_ZAPS can be set to false to disable zaps.
  • VITE_APP_NAME is the app's name.
  • VITE_APP_URL is the app's url. Used to generate open graph meta tags.
  • VITE_APP_LOGO is the path for the app's logo relative to the public directory, starting with a leading slash. Used to generate favicons and manifest.
  • VITE_APP_WORDMARK_DARK and VITE_APP_WORDMARK_LIGHT are paths for the app's wordmark relative to the public directory, starting with a leading slash.
  • VITE_APP_DESCRIPTION is the app's description.
  • VITE_CLIENT_NAME is the client's name. Only change this if you have forked Coracle.
  • VITE_CLIENT_ID is the client's NIP 89 handler id. Only change this if you have forked Coracle.
  • VITE_BUGSNAG_API_KEY is your bugsnag api key.
  • VITE_BUILD_HASH can be set during build to indicate the software version on the about page.
  • VITE_LOG_LEVEL can be set to info, warn, or error. This controls how much shows up in the console.
  • VITE_ENABLE_MARKET can be set to false to disable the marketplace tab.

See .env for default values.