[{"data":1,"prerenderedAt":412},["ShallowReactive",2],{"project-32894429":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":45,"post_text":47,"what":48,"said":92,"maker_in_thread":224,"shape":237,"grid":241,"attempts":372,"same_week":373,"maker_shows":253,"maker_hidden":404,"reader_version":405,"card":406},"32894429","Stalwart JMAP","Distributed JMAP and IMAP Servers in Rust","title","Show HN: Distributed JMAP and IMAP Servers in Rust","https:\u002F\u002Fgithub.com\u002Fstalwartlabs\u002Fjmap-server","github.com","StalwartLabs",1663563436,2022,190,50,305,2570,12,"notable","infrastructure","self-hosted mail server","other",[24,25,26,27,28],"jmap","imap server","rust mail server","self-hosted email","raft cluster","mixed",0.194,{"positive":32,"neutral":18,"mixed":33,"critical":34},10,1,3,26,{"privacy":37,"execution":39,"design":40,"docs":41,"idea":42,"pricing":44},{"positive":38,"critical":33},0,{"positive":33,"critical":38},{"positive":38,"critical":38},{"positive":33,"critical":38},{"positive":43,"critical":38},4,{"positive":33,"critical":33},[38,38,38,34,34,38,46,34,38,34,38,34,38,38,38,34,38,34,38,46,46,38,38,46,46,34,34,46,38,46,46,33,38,34,46,33,38,38,38,38],5,"I am happy to announce Stalwart JMAP [1], an open-source JSON Meta Application Protocol server that aims to be scalable, robust and secure. Some of its key features are:\n\n- JMAP Core, JMAP Mail and JMAP over WebSocket full compliance.\n- IMAP4 rev2\u002F1 support via Stalwart IMAP, an imap-to-jmap proxy [2].\n- Scalable and fault tolerant: consensus over Raft, node autodiscovery over gossip and read-only replicas.\n- RocksDB backend with full-text search support in 17 languages.\n- OAuth 2.0 authorization code and device authorization flows.\n- Domain Keys Identified Mail (DKIM) message signing.\n- Writt",{"problem":49,"audience":55,"pricing":56,"motivation":65,"time_to_build":55,"stack":70,"openness":89,"stage":90,"team_size":91},{"value":50,"source":51,"evidence":52},"Scalable, secure, self-hostable email server using the JMAP protocol","maker",[53],{"id":54},"post",null,{"value":57,"source":51,"evidence":58},"Donations via GitHub Sponsors; company may seek funding",[59,62],{"id":60,"by":11,"text":61},"32898585","For the moment, it's just one person (myself). I've been working on this project for the last year. I started a company in order to be able to receive donations and hopefully…",{"id":63,"by":11,"text":64},"32923798","Yes, I have set up Github Sponsors already. Hopefully it won't be necessary to seek VC funding.",{"value":66,"source":51,"evidence":67},"Make self-hosting email simpler and build an open alternative to Google Workspace",[68,69],{"id":60,"by":11,"text":61},{"id":54},[71,75,79,83],{"value":72,"source":51,"evidence":73},"Rust",[74],{"id":54},{"value":76,"source":51,"evidence":77},"RocksDB",[78],{"id":54},{"value":80,"source":51,"evidence":81},"Raft consensus",[82],{"id":54},{"value":84,"source":51,"evidence":85},"Argon2 password hashing",[86],{"id":87,"by":11,"text":88},"32908461","> How are application-device-specific passwords handled? Is there some documentation? Not sure what do you mean with application device specific passwords? Currently Stalwart…","open_source","beta","solo",{"praise":93,"objections":117,"requests":139,"questions":177,"alternatives":196},[94,110],{"value":95,"source":96,"evidence":97},"Impressive work and good timing for JMAP adoption","commenter",[98,102,106],{"id":99,"by":100,"text":101},"32895899","onebot","Nice work! Very impressive.",{"id":103,"by":104,"text":105},"32895487","robert_foss","This is really exciting stuff. I can't wait to switch over to JMAP.",{"id":107,"by":108,"text":109},"32900909","pingiun","This is very cool! I had always hoped someone would build a native JMAP server after I read the posts from fastmail",{"value":111,"source":96,"evidence":112},"Fastmail's JMAP work makes this possible",[113],{"id":114,"by":115,"text":116},"32897365","alberth","Thanks you Fastmail for JMAP. For those unaware, Fastmail was the party who created, built and open sourced JMAP (with many others contributing). This took over 5-years of work…",[118,125,132],{"value":119,"source":96,"evidence":120},"Distributed clustering adds unnecessary complexity for many users",[121],{"id":122,"by":123,"text":124},"32900445","0xbadcafebee","I'd use it if you can remove the distributed part.",{"value":126,"source":96,"evidence":127},"Client support for JMAP is lacking",[128],{"id":129,"by":130,"text":131},"32899053","andrewshadura","It's great to see more server support for JMAP, but the client support doesn't seem to be catching up. Neither Thunderbird nor K-9 support it yet, and I don't know of any…",{"value":133,"source":96,"evidence":134},"AGPL licence may limit contributor growth",[135],{"id":136,"by":137,"text":138},"32898163","rch","Solid work, but I haven't seen too many AGPL projects prosper over time. I'll set a reminder to check back in a year or so to look for contributor growth.",[140,155,163,170],{"value":141,"source":96,"evidence":142},"SQL authentication support",[143,147,151],{"id":144,"by":145,"text":146},"32896516","andrenth","I see that quota and sieve filtering are on the pipeline, which are two requirements I’d have for switching to a different IMAP server. Do you have any plans for remote…",{"id":148,"by":149,"text":150},"32899314","jerrac","I currently use Vimbadmin to manage domains and addresses for my personal email server. So I'd need to be able to keep using it, or be able to replace it for both the new…",{"id":152,"by":153,"text":154},"32969637","zimpenfish","Another vote for SQL support - I use sqlite as my user backend for Dovecot. Definitely interested in giving Stalwart a try though.",{"value":156,"source":96,"evidence":157},"SASL and remote auth such as LDAP or GSSAPI",[158,159],{"id":144,"by":145,"text":146},{"id":160,"by":161,"text":162},"32916620","amaccuish","Maybe the wrong place to ask but... This seems perfect for us, but are there plans to support things like LDAP or even GSSAPI auth?",{"value":164,"source":96,"evidence":165},"Backup and export of metadata",[166],{"id":167,"by":168,"text":169},"32896092","ibotty","This is looking great. Of course, this being new, there are some essential questions not answered yet. What's the backup story like? Can the whole state be restored from the mail…",{"value":171,"source":96,"evidence":172},"Server-side encryption and PGP\u002FS\u002FMIME support",[173],{"id":174,"by":175,"text":176},"32895486","lxpz","Very interesting project and impressive work, thanks for sharing! Can you talk a bit about how data is replicated between nodes when Stalwart is run in clustered mode, and what…",[178,182,189],{"value":179,"source":96,"evidence":180},"How data replicates across cluster nodes and handles node failures",[181],{"id":174,"by":175,"text":176},{"value":183,"source":96,"evidence":184},"How to get mail flowing from Postfix into the server",[185],{"id":186,"by":187,"text":188},"32901343","X-Istence","The key thing I am missing is how do I get my mail to flow from Postfix into this? The docs are missing the most important part...",{"value":190,"source":96,"evidence":191},"How IMAP compatibility is verified",[192],{"id":193,"by":194,"text":195},"32895652","superboum","Hi, I would like to mention that some work on a Rust SMTP server has been already done with the Kannader project[1] (Disclaimer: I have no contribution on it but I know the…",[197,205,210,217],{"value":198,"source":96,"evidence":199},"Dovecot",[200,201],{"id":148,"by":149,"text":150},{"id":202,"by":203,"text":204},"32898498","emacsen","This is a bit tangential, but I'm curious about the migration path from, say Dovecot to something like this. I have a Dovecot mail store ~(10gb of mail) on Mailcow (which is…",{"value":206,"source":96,"evidence":207},"Fastmail",[208,209],{"id":114,"by":115,"text":116},{"id":129,"by":130,"text":131},{"value":211,"source":96,"evidence":212},"Mail-in-a-Box",[213],{"id":214,"by":215,"text":216},"32895660","sanxiyn","For people who don't know: there is literally a project named \"Mail-in-a-Box\", which you may want to check out: https:\u002F\u002Fmailinabox.email\u002F",{"value":218,"source":96,"evidence":219},"Kannader and vSMTP",[220,221],{"id":193,"by":194,"text":195},{"id":222,"by":145,"text":223},"32896466","> I would like to mention that some work on a Rust SMTP server has been already done with the Kannader project There’s also the vSMTP project: https:\u002F\u002Fgithub.com\u002FviridIT\u002FvSMTP",{"comments":225,"answered":226,"key":227},8,6,[228,231,234],{"id":229,"text":230},"32896054","> Or, more generally, what is your approach to ensure compatibility \u002F integration with the existing email ecosystem? Yes, Stalwart IMAP server's compliance to the IMAP4 protocol…",{"id":232,"text":233},"32896139","> Can you talk a bit about how data is replicated between nodes when Stalwart is run in clustered mode, and what kind of data integrity\u002Fresilience properties we have when one,…",{"id":235,"text":236},"32898885","Yes, SASL support is planned. SQL auth support could be added as well if there is interest.",{"commenters":238,"max_depth":43,"maker_replies":225,"first_comment_mins":239,"lifespan_hours":240},33,171,147,[242,244,246,248,250,252,255,256,258,259,260,262,264,265,269,273,276,279,283,285,289,292,293,296,299,303,307,308,311,313,315,316,319,322,324,329,331,333,337,341,344,345,348,350,353,357,359,364,368,370],[193,38,38,243,194,38],"commenter\u002Fneutral\u002Fexecution",[229,38,38,245,11,33],"maker\u002Fneutral\u002Fexecution",[222,38,38,247,145,38],"other\u002Fneutral\u002Fnone",[174,33,34,249,175,38],"project\u002Fneutral\u002Fprivacy",[232,33,38,251,11,33],"maker\u002Fneutral\u002Fprivacy",[144,253,34,254,145,38],2,"project\u002Fneutral\u002Fexecution",[235,253,38,245,11,33],[148,253,46,257,149,38],"project\u002Fpositive\u002Fexecution",[152,253,34,254,153,38],[167,34,34,254,168,38],[261,34,38,245,11,33],"32896382",[263,34,34,254,168,38],"32897920",[87,34,38,245,11,33],[266,43,34,267,268,38],"32897167","project\u002Fneutral\u002Fdesign","egberts1",[270,43,38,271,272,38],"32897236","commenter\u002Fneutral\u002Fdesign","danielheath",[274,43,38,271,275,38],"32897296","calvinmorrison",[277,43,38,278,268,38],"32897734","other\u002Fneutral\u002Fprivacy",[280,43,38,281,282,38],"32899804","commenter\u002Fneutral\u002Fprivacy","wtetzner",[129,46,33,284,130,38],"project\u002Fcritical\u002Fnone",[286,226,46,287,288,38],"32896075","maker\u002Fpositive\u002Fnone","miracle2k",[114,290,38,291,115,38],7,"other\u002Fpositive\u002Fnone",[202,225,34,254,203,38],[294,225,38,295,11,33],"32898604","maker\u002Fpositive\u002Fdocs",[297,225,46,298,203,38],"32898804","project\u002Fpositive\u002Fdocs",[300,301,38,247,302,38],"32899448",9,"smarterthanyou_",[304,32,46,305,306,38],"32895494","project\u002Fpositive\u002Fidea","NetOpWibby",[214,32,38,247,215,38],[309,32,38,247,310,38],"32896793","Gigachad",[312,32,46,305,306,38],"32899265",[160,314,34,254,161,38],11,[107,18,46,305,108,38],[186,317,34,318,187,38],13,"project\u002Fneutral\u002Fdocs",[320,317,34,321,168,38],"32908208","maker\u002Fneutral\u002Fdocs",[103,323,46,305,104,38],14,[325,326,34,327,328,38],"32898487",15,"maker\u002Fneutral\u002Fnone","ch71r22",[60,326,38,330,11,33],"maker\u002Fneutral\u002Fpricing",[332,326,46,287,328,38],"32898895",[334,326,46,335,336,38],"32899809","project\u002Fpositive\u002Fpricing","singhrac",[338,326,33,339,340,38],"32900431","maker\u002Fcritical\u002Fprivacy","tpmx",[342,326,34,330,343,38],"32919074","nicoburns",[63,326,38,330,11,33],[122,346,34,347,123,38],16,"project\u002Fmixed\u002Fdesign",[99,349,46,287,100,38],17,[136,351,33,352,137,38],18,"project\u002Fcritical\u002Fpricing",[354,351,38,355,356,38],"32900439","commenter\u002Fneutral\u002Fpricing","capableweb",[358,351,38,355,137,38],"32903132",[360,361,38,362,363,38],"32895560",19,"commenter\u002Fcritical\u002Fidea","traceroute66",[365,361,38,366,367,38],"32895577","commenter\u002Fpositive\u002Fidea","WHATDOESIT",[369,361,38,366,356,38],"32895646",[371,361,38,247,275,38],"32897310",[],[374,379,384,389,394,399],{"id":375,"name":376,"points":377,"category":378},"32884467","Dog Bunny Puzzle",1859,"games",{"id":380,"name":381,"points":382,"category":383},"32905802","Figr.app",275,"productivity",{"id":385,"name":386,"points":387,"category":388},"32879848","LambdaLisp",189,"languages",{"id":390,"name":391,"points":392,"category":393},"32852478","WunderBase",179,"data",{"id":395,"name":396,"points":397,"category":398},"32881956","virtual-fido",166,"security_privacy",{"id":400,"name":401,"points":402,"category":403},"32898679","DevTools-X",136,"dev_tools",false,"v2",{"id":407,"name":5,"line":6,"ai":404,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":408,"top":18,"kw":409,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":410,"url":9,"mix":411,"praise":95,"objection":119,"sub":21},32894429,0.19,[24,25,26,27,28],"0003305303030003030550055335055103510000",[32,18,33,34],1794036625257]