[{"data":1,"prerenderedAt":420},["ShallowReactive",2],{"project-39524874":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":28,"sentiment":29,"stance_mix":30,"scored_comments":33,"aspects":34,"strip":42,"post_text":44,"what":45,"said":97,"maker_in_thread":218,"shape":230,"grid":235,"attempts":382,"same_week":383,"maker_shows":38,"maker_hidden":412,"reader_version":413,"card":414},"39524874","Mountaineer","Webapps in Python and React","title","Show HN: Mountaineer – Webapps in Python and React","https:\u002F\u002Fgithub.com\u002Fpiercefreeman\u002Fmountaineer","github.com","icyfox",1709045993,2024,145,57,584,3515,17,"notable","dev_tools","web framework","library",[24,25,26,27],"python react framework","fullstack python","server side rendering python","typed frontend backend","mixed",0.279,{"positive":31,"neutral":31,"mixed":32,"critical":32},8,2,20,{"docs":35,"idea":37,"performance":39,"design":41},{"positive":36,"critical":36},1,{"positive":38,"critical":36},3,{"positive":40,"critical":40},0,{"positive":36,"critical":40},[43,40,36,40,40,38,40,43,38,38,40,38,40,38,43,40,40,38,43,40,36,40,40,43,40,40,40,40,40,40,43,43,40,40,40,40,40,40,40,40],5,"Hey HN, I’m Pierce. Today I’m open sourcing a beta of Mountaineer, an integrated framework for building webapps in React and Python.\n\nI’ve written a good 25+ webapps over the last few years in almost every major framework under the sun. Python and React remain my favorite. They let you get started quickly and grow to scale. But the developer experience of linking these two worlds remains less than optimal:\n\n— Sharing typehints and schemas across frontend and backend code\n\n— Scattered fetch() calls to template data and modify server objects\n\n— Server side rendering \u002F gateway support\n\n— Error ha",{"problem":46,"audience":52,"pricing":52,"motivation":53,"time_to_build":52,"stack":57,"openness":94,"stage":95,"team_size":96},{"value":47,"source":48,"evidence":49},"Linking Python backends and React frontends: shared types, scattered fetch calls, SSR, frontend error handling","maker",[50],{"id":51},"post",null,{"value":54,"source":48,"evidence":55},"Author wrote 25+ webapps and wanted a better Python and React developer experience",[56],{"id":51},[58,62,66,74,80,87],{"value":59,"source":48,"evidence":60},"Python",[61],{"id":51},{"value":63,"source":48,"evidence":64},"React",[65],{"id":51},{"value":67,"source":68,"evidence":69},"Rust","commenter",[70],{"id":71,"by":72,"text":73},"39532147","ElevenPhonons","This looks interesting, but there's a lot of moving pieces (rust, python, typescript, react, v8). Maybe remove the .DS_Store files from repo and update your gitignore globally to…",{"value":75,"source":48,"evidence":76},"V8",[77],{"id":78,"by":11,"text":79},"39525595","Yes it does! SSR support out of the box (powered by V8). This was one element of the Rust layer that was really important to pin down early and start benchmarking for…",{"value":81,"source":68,"evidence":82},"FastAPI",[83],{"id":84,"by":85,"text":86},"39525249","robertlagrant","Very nice. I would probably not try it, as it's FastAPI based, but more of these things need to spring up!",{"value":88,"source":68,"evidence":89},"Pydantic",[90],{"id":91,"by":92,"text":93},"39533147","bormaj","I'm very happy to see that this package makes use of pydantic. I have been a heavy user of Dash and there is a ton of room there for an improved dev experience via typed…","open_source","beta","solo",{"praise":98,"objections":121,"requests":141,"questions":167,"alternatives":189},[99,106,117],{"value":100,"source":68,"evidence":101},"Polished, well documented for a v0.1 release",[102],{"id":103,"by":104,"text":105},"39526156","yoz","Kudos for how much polish and documentation work you've done here. It's rare to see a v0.1 release that's this accessible to newcomers, even rarer to see it all from one person.…",{"value":107,"source":68,"evidence":108},"Tight frontend-backend integration reduces boilerplate",[109,113],{"id":110,"by":111,"text":112},"39533539","android521","i like the idea of tight integration between frontend and backend by abstracting out the api\u002Fdata fetching\u002Ftransformation which is a lot of busy work",{"id":114,"by":115,"text":116},"39527134","selecsosi","This would be fun to wire up into django middleware for some quick VM binding for react frontends. Appreciate the approach, as other's have said kudos and keep up the good work!…",{"value":118,"source":48,"evidence":119},"Built-in SSR with fast rendering",[120],{"id":78,"by":11,"text":79},[122,130,137],{"value":123,"source":68,"evidence":124},"Built on FastAPI, which some commenters avoid",[125,126],{"id":84,"by":85,"text":86},{"id":127,"by":128,"text":129},"39525314","bananakitty","What's wrong with FastAPI?",{"value":131,"source":68,"evidence":132},"Documentation does not show overall capabilities",[133],{"id":134,"by":135,"text":136},"39539406","evantbyrne","I do agree it needs documentation. It is really difficult to tell what the overall capabilities of the framework are beyond being able to serve React. You can have multitenancy…",{"value":138,"source":68,"evidence":139},"Many moving parts across Rust, Python, TypeScript, React and V8",[140],{"id":71,"by":72,"text":73},[142,153,160],{"value":143,"source":68,"evidence":144},"Built-in authentication, authorization and multitenancy",[145,149],{"id":146,"by":147,"text":148},"39532545","samtechie","Before I try a web framework, I want to know if there's an easy way to do authentication, authorization and multitenancy. Multitenancy may have multiple approaches but am talking…",{"id":150,"by":151,"text":152},"39550466","silent_cal","This is awesome, thank you for building this. I've been looking for something like this for a long time. Does it have any built-in authentication features?",{"value":154,"source":68,"evidence":155},"Svelte support",[156],{"id":157,"by":158,"text":159},"39527381","iwebdevfromhome","Very interesting work! Thanks for sharing. How hard do you think it'd be to swap React for Svelte ? Not that I feel strong for one or the other but I'm the process of learning…",{"value":161,"source":68,"evidence":162},"Django SSR support without Node",[163],{"id":164,"by":165,"text":166},"39529550","WesleyJohnson","Agreed. Would be very interested in the ability to do SSR on React components from Django, without proxying to Node to do so.",[168,175,182],{"value":169,"source":68,"evidence":170},"What does it offer beyond existing solutions for rapid prototyping?",[171],{"id":172,"by":173,"text":174},"39532971","3abiton","What makes it better than the current existing solutions though? For someone who is just interested in rapid prototyping?",{"value":176,"source":68,"evidence":177},"Is two-way binding planned?",[178],{"id":179,"by":180,"text":181},"39525337","buremba","Seems interesting as current Python-based solutions don't have good support for Javascript. I see the support for the binding is from Python to JS but do you have any plans to…",{"value":183,"source":68,"evidence":184},"Is there a full example project?",[185],{"id":186,"by":187,"text":188},"39554398","mlamina","Looove that approach! Other than the TODO example, is there a full project I can look at that's based on Mountaineer? If I choose to be an early adopter, what are the current…",[190,196,200,207],{"value":191,"source":68,"evidence":192},"Litestar",[193],{"id":194,"by":85,"text":195},"39529064","I don't really like the maintainer model. I'm more of a fan of Litestar, as they seem to have a similar product but more of a mature development model. I could be wrong.",{"value":197,"source":68,"evidence":198},"Dash",[199],{"id":91,"by":92,"text":93},{"value":201,"source":68,"evidence":202},"CherryPy",[203],{"id":204,"by":205,"text":206},"39525378","giancarlostoro","My own preference, probably not similar to theirs but coming from Django, CherryPy and heck, I'll mention even ASP .NET Core, I prefer to design my websites in a more OOP way.…",{"value":208,"source":68,"evidence":209},"Django with HTMX or Django REST framework",[210,214],{"id":211,"by":212,"text":213},"39529533","lagt_t","Django is better paired with something like HTMX.",{"id":215,"by":216,"text":217},"39531521","globular-toast","My usual advice is to build a tool that you'd find useful. You can do the Todo app if you'd find it useful. To focus on react learning use a CSS library like react-bootstrap or…",{"comments":219,"answered":32,"key":220},6,[221,224,227],{"id":222,"text":223},"39527629","Thanks for the kind words, yoz. I think it's easier to write documentation when you're actively using + codeveloping solutions using the library as well. The README guides are as…",{"id":225,"text":226},"39539521","Authentication and authorization is pretty easy to implement with custom Dependencies. Multitenancy can be a layer on top of that depending on how you want to shard your DB…",{"id":228,"text":229},"39539456","Thanks for the note! SecretStr is a good call as well. I'll switch to using that for the database layer. Also removed DS_Store in the latest PR (really thought I had ignored…",{"commenters":231,"max_depth":232,"maker_replies":219,"first_comment_mins":233,"lifespan_hours":234},42,7,22,239,[236,238,240,242,244,246,250,253,255,257,259,261,262,266,267,270,273,275,277,279,281,285,286,287,290,292,296,301,303,305,306,308,311,314,315,318,321,323,325,328,330,334,337,342,345,349,353,356,359,361,364,366,369,371,374,377,379],[103,40,43,237,104,40],"project\u002Fpositive\u002Fdocs",[222,40,40,239,11,36],"maker\u002Fneutral\u002Fdocs",[146,36,38,241,147,40],"project\u002Fneutral\u002Fidea",[134,36,36,243,135,40],"project\u002Fcritical\u002Fdocs",[225,36,40,245,11,36],"maker\u002Fneutral\u002Fidea",[247,32,40,248,249,40],"39525488","commenter\u002Fpositive\u002Fidea","zeddotes",[251,32,40,252,165,40],"39530235","commenter\u002Fneutral\u002Fnone",[71,38,38,254,72,40],"project\u002Fmixed\u002Fidea",[228,38,40,256,11,36],"maker\u002Fneutral\u002Fprivacy",[157,258,38,241,158,40],4,[114,43,43,260,115,40],"project\u002Fpositive\u002Fidea",[164,43,38,241,165,40],[263,219,40,264,265,40],"39538943","other\u002Fneutral\u002Fnone","dvcoolarun",[91,232,38,254,92,40],[268,31,40,264,269,40],"39526229","ninjha01",[186,271,38,272,187,40],9,"project\u002Fneutral\u002Fdocs",[179,274,38,241,180,40],10,[276,274,40,245,11,36],"39525473",[150,278,38,241,151,40],11,[110,280,43,260,111,40],12,[282,283,40,264,284,40],"39529121",13,"kapitanjakc",[211,283,40,264,212,40],[215,283,40,264,216,40],[288,283,40,264,289,40],"39532605","davepeck",[172,291,38,241,173,40],14,[293,294,43,260,295,40],"39555941",15,"phantompeace",[297,298,38,299,300,40],"39525583",16,"project\u002Fneutral\u002Fperformance","Rumudiez",[78,298,40,302,11,36],"maker\u002Fpositive\u002Fperformance",[84,18,36,304,85,40],"project\u002Fcritical\u002Fidea",[127,18,40,264,128,40],[204,18,40,307,205,40],"other\u002Fneutral\u002Fdesign",[309,18,40,310,11,36],"39525455","maker\u002Fneutral\u002Fdesign",[312,18,43,313,205,40],"39525587","project\u002Fpositive\u002Fdesign",[194,18,40,264,85,40],[316,18,40,264,317,40],"39529919","dsissitka",[319,18,40,264,320,40],"39531551","gv83",[322,18,40,264,317,40],"39532014",[324,18,40,264,85,40],"39535676",[326,18,40,264,327,40],"39531684","toiletduck",[329,18,40,264,320,40],"39532141",[331,332,40,264,333,40],"39547811",18,"akshay-deo",[335,332,40,264,336,40],"39641226","BrandoElFollito",[338,339,43,340,341,40],"39525182",19,"project\u002Fpositive\u002Fnone","greenie_beans",[343,33,43,340,344,40],"39525121","frankfrank13",[346,347,43,340,348,40],"39526743",21,"liuxiaopai",[350,233,40,351,352,40],"39525542","other\u002Fcritical\u002Fnone","xandrius",[354,233,40,264,355,40],"39525598","punnerud",[357,233,40,264,358,40],"39525890","sureglymop",[360,233,40,264,205,40],"39525956",[362,233,40,264,363,40],"39526250","phailhaus",[365,233,40,264,205,40],"39526717",[367,233,40,264,368,40],"39526339","falcor84",[370,233,40,264,352,40],"39527304",[372,233,40,264,373,40],"39527140","Zetobal",[375,233,40,264,376,40],"39529735","triyambakam",[378,233,40,264,376,40],"39534628",[380,233,40,264,381,40],"39534723","plumeria",[],[384,389,394,398,403,407],{"id":385,"name":386,"points":387,"category":388},"39532367","RecurseChat",637,"ai",{"id":390,"name":391,"points":392,"category":393},"39511714","AboutIdeasNow",586,"productivity",{"id":395,"name":396,"points":397,"category":388},"39483482","OK-Robot",542,{"id":399,"name":400,"points":401,"category":402},"39501073","usoldering.com",513,"hardware",{"id":404,"name":405,"points":406,"category":388},"39474467","fastsdxl.ai",444,{"id":408,"name":409,"points":410,"category":411},"39504715","Nekoweb",353,"infrastructure",false,"v2",{"id":415,"name":5,"line":6,"ai":412,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":416,"top":18,"kw":417,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":418,"url":9,"mix":419,"praise":100,"objection":123,"sub":21},39524874,0.28,[24,25,26,27],"5010030533030350035010050000005500000000",[31,31,32,32],1794036650412]