Thanks for the links! I will take a look at that ecosystem, it’s interesting.
@hypo I’m curious about what prompted you to manage/create your own cluster using kubernetes as oppose to letting a provider like Galaxy handle that?
It’s hard to believe that Mongo performance was an unsolvable issue. Are you using oplog or change streams? Why haven’t you adopted Postgres? Have you considered ElasticSearch for geo searching?
What is k8s?
Definitely not on Medium for me!
Can you expand on that? What kind of flexibility was desired (any of these)? I assume you’ve built your own auth solution, but was that worth the numerous pitfalls? Did you have the resources to run a proper security audit? (Not that I expect a negative answer on a public forum : )
Parcel is decent, I’ve been a fan. I did look at Passport.js and Accounts.js and as a solopreneur at the time, I preferred to outsource the security given then auth pitfalls I linked to above.
DB-wise, I’m totally fine with MongoDB and haven’t found compelling reasons yet to desire Postgres or a RDBMS instead. If you want to do joins, you can use $lookup in Mongo.
I haven’t seen anyone mention GraphQL though. I really like its clean and powerful API for clients, and Meteor seems to be agnostic of it, which is a shame considering that Vulcan.js marries Meteor with GraphQL and React.
On the other hand, I suppose I could just build the GraphQL server outside of Meteor, so after checking out the PWA solutions listed here, my next project might start with and stay with Meteor. How’s the Time to Interactive nowadays? Or do folks serve public pages separately?
My Meteor app uses Apollo and React. Here are my current Chrome audit stats, including Time to Interactive:
- When I checked, they were using some tree-based storage which was not appealing to me (I think they’ve changed that).
- It was not easy to customize the onboarding template and flow.
- There was no way to customize the admin panel (add features etc), so it meant we had to build our own
- But most importantly, I’ve used Google App Engine a decade ago and had many pain points when I wanted to migrate my data down the road, so I didn’t want to take that path again.
With that said, I do think Firebase has its market as a backend for mobile apps with simple CRUD logic.
With regards to the Auth, we use Meteor accounts. We did build our own auth using PassportJS at one point and it took around 5 weeks (one dev) including testing, I personally think it was not worth it, since the time could be have been spent to add features. The security checklist you shared is very informative, luckily we covered all of it except point 2.4 (secondary data verification).
With regards to Time to Interactive (TTI), it is around 2s, this is after code splitting and optimizing the bundle, React apps can easily get bloated with JS code if one is not careful, I like bundlephobia, and use it before adding any React library, there is also bundleWizard and Meteor built-in bundle visualizer. We also use SSR (with data hydration) to get fast first paint. I think this the area where I would give NextJS credit, since they’ve SSR best practices built-in and they made it easier to achieve that performance with React, but again it is not compelling enough of value proposition for us, it takes some effort and knowledge to get this right with Meteor, I think it can be made easier but it is not too hard to do once the optimization is desired, I’d rather have Accounts done by the framework as oppose to SSR, since it is more sensitive and difficult area as you’ve alluded to.
However, if you’re really keen on the very fast TTI, I personally would go with Svelte. The good thing about Meteor that it has differential bundling out-of-the-box, I don’t think other frameworks has it yet, which means you’re shipping modern code to modern browsers, thus speeding up the execution time.
I’m curious about your experience with Parcel (I find it very attractive as well), how do you compare it to something like Meteor?
P.S I checked your website from the medium link, I think it is impressive, you seem to be a very thoughtful person and I share a lot of your views, so keep it up .
GraphQL is great. According to surveys about half of its client usage is with library-free http calls. Apollo helps with React integration and optimistic updates. However subscriptions are not as powerful as Meteor pub/sub. The Meteor community has delivered
useTracker react hook which should be praised.
I posted about my experience with Parcel here. Back then you didn’t seem really attracted by the way
Summary: it’s really fast, just occasionally CPU gets really high or React components get messed up and you have to restart Parcel (which often still takes less time than a Meteor reload). It’s not perfect but it really made a difference. Not just the speed, but the hot reloading (keeping scroll position and component state) is a godsend for productivity, it really helps you stay in the flow. You have to experience it to understand what I mean.
Yeah I recall that conversation! thanks for sharing that link, but let us also hear it from @dandv since he seems to have first-hand experience with it.
I personally like Parcel as a build-tool, but we ended up with webpack for a project last year since it was more flexible. However, I do find parcel intriguing, and I unfortunately didn’t have the opportunity to use it in any major project, and I probably won’t now that Deno is here with its own bundler and Rust. Deno for sure will be my new go-to for side projects/experiments.
Sidenote: I personally find it a little strange how you keep discarding things people recommend (like Next.js and Parcel before), but at the same time are eager to jump on/recommend new, unproven tech you often haven’t even tried yourself (Svelte, Deno, …).
We do have hot reloading with large Meteor projects, we run webpack in parallel when doing front-end work, for medium React project, Meteor refresh is good enough. However, I’m willing to invest money to see HRM API first-class in Meteor as I mentioned here, I think it needs to be there and it is a limitation now especially with React Fast Refresh (the previous hot reload was not reliable most of the time).
I’ve not rejected Parcel, I just didn’t have the opportunity to try it in a major production project. I’ve used NextJS, and I just didn’t find its value proposition compelling enough (at least for me) and I’ve mentioned my reasoning above several times, feel free to respond to my question about NextJS value here, perhaps I’m missing something. With Svelte, the benchmarks are very clear. I try to do my own research, try the tools with side projects, and form my opinion while trying my best to filter the hype.
However, I do think Deno has a lot of potential down the road as I explained in that thread.
Really just a matter of setting a token with a cookie or localStorage.
I agree with you, few people want to own security.
Not recommendable by the way (XSS/CSRF).
No such thing as neither nor.
I wonder if this is neglectable if there is no attack surface for xss / csrf
I have no personal experience with this by the way. For me, app with accounts —> Meteor
Having played this from every possible angle at this point, the truth as I see it is that Meteor is the best developer experience, pound-for-pound in the industry. But, developers (whether we want to admit or not) are obsessed with the new-and-shiny.
Is there any technical reason to not use Meteor in 2020? No, unless you’re being fussy. Having built everything from tiny toy apps to big ol’ systems, you can do it with Meteor if you want to and know what you’re doing.
The only consistent reason people don’t want to use it is that it’s not the prom queen anymore.
I have asked number of developers on twitch about their thoughts on Meteor, their response has been mostly, “The core team left to work on Apollo” it’s like the project is abandoned, other thing is they criticize Mongodb a lot , “lack of relationships” will bite you down the line.
Their opinions of meteor is based on out of date information and lack of knowledge of how Mongodb works.
I’ve used Parcel to bundle an admin-style app built with with Webix (side note: Webix is another tool from the “amazing productivity” category; orders of magnitude faster to build admins interfaces with it than with anything else I’ve tried, and highly declarative no-BS code - search for anything in the top right at https://snippet.webix.com/, e.g. “side bar”); too bad they suck at marketing and open sourcing). Hot reloading was great, and that’s where the comparison between Parcel and Meteor stops, since Meteor offers so much more. I haven’t seen Meteor’s hot reload in years so I can’t make an informed comparison.
Gatsby’s hot reloading works the same way, preserving scroll position and component state. Very convenient indeed.
For me it would be “official” PWA support, though according to the last blog post, that’s coming.
Exactly. Sadly, lots of uninformed opinions and popularity bias (though not entirely unwarranted, given the risk of libraries falling out of maintenance) in the JS ecosystem.
We have one production system (built in 2016/2017) that’s full Meteor and Blaze, including mongodb, pub/sub, accounts, and everything. And it works great, getting to ~100k users / month and still doing fine with a single EC2 node as an app server.
For our latest project however, I’m just using Meteor as a build tool, and use React with a REST API provided by feathersJS connected to a postgresql backend. It’s a great build tool, but leaving the comfy confines of the Meteor environment reminds me just how many problems Meteor solved years ago that the JS community is still grappling with today.
It’s 2020 and I’m still dealing with rolling my own accounts system. And reading tons of blog posts and articles about how to manage data access with a redux store and a REST API leaves me wishing for the simple pub/sub mechanism of Meteor that automatically provides local caching, expiration, record merging, sync, and optimized network transfers without a single line of extra code.
So why am I not using Meteor fully? For me, it comes down to the ability to build a team. In 2016 / 2017, it was fairly easy to find JS developers who were experienced with Meteor. Now, it’s extremely difficult. Even previous developers that we worked with, when we get back in touch with them about working on new stuff, tell us they haven’t touched Meteor projects in years and have moved on to other frameworks. I’m scared to start a new project with Meteor and then be unable to find developers. Meteor is different enough (especially with the way pub/sub and reactivity works) that it takes developers, even ones comfortable with JS, at least a few months to really grok how pub/sub is different than REST APIs. While I’m willing to train new developers, I can’t be sure they’ll actually become good Meteor developers and unlearn the principles of the other frameworks they know.
That’s my biggest reason for “why not meteor in 2020”
In fact, for my current site, I wrote my prototype in Rails, because it’s an even better ecosystem, with well maintained gems for just about every problem you have, and only recently rewrote it in React when we better understood the features our early users needed, and decided that interactive and dynamic features were truly necessary and made an SPA worth the hassle.
So perhaps Meteor is stuck in an anti-sweet spot: those who chase shiny new features without regard to utility seem to hop to the latest greatest thing. And those who want a well-engineered full stack solution with a robust ecosystem choose Rails / Django / Java / etc and other older technologies for the 90% of projects that are little more than CRUD frontends to a big database. Meteor is stuck in the middle: not shiny and new enough (any more) to attract early adopters and momentum chasers; not old and established enough (yet) to attract the stable and boring developers.
The good news is that, IMHO, every framework goes through this transition. I think as long as the meteor ecosystem continues to grow, focusing on solving real problems that people have, then it’ll soon cross that valley and be seen as a stable, solid choice by the vast majority of developers that prefer to live a little further away from the bleeding edge.