Go to file
2024-11-09 21:22:00 -08:00
__mocks__ chore: Migrate from Create React App to Vite (#231) 2024-03-12 21:44:43 -05:00
.github/workflows Main: Begin derived app rewrite into remnantchat. 2024-11-09 20:20:34 -08:00
.husky chore: set up eslint 2022-08-08 20:04:04 -05:00
.vim feat(ui): Community rooms (#372) 2024-11-06 17:14:31 -06:00
.zap Add Security Label to Security Report (#199) 2023-11-10 10:37:10 -06:00
public main: change to favicon. 2024-11-09 20:20:40 -08:00
sdk Main: Begin derived app rewrite into remnantchat. 2024-11-09 20:20:34 -08:00
src update git ignore 2024-11-09 21:22:00 -08:00
.env Main: Begin derived app rewrite into remnantchat. 2024-11-09 20:20:34 -08:00
.eslintignore chore: set up eslint 2022-08-08 20:04:04 -05:00
.eslintrc.json chore(deps): update prettier 2024-04-07 16:59:49 -05:00
.gitignore update git ignore 2024-11-09 21:22:00 -08:00
.npmrc chore: set up initial config 2022-08-07 21:08:47 -05:00
.nvmrc chore(deps): use node 20 2024-04-07 17:10:29 -05:00
.prettierrc.json chore: set up prettier 2022-08-07 21:59:46 -05:00
docker-compose.yml main: created docker files 2024-11-09 20:20:40 -08:00
Dockerfile main: created docker files 2024-11-09 20:20:40 -08:00
index.html Main: Begin derived app rewrite into remnantchat. 2024-11-09 20:20:34 -08:00
LICENSE chore: use GPL license 2022-08-09 09:28:00 -05:00
manifest.ts chore: Migrate from Create React App to Vite (#231) 2024-03-12 21:44:43 -05:00
nodemon.json feat(sdk): Implement Chitchatter SDK (#183) 2023-10-28 11:42:58 -05:00
package-lock.json update package modules 2024-11-09 20:25:53 -08:00
package.json main: prelim update to documention. 2024-11-09 20:20:40 -08:00
README.md main: added public pages section to Home page. 2024-11-09 20:20:40 -08:00
tsconfig.json chore: Migrate from Create React App to Vite (#231) 2024-03-12 21:44:43 -05:00
vercel.json chore: Migrate from Create React App to Vite (#231) 2024-03-12 21:44:43 -05:00
vite.config.ts docs(vite): add base hint comment 2024-04-06 17:37:50 -05:00

RemnantChat

RemnantChat logo

RemnantChat is a free (as in both price and freedom) communication tool. It is forked from the platform ChitChatter see the upstream project. Designed to be the simplest way to connect with others privately and securely, it is:

  • Fully open source (licensed under GPL v2)
  • Peer-to-peer
    • Whenever possible, otherwise a TURN server is used to ensure reliable peer connection
  • End-to-end encrypted (via WebRTC)
  • 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 RemnantChat to function is availability of static assets on the server, and public WebTorrent and STUN/TURN relay servers for establishing peer-to-peer communication.
  • Embeddable
  • Self-hostable

RemnantChat uses the Create React App toolchain. The secure networking and streaming magic would not be possible without Trystero. File transfer functionality is powered by secure-file-transfer.

Status

TBA

How to use it

Open https://remnant.chat/ 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 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 as Burner Note or Yopass). 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.
  • 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 via iframe.
  • Markdown support via react-markdown.
    • Includes support for syntax highlighting of code.
  • Conversation backfilling from peers when a new participant joins.
  • Multiline message support (hold shift and press enter).
  • Dark and light themes.
  • Automatic peer verification via client-side public-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.
  • RemnantChat 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 RemnantChat API server.
  • No analytics, tracking, or telemetry of any kind.
  • This is a Christian community-driven project.

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. Even 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.

RemnantChat designs around these risks with a web 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 RemnantChat have no association with the project and are publicly available for all to use.

Use cases

RemnantChat offers a private and secure solution for:

  • Churches
  • 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

Please open an issue if you discover a bug.

If you would like a feature to be implemented please file a GitHaven issue describing the feature. If you are not able to work on it yourself other members of the community may step up to implement it via Pull Requests.

We will always make time to support Pull Requests from others. If you're willing to put in the work to improve RemnantChat, we are 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 RemnantChat and take it in another one.

Veracity

The core of RemnantChat'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.

Project roadmap

  • Add room moderation
  • Chat history persistence settings
  • Direct Messaging
  • Emoticons on desktop (also ability to react to messages)
  • Respond to messages

Environments

SDK

You can use the official RemnantChat SDK to embed the app as a Web Component called <chat-room />.

<script src="https://remnant.chat/sdk.js"></script>

<chat-room />

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

  • room: The name of the RemnantChat 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 RemnantChat instance to use. The default value is https://RemnantChat.im/.
  • color-mode: light or dark. The default value is dark.
  • 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 is false.

As well as the following standard <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 use WSL to set up a Linux environment.

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

npm install

This will install all of the dependencies.

Available Scripts

Note: make sure to run 'npm install' after cloning the repo.

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.

npm run build

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

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

Caveats

RemnantChat peer connections are bound to the instance's domain. So, a user of RemnantChat at https://remnant.chat/ would not be able to connect to a user of a RemnantChat instance on another domain.

Necessary steps after forking

Assuming you are hosting RemnantChat on GitHub Pages:

  1. Change the homepage property in package.json to whatever URL your RemnantChat instance will be hosted from. This will be something like https://github_user_or_org_name.github.io/RemnantChat/.
  2. Define a DEPLOY_KEY GitHub Action secret (at https://github.com/github_user_or_org_name/RemnantChat/settings/secrets/actions). See the docs for peaceiris/actions-gh-pages for more information.

    6003270 (Main: Begin derived app rewrite into remnantchat.)

Deployment

On GitHub

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

Deployment After Forking

811c35b (main: prelim update to documention.)

On non-GitHub hosts

Build the app with npm run build, and then serve the dist directory. Any static file serving solution should work provided it is using a secure context.

Runtime configuration

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

Theme customization

Chitchatter utilizes the MUI component library which is themeable. You can customize Chitchatter's look and feel by modifying the shell theme definition.

Troubleshooting

If you run into any issues with a custom RemnantChat installation, first ensure that you are using the latest version of the code.

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 RemnantChat peers from connecting. To work around this, you can either disable your ad blocker or self-host your own RemnantChat instance.

Issues specific to iOS Safari

RemnantChat 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

check your about:config settings and ensure that media.peerconnection.enabled is enabled.

Offered files can't be downloaded from peers

Chitchatter uses StreamSaver.js to facilitate large file transfers. Download managers such as FDM are known to interfere with StreamSaver.js, so it is recommended to disable such download managers when trying to receive files.

Security

Contributors

⚠️ Disclaimer

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