Hi HN-- Michael from Nylas here. We're super excited about this launch, and happy to answer questions about N1, including plugin architecture, design, features, etc.
A few Nylanauts will likely hang out in this thread today. Would love to hear what folks think! :)
How "natively" does this deal with GMail? My experience with most non-google mail clients is that the GMail support is almost always broken or ugly in some way. Does it archive correctly? Label correct? Does it make use of GMail's IMAP extensions for doing the right things? If not, how does it work? What level of integration into the GMail workflow is there? I have for a long time desired a good desktop client for GMail, but all of them rely on an unacceptably bad mapping between IMAP and GMail idioms that I still have not found an acceptable one. How does N1 differ?
Yep, it does all the right things. All the "heavy lifting" here is done by the Nylas sync engine which works natively with Gmail labels, actions, search, etc. and those same semantics are exposed in N1.
We've spent almost 2 years building the sync technology, so it's very stable and flexible. You can check out the IMAP code here: https://github.com/nylas/sync-engine
Wow awesome. If this works entirely locally, this is something I've been looking for for a long time. I might wind up making command line utilities out of it. Or even apply for a Nylas job. Email is something I care about an awful lot.
If, on the other hand, this makes use of some Nylas-hosted server, I'm a bit bummed out, since this would mean all my data is transferred through Nylas servers.
Which is it? Or should I just bite the bullet and read the source?
It's both! Most users are fine with hosted infrastructure, so they don't need to run+maintain it themselves. But you totally can if you want. The code for the sync engine and API is here on GitHub: https://github.com/nylas/sync-engine
We're working on putting together a better doc that outlines how to set up the entire stack locally. Ideally this could even be a Docker container.
And N1 has some easy way of integrating with a locally hosted sync engine, spawning it at N1 startup, and shutting it down at N1 tear down? Or is it the sort of thing were I'll need to host my own infra running this sync engine, and then hand tweak some config file to connect to my infra instead of yours?
I don't think GMail exposes the "primary/social/forums/promotional" classification (which they call categories). However, there's a workaround: in the GMail web interface, type "category:promotions" (for example) in the top search bar, and an option will appear to create a filter that automatically applies a label to all emails matching this condition. (in this case we can make a "promotions" label.)
Then your label will appear in your desktop client. Kind of a hack but I did this for thunderbird and it works.
As for making a plugin that handles this automatically - I'm not sure it's even possible, but I'd love to be proven wrong!
On second thought, the initial setup doesn't really need a plugin so much as the way categories are displayed. Especially cool would be to have them as tabs like in the web interface: once you get used to them, you find them sorely missing in desktop clients. I always find it weird to have my personal, social, and "promotions" emails brutally mixed together.
Unfortunately Gmail doesn't expose updates/forms/promotional via IMAP, so we can't show those. But they probably wouldn't be that hard to add in a plugin... ;)
The three features that my ideal mail client has are:
1. ability to snooze emails
2. rich handling of things like calendar invites, flight reminders, attachments, etc.
3. Vim keybindings for message composition
From other comments, it sounds like you're working on (2). How about (1) and (3)? I took a look at some of the documentation for plugins. Do these sound like features that could be easily added through plugins?
For example, Atom has a package for Vim keybindings [1]. How far from has N1 diverged from "dropping Atom packages in"?
Hey! I'm an engineer on N1 and I can talk about (1) and (3):
1. Snoozing emails would be great. You could totally do this client-side in a plugin using our current developer APIs, by moving snoozed threads to a label/folder, and then moving them back after a prescribed time. Might be a fun project! Feel free to ping us on our community slack channel if you want to try.
3. N1 uses the exact same package structure as Atom, but we're using the CommandRegistry less, and introducing our own UI layer concepts like the ComponentRegistry (for dynamically injecting React elements.) There are probably a handful of Atom packages you could load into N1, but probably only well-contained ones with very minimal UI. Our composer unfortunately doesn't share any code with Atom's text view - we needed to do rich HTML editing, so we wrote our own composer based on `contenteditable`.
Vim keybindings for the composer are also a great idea. There's actually an API for creating `DraftStoreExtensions` (https://nylas.com/N1/docs/DraftStoreExtensions.html), and if you implement `onInput` in your extension you can probably re-create vim keyboard handling. Unfortunately, that's a bit low-level: right now, the composer is not as easy to extend as Atom's editor. We've put a lot more effort into extensibility of the thread / message panels and views.
Enjoy! Feel free to reach out on the community slack channel if you have any other questions.
The FAQ sent me to the README for a completely-local installation instructions that I would like to try out, but they're not there. Where can I find them?
Also, want to jump in our community Slack channel and chat with us? Getting a full environment set up can sometimes be a bit tricky and we can walk you through it. :) http://slack-invite.nylas.com/
Good question.
* This mail client is hackable which can lead to many plugins created on this.
* It is open source and if they embed the sync part in the app will ensure your data are safe.
* And its design belongs to 2015.
A few Nylanauts will likely hang out in this thread today. Would love to hear what folks think! :)