Go to file
John Brooks fe117d10c8 core: Choose a SOCKS port from tor's listeners 2016-09-20 16:37:59 -06:00
backend core: Send contact update events on status change 2016-09-19 19:53:21 -06:00
cli cli: Start implementing more RPC logic 2016-09-16 15:26:14 -06:00
core core: Choose a SOCKS port from tor's listeners 2016-09-20 16:37:59 -06:00
rpc rpc: Add UNKNOWN connection status for contacts 2016-09-15 18:30:37 -06:00
.gitignore gitignore 2016-08-02 17:36:28 -06:00
README.md Fix README markup. 2016-08-03 01:39:03 +02:00

README.md

This is an idea for the architecture of a Ricochet client. Don't get excited. It doesn't do anything.

The idea is to implement all client backend logic in Go, and export a RPC API for frontends.

Benefits:

  • We can have all network-facing and critical logic in Go, without being forced to use Go for frontends (because it lacks decent UI capability)
  • We can keep the current Qt UI implementation as one frontend
  • It's easy to build new frontends in anything that can use gRPC (like cli)
  • Backends are headless and frontends are detachable and interchangable
  • Can do some fancy sandboxing

Other ideas:

  • This is currently using RPC only for the backend<->frontend; would it make sense to RPC any other layers or distinct components? Could have security benefits.
  • In particular, we still have one process that has access to private keys, tor config, and untrusted network traffic. That sucks.
  • Can do frontend connection to backend over authorized onion for advanced setups

Structure:

  • core is the client logic implementation
  • rpc has gRPC/protobuf definitions & generated code
  • backend is the backend RPC server
  • cli is an example frontend client