The Renaissance of Meteor.js
Why the framework now shines for bootstrapping digital products, thanks to React, Typescript, MongoDB and mature tooling.
I first used Meteor to ship products when it was quite new, nearly 10 years ago. It was groundbreaking back then: fullstack JavaScript development, soft real-time data layer by default, single-page-application focus that could directly produce Android/iOS apps as a byproduct. It empowered developers (like me) to ship real, working products within minutes. Even things like user accounts and all that ceremony were directly built-in.
The Downsides Back Then
While I used the framework with great success in the past, not everything was perfect, far from it.
- Server-side rendering (SSR) was based on spinning up a PhantomJS browser process, which is not only fragile but also very heavy on resource usage.
- Coffeescript was all the rage (I still love the syntax/elegance of writing it, but reading code from someone else is quite a pain at times).
- The template engine was Blaze/Spacebars and hasn't aged very well and probably looks very quirky to current frontend developers.
- MongoDB had its fair share of security issues and other problems in the past.
- Meteor itself has some pitfalls when it comes to scalability.
- The company behind Meteor decided to pivot into developing Apollo.
- Critical members left the community (example: Arunoda).
And of course, while I progressed in my career, there was less demand to ship things instantly but increasingly topics like scaling existing things, mentoring other developers, or playing office politics. Several years I didn't even read anything related to Meteor. Until last year when I decided to build things by myself again, to be prepared to enter more fast-paced job opportunities.
Using It Today
Oh boy, how things have changed over the years! Part of it is stabilization in the framework itself, but IMO the bigger part is the rapid advancement of the JavaScript ecosystem itself.
- There are now several frontend SPA frameworks to choose from as the "view" layer.
- Depending on the framework, server-side rendering is now possible natively.
- MongoDB is quite a good database nowadays (depending on the use cases, of course).
- Development of the framework itself picked up steam again after an acquisition in 2019.
- There is an excellent Meteor hosting provider "Galaxy" with a free tier and great autoscaling for professional tiers, as well as integrated application monitoring designed especially for Meteor (formerly known as "Kadira", now "Meteor APM").
- All the early features are still there (integrated user accounts, pub-sub data layer, etc.).
- No webpack configs to mangle, Meteor works out-of-the-box with its integrated build tool.
But the biggest realization I had is that actually none of the other popular (i.e., known to me) web frameworks offer such a polished fullstack development experience. After all these years of "rapid progress." I would like to show you what I mean.
Experiences: Getting Started
Assuming you have any version of Node.js installed, all that is needed is a short:
npm install -g meteor
. After that, creating a new preconfigured project is simply meteor create my_app_name --typescript
, where the last part automatically generates a Meteor app using React and TypeScript (my preference).
Seems boring, but the fact that this is all, it works as one would imagine and no further nitpicking about supplemental libraries/tools is required is awesome in Node.js land!
Experiences: Advanced Frontend Stuff
If you develop something that might require some kind of content/marketing, chances are high that you will need server-side rendering (SSR). If you use React, and probably also React Router, all you need is meteor-react-router-ssr. It will leverage good ol' tricks like fast-render under the hood and also does proper rehydration on the client out-of-the-box.
Another goodie is that React itself moved towards pure functional components and hooks. After a bit of initial learning, this is actually a great simplification of frontend development: you have some functions that render data, and you have some (reactive) functions that handle data. While developing with useEffect is an awesome experience, it is very hard to accomplish SSR with it. This problem is basically solved when you use Meteor for your backend data needs, see my grimoire spell for an example. In short: useTracker
is executed properly during SSR, so nothing to do here.
A nice bonus is that Meteor will also detect if you do dynamic imports and will automatically perform code splitting while bundling your code. So if you have something like Bootstrap for your B2C frontend routes and Foundation for your B2B frontend routes, just a splitting at the router level will produce/load separate bundles with no further config required.
Experiences: Advanced Backend Stuff
The most important thing here is the same as it was always with Meteor: actually there is not much backend code at all. Again, see my grimoire spell for an example. Basically, you define the shape of your data and decide how you want to publish it (all, subset, user-only, ...), everything else is taken care of.
In fact, most code in a Meteor app is isomorphic, running as-is within client and server contexts. Even the MongoDB database exists mirrored in the client known as minimongo, so any code that touches the database is immediately simulated in the client as well as on your backend. This means two things: the Frontend can update instantly ("optimistic UI") and the backend has the final word (rolling back the frontend changes if needed).
The only "real" backend code is stuff you really don't want to expose to users, like external data access/credentials, server-only methods, stuff like that. This amounts to just a tiny percentage of the overall code base in my experience.
Experiences: Deployment
If you just want to try things out, you can launch a small app immediately with meteor deploy <yourapp>.meteorapp.com --free --mongo
for free.
If you want/need a more beefy setup, have a look at Galaxy itself. Servers start at $9/month. It is not particularly cheap, but fairly simple to have the topic "deployment/hosting" dealt with start-to-finish, including goodies like automatic SSL and integrated application monitoring.
If you are like me and like your apps LEAN, then you can go with a $5 droplet from Digital Ocean and leverage Meteor Up. It takes less than 30 minutes from reading the docs to having deployment finished and supports multiple setups (like X app servers, Y MongoDB instances, ...). In my case, the absolutely minimal deployment complexity is enough, running everything including the database on a single cheap server is sufficient, and it works quite well.
If any one of my products does require scaling someday, it is fairly easy to extract the MongoDB content and reimport it into a dedicated cluster, but this will be migration work I'd be happy to do (since this means having traction and $$$).
Experiences: Ecosystem
You have NPM at your fingertips. Additionally, there is atmosphere for dedicated Meteor packages. While there are many outdated things, quite a bunch of packages work surprisingly well today, even if they haven't been updated in like 5 years.
Bonus points if you know Rust: generating WASM is quite easy today, and Node.js as well as browsers are really good at running it. So basically many "native" things (including much stuff from crates.io) can be leveraged, too.
Since the frontend world seems to settle on React.js as the "winner," tons of packages/plugins are available, too.
Current Shortcomings
To be fair, not everything is sunshine and rainbows in Meteor land right now.
- Apple M1 processors are not yet supported, I have to use a Rosetta Terminal.
- Probably related to this,
meteor run ios
doesn't work on my M1 machine currently. node-fibers
is incompatible with Node.js >= 16, so there might be a breaking change in the future, probably usingasync/await
in places where it isn't needed right now.- The Meteor Galaxy hosting requires you to bring your own MongoDB provider. While this isn't too big an issue technically, the mental overhead for me is too big. When I pay a premium for "fully integrated hosting" I expect this included.
- Some stuff is not typed, so some module declarations might be needed to keep the TypeScript transpiler happy.
But to be fair, none of these points bother me too much right now. The development experience is awesome and deployment is solved for me using meteor up
and a $5 droplet.
Closing Thoughts
I really think that Meteor deserves much more attention than it has today. Especially small teams or solopreneurs could benefit greatly from the ability to "just ship features" and most projects won't even remotely require the scalability of FAANG companies.
But I also think that it is hard to explain the pure joy of the lightweight development cycle if you haven't experienced it. And of course, there are developers out there that were burned from early times and/or the drama in-between. But think about it: how much time would you need with your current tech stack to ship a fully working (nontrivial) MVP, including CI/CD and SSR and user account management?
I just tested it, with 3x two hours during my last vacation until I registered my new property in the Google search console. Six hours in total from idea to production.
- Number of words: 1530
- Reading time: 9 minutes
- Posted: 7 months ago
Linked Categories
Click around and find out β
Technology
Stay ahead of the tech curve! Discover cutting-edge tools, trends, and insights tailored for solopreneurs and indie hackers driving innovation.
Meteor
Streamline app development with this full-stack platform. Rapid prototyping, real-time updates, and integrated tools make it ideal for startups.
Related Posts β
AI Alignment Problem: a fresh perspective
2 months agoExploring a fresh approach to solving the AI alignment problem by focusing on intrinsic motivation and long-term thinking to ensure harmonious development between AI systems and humanity.
AI Alignment Proposal: v0.1
2 months agoMy personal shot at approaching the AI alignment problem. Allows for iterative refinement as well as immediate experimentation with current LLMs today.
Custom GPTs vs OpenAPI path parameters
6 months agoSeems that the AI can't do idiomatic API calls for a RESTful interface after all - or their HTTP client has some bug.
GPT4o Just Landed And Will Be Free For All!
6 months agoThe latest OpenAI ChatGPT model just got reveiled and it will be free for everyone - but more importantly: the GPT Store will be, too!
Rewrite it in Rust: Fun Weekend & Happy Wife
6 months agoHow I rewrote a pet project in Rust, shipped it within 2 days start-to-finish, and gained social credit along the way.
Latest Posts β
Owning a business is exhilarating, but itβs not for the faint of heart. Many aspiring entrepreneurs fail to move forward due to fear of the unknown; however, the right tactics and mindset can help you overcome your anxieties and put you on the path to flourishing. This guide shares practical tips for growing and managing common concerns on your entrepreneurial journey.
AI Alignment Problem: a fresh perspective
2 months agoExploring a fresh approach to solving the AI alignment problem by focusing on intrinsic motivation and long-term thinking to ensure harmonious development between AI systems and humanity.
AI Alignment Proposal: v0.1
2 months agoMy personal shot at approaching the AI alignment problem. Allows for iterative refinement as well as immediate experimentation with current LLMs today.
Custom GPTs vs OpenAPI path parameters
6 months agoSeems that the AI can't do idiomatic API calls for a RESTful interface after all - or their HTTP client has some bug.
GPT4o Just Landed And Will Be Free For All!
6 months agoThe latest OpenAI ChatGPT model just got reveiled and it will be free for everyone - but more importantly: the GPT Store will be, too!