Holy Complexity, Batman

Nylas N1 is a slick, modern email client. It is built to be extensible. All of that is awesome.

It's also staggeringly complex for a program that shows you your email.

  • It’s built as a thin client, with the actual IMAP syncing handled on separate servers

  • The server-side Sync Engine is written in Python and uses MySQL under the hood, with a lot of scaling complexity because it has to handle potentially millions of accounts.

  • The “thin client” is an Electron app, which means it bundles pretty much all of Chromium

  • The client is written in Coffeescript+React+Flux+Electron and uses Sqlite3 to cache the same data on the client. Totally different tables than the ones in MySQL on the server, though.

  • The client is a lot more complex than a typical React app, since it has a custom package architecture, complete with “ComponentRegistry”, “roles”, and so on

Cherry on top: N1 comes with its own custom ORM written in Coffeescript, complete with SQL highlighting so that it prints pretty logs.

Long story short, here’s the game of telephone that happens to show you your inbox:

How can we simplify?