From 06294898f6ea0aa958947ca68c1d5d14e1c3c696 Mon Sep 17 00:00:00 2001 From: John Brooks Date: Mon, 1 Aug 2016 21:17:51 -0600 Subject: [PATCH] README --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4a00b1 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +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