Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Secure peer-to-peer chat that is serverless, decentralized, and ephemeral

License

NotificationsYou must be signed in to change notification settings

jeremyckahn/chitchatter

Repository files navigation

Chitchatter logo

Logo provided by@ramyashreeshetty

Chitchatter is a free (as in both price and freedom) communication tool. Designed to be the simplest way to connect with others privately and securely, it is:

  • Fully open source (licensed underGPL v2)
  • Peer-to-peer
    • Whenever possible, otherwise a TURN server is used to ensure reliable peer connection
  • End-to-end encrypted (viaWebRTC)
  • Ephemeral
    • Message content is never persisted to disk on either the client or server
  • Decentralized
    • There is no API server. All that's required for Chitchatter to function is availability of GitHub for static assets, and public WebTorrent and STUN/TURN relay servers for establishing peer-to-peer communication.
  • Embeddable
  • Self-hostable

Chitchatter usesVite. The secure networking and streaming magic would not be possible withoutTrystero. File transfer functionality is powered bysecure-file-transfer.

Status

  • Known Vulnerabilities

How to use it

Openhttps://chitchatter.im/ and join a room to start chatting with anyone else who is in the room. By default, room names are randomUUIDs that are generated client-side. To privately communicate with someone, it is recommended to join one of these randomly-generated rooms and share the URL (via the "🔗" button at the top of the page) to whomever you wish to communicate with via a secure medium of your choosing (such asBurner Note orYopass). Your user name will be presented to you, and it would be good to share that with who you will be chatting with beforehand so they know they're talking to you.

Features

  • Multiple peers per room (limited only by the number of peer connections your browser supports).
  • Public and private rooms.
  • Video and audio chatting.
  • Screen sharing.
  • Direct messaging.
  • File sharing:
    • Unlimited file size transfers.
    • Files are encrypted prior to sending and decrypted by the receiver (the key is the room name).
  • Embedding into other web apps viaiframe.
  • Markdown support viareact-markdown.
    • Includes support for syntax highlighting of code.
  • Conversation backfilling from peers when a new participant joins.
  • Multiline message support (holdshift and pressenter).
  • Dark and light themes.
  • Automatic peer verification via client-sidepublic-key cryptography.

Anti-features

  • Messages are never persisted to disk. When you leave a peer room, messages are cleared from memory and cannot be retrieved.
  • Chitchatter is an entirely client-side communication app. It uses public WebTorrent servers to establish peer connections and STUN/TURN relay servers when direct peer-to-peer connections cannot be established, but there is no Chitchatter API server.
  • No analytics, tracking, or telemetry of any kind.
  • This is a community-driven and unfunded project that makes no money. The users come first and there is no corporate influence or financial interest involved.

Why another chat app?

There is no shortage of user-friendly chat apps available, but they rely on a central service to facilitate communication. It is difficult to trust these central services, as commercial interests andgovernment pressure can compel service operators to work against the best interest of the users. Even when user data is handled in good faith by service operators, the possibility remains thatencrypted data held at rest may be decrypted against the user's will.

Chitchatter designs around these risks with aweb mesh architecture. There is no central service operator that stores or potentially mishandles communication data. Some services are required to establish an initial connection between peers, but otherwise the app uses direct peer-to-peer communication for everything. Any services that are used by Chitchatter have no association with the project and are publicly available for all to use.

Use cases

Chitchatter offers a private and secure solution for:

  • Organizing groups of people, such as unions or political movements
  • Conveniently moving text or data from one device to another
  • Video chatting with friends and family across operating systems (such as Android and iOS)
  • IT troubleshooting via screen sharing
  • Livestreaming
  • Sharing sensitive information such as passwords
  • Much more!

Note from the developer

💻️ Project status

I consider Chitchatter feature-complete inasmuch it does all the things I personally need it to do. I don't have specific plans to add significant functionality in the future, but I may do so if it seems fun to me at the time.I am committed to fixing any significant bugs that are reported, so pleaseopen an issue if you discover one! Aside from that, Chitchatter is effectively in maintenance mode for the foreseeable future.

If you would like a feature to be implemented and are willing to pay a development cost to ensure it gets done, please file a GitHub issue describing the feature and indicate that you are willing to compensate for the work. If you are not willing to pay, please open a GitHub issue regardless. I may implement it if it seems fun to do so, but other members of the community may also step up to implement it via Pull Requests.

I will always make time support Pull Requests from others. If you're willing to put in the work to improve Chitchatter, I am willing to help shepherd that work along and get it shipped.

If you don't agree with the direction of the project, you are welcome to fork Chitchatter and take it in another one.

🏗️ Support and custom development

I'm willing to do paid installations and customizations of Chitchatter for your needs. If you'd like to contract me to make a version of Chitchatter that is custom built for you, please email me atme@jeremyckahn.com and let me know what you have in mind to get started.


Veracity

The core of Chitchatter's security model is the fact that it is fully open source. You are free (and encouraged) to fully audit the project source code and infrastructure. Not only is the source code available under the terms of theGPL, butall build logs are publicly accessible as well.

If you would like to verify that the app hosted athttps://chitchatter.im/ is the one that is hosted on GitHub, you can usedig:

$ dig chitchatter.im; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> chitchatter.im;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61332;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 65494;; QUESTION SECTION:;chitchatter.im.                        IN      A;; ANSWER SECTION:chitchatter.im.         231     IN      CNAME   jeremyckahn.github.io.jeremyckahn.github.io.  231     IN      A       185.199.111.153jeremyckahn.github.io.  231     IN      A       185.199.110.153jeremyckahn.github.io.  231     IN      A       185.199.109.153jeremyckahn.github.io.  231     IN      A       185.199.108.153

To examine the static assets that are served to end users, you can audit thegh-pages branch.

Project roadmap

See the full ticket backloghere.

Environments

SDK

You can use the official Chitchatter SDK to embed the app as aWeb Component called<chat-room />.

<scriptsrc="https://chitchatter.im/sdk.js"></script><chat-room/>

The<chat-room /> component supports the following optional attributes:

  • room: The name of the Chitchatter room the user should join. The default value is the URL of the embedding page.
  • user-name: The friendly name of the user (which they can change).
  • user-id: The static ID of the user. The default value is a random UUID.
  • root-url: The URL of the Chitchatter instance to use. The default value ishttps://chitchatter.im/.
  • color-mode:light ordark. The default value isdark.
  • play-message-sound: Whether or not to play a sound when a user receives a message while the window is not in focus. The default value isfalse.

As well as the followingstandard<iframe /> attributes:

  • height
  • width
  • style
  • referrerpolicy
  • sandbox

Developing Chitchatter

Important

Presently Chitchatter can only be developed on *NIX systems such as Linux and macOS. If you are using Windows, you can useWSL to set up a Linux environment.

To make changes to Chitchatter, clone the source code from GitHub. Ensure you haveNode and NPM installed. Then in the project directory, run:

npm install

This will install all of the dependencies.

Available Scripts

In the project directory, you can run:

npm dev

Runs the entire stack (client + WebTorrent tracker) locally.

npm start

Runs the front end app in the development mode. Uses public WebTorrent trackers. Openhttp://localhost:3000 to view it in your browser.

The page will reload when you make changes. You may also see any lint errors in the console.

npm test

Launches the test runner in the interactive watch mode.

npm run build

Builds the app for production to thedist folder. It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.

Self-hosting

Chitchatter is designed to be forked and self-hosted. If you would like to change pairing or relay server configuration or you prefer to control your own builds and versions,fork this repo and follow the steps below.

Important

Chitchatter peer connections are bound to the instance's domain. So, a user of Chitchatter athttps://chitchatter.im/ would not be able to connect to a user of a Chitchatter instance on another domain (such as a personal GitHub Pages-hosted fork).

Necessary steps after forking

Assuming you are hosting Chitchatter onGitHub Pages:

  1. Change thehomepage property inpackage.json to whatever URL your Chitchatter instance will be hosted from. This will be something likehttps://github_user_or_org_name.github.io/chitchatter/.
  2. Define aDEPLOY_KEY GitHub Action secret (athttps://github.com/github_user_or_org_name/chitchatter/settings/secrets/actions). See the docs forpeaceiris/actions-gh-pages for more information.
  3. In the Pages section of your fork's Settings tab, ensure that "Deploy from a branch" is selected for Source, and that the branch source isgh-pages with/ (root).
  4. If you're using GitHub Pageswithout a custom domain, you'll need to define the repo name as thebase propertyinvite.config.ts. Here's an example of how that might look:
constconfig=()=>{returndefineConfig({base:'/chitchatter/',build:{// ...}

Deployment

On GitHub

When hosted on GitHub Pages and the configuration above has been done, the Production environment is updated when the remotemain branch is updated (once GitHub Actions are enabled).

On non-GitHub hosts

Build the app withnpm run build, and then serve thedist directory. Any static file serving solution should work provided it is using asecure context.

Runtime configuration

Explore the files insrc/config to modify pairing and relay server configuration.

Theme customization

Chitchatter utilizes theMUI component library which isthemeable. You can customize Chitchatter's look and feel by modifyingthe shell theme definition.

Troubleshooting

If you run into any issues with a custom Chitchatter installation, first ensure that you are usingthe latest version of the code. If you are hosting your installation with GitHub Pages, sync yourmain branch andnot yourgh-pages branch. Updating yourmain branch will trigger a proper rebuild of yourgh-pages branch.

Peers won't connect

This could happen for a variety of reasons. The most likely of which is that one or more peers cannot connect directly and must use the configured STUN/TURN relay as a fallback. The standard relay is free and does not guarantee any level of service, so it may simply be unavailable for some time (or just not work at all for some users). There's not much to do other than wait until it becomes available again, or possibly try from another device or location.

Issues specific to browsers with ad blocking extensions

Some ad blockers (such as uBlock Origin) prevent connections to certain WebTorrent servers. This prevents Chitchatter peers from connecting. To work around this, you can either disable your ad blocker orself-host your own Chitchatter instance.

Issues specific to iOS Safari

Chitchatter works on iOS Safari, but browser-level bugs often prevent peers from rejoining the room when the browser is closed and later reopened (for instance, when switching applications). The suggested workaround for this issue is to refresh the page to rejoin the room.

Issues specific to Firefox

Per#36, check yourabout:config settings and ensure thatmedia.peerconnection.enabled isenabled.

Offered files can't be downloaded from peers

Chitchatter usesStreamSaver.js to facilitate large file transfers. Download managers such asFDM areknown to interfere with StreamSaver.js, so it is recommended to disable such download managers when trying to receive files.

Contributors

By using Chitchatter, you agree to acceptfull responsibility for your actions related to its use. Additionally, you agreenot to hold any contributors to the Chitchatter project responsible for any result of your use of it. The developers of Chitchatter do not endorse illegal activity.


[8]ページ先頭

©2009-2025 Movatter.jp