Fixing file-sharing
Go to file
2022-09-11 13:45:17 -05:00
.github/workflows chore: [#5] use node-version 16 for ci and deploy workflows 2022-09-10 18:41:46 -05:00
.husky chore: set up eslint 2022-08-08 20:04:04 -05:00
public feat: set page title 2022-08-31 19:18:35 -05:00
src feat: [#4] wire up update UI 2022-09-11 13:45:17 -05:00
.env feat: join peer room 2022-08-13 12:11:59 -05:00
.eslintignore chore: set up eslint 2022-08-08 20:04:04 -05:00
.eslintrc.json chore: set up eslint 2022-08-08 20:04:04 -05:00
.gitignore refactor: rename App to Bootstrap 2022-08-09 09:35:49 -05:00
.npmrc chore: set up initial config 2022-08-07 21:08:47 -05:00
.nvmrc chore: [#5] use Node 16 2022-09-10 18:34:11 -05:00
.prettierrc.json chore: set up prettier 2022-08-07 21:59:46 -05:00
LICENSE chore: use GPL license 2022-08-09 09:28:00 -05:00
package-lock.json chore: use trystero 0.11.2 2022-09-08 22:12:32 -05:00
package.json chore: [#5] use Node 16 2022-09-10 18:34:11 -05:00
postcss.config.js chore: set up tailwind 2022-08-08 21:11:30 -05:00
README.md docs: describe features and anti-features 2022-09-07 09:43:59 -05:00
tailwind.config.js chore: set up tailwind 2022-08-08 21:11:30 -05:00
tsconfig.json refactor: use absolute module paths 2022-08-16 09:21:33 -05:00

Chitchatter

Chitchatter is a free (as in both price and freedom) communication tool. It is designed with security and privacy in mind. To that end, it is:

  • Fully open source (licensed under GPL v2)
  • Peer-to-peer
    • Whenever possible, otherwise Open Relay is used to ensure reliable peer connection
  • Encrypted (via WebRTC)
  • Serverless
  • Ephemeral
    • Message content is never persisted to disk
  • 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 communication.

Chitchatter was bootstrapped with Create React App.

How to use it

Open https://chitchatter.im/ and join a room to start chatting with anyone else who is in the room. By default, room names are random UUIDs that are generated client-side. To securely 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 whoever you wish to communicate with via a secure medium of your choosing (such as Burner Note or Yopass). Your static user name will be presented to you, and it would be good share that with who you will be chatting with so they know they're talking to you.

Features

  • Multiple peers per room (limited only by the number of peer connections your browser supports).
  • The number displayed at the top-right of the screen shows how many peers you are connected to. Your peers are the only ones who can see your message.
  • Markdown support via react-markdown.
    • Includes support for syntax highlighting of code.
  • Multiline message support (hold Shift and press Enter).
  • Dark and light themes

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 external general-purpose WebTorrent and STUN/TURN servers as for necessary communication, but there is no Chitchatter API server.
  • No analytics, tracking, or telemetry.
  • This is a community-driven, unfunded project that makes no money. This is necessary to prevent corporate influence from harming users.

Why another chat app?

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

Chitchatter designs around these concerns by not having a central service operator and never storing communication data. Some services are required to establish a connection between peers, but the app relies on direct peer-to-peer communication as much as possible. Any services that are used by the app have no association with Chitchatter project and are publicly available for all to use.

Chitchatter is inspired by Cryptocat and Tox.

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 the GPL, but all build logs are publicly accessible as well.

If you would like to verify that the app hosted at https://chitchatter.im/ is the one that is hosted on GitHub, you can use dig:

$ 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.153
jeremyckahn.github.io.  231     IN      A       185.199.110.153
jeremyckahn.github.io.  231     IN      A       185.199.109.153
jeremyckahn.github.io.  231     IN      A       185.199.108.153

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

Project status

Chitchatter is in MVP state. A lot of basic features and UX polish are missing, but much is planned for the future.

Chitchatter is an open source project, so community contributions and support are welcome! If there's something you'd like to see changed in the project, please open an issue or Pull Request on GitHub and share your ideas.

Project roadmap

This is a non-exhaustive list of things that are in Chitchatter's future:

  • Password-protected rooms
  • Voice calling
  • Video calling
  • File sharing
  • Pairing and relay server configuration
  • Indicators for when others are typing
  • Transcript backfilling for peers who join a room after there has already been activity

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.
Open http://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. See the section about running tests for more information.

npm run build

Builds the app for production to the build 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.

Deployment

The Production environment is updated when the main branch is updated.