crypticat

Dead simple encrypted chat

Stars
18

🚧 This project is maintenance mode! 🚧

I will be fixing and responding to pull requests and issues, but it is not in active development.

Try it out here! A public websocket server is available at wss://u.kognise.dev/.

With npm installed, you can install the cli with npm i -g @crypticat/cli then run crypticat wss://u.kognise.dev/. If you want to start a server, run crypticat serve with a port as an optional 3rd argument. It'll default to port 8080.

Goals

  • It should be secure
  • Message records shouldn't be stored anywhere
  • Anyone should be able to run their own server
  • It should be open-source and extensible
  • The web ui and cli should have the same usability

Architecture

Messages are e2e encrypted with aes-256, and keys are exchanged with the diffie-hellman method.

This codebase is a monorepo, made up of 4 packages:

  • The core client and server libraries (@crypticat/core)
  • The command-line interface (@crypticat/cli)
  • The next.js powered website
  • A react wrapper for ionicons (@crypticat/ionicons)

Development

The monorepo is managed with yarn workspaces. Make sure you have node 10+ installed as well as yarn, and then just run yarn to install needed dependencies.

The cli, core, and icon set are written in typescript. Run yarn workspace @crypticat/core tsc to run tsc one-off, or yarn workspace @crypticat/core watch to start the compiler in watch mode for development.

You'll probably want to use the cli if you're developing it. First, uninstall crypticat globally and then run yarn workspace @crypticat/cli link. You should now be able to run crypticat and it'll run the local compiled version.

The website is written in next.js and deployed on now, deploy it with now and run the dev server with yarn workspace @crypticat/website dev.

The icon set has a generator script that pulls the icons from ionic's github repo and converts them to react. You can run it with yarn workspace @crypticat/ionicons gen. Make sure to run tsc afterwards!

Finally, if you want to publish a package and you have permission, run yarn bump.