Web developer and Remix co-founder Kent Dodds has opinions and he’s sharing them in a new opinionated starter for web applications called the Epic Stack.
Opinionated starter projects wire together tools so developers didn’t have to, Dodds explained. Create React App and Vue CLI are examples of popular starter projects. Starter projects have become less common in recent years because web development tools are more cohesive and there’s not quite as much “wiring” that needs to be done, Dodds added. While it’s easier now, he still sees a place for opinionated starter projects because there are still so many decisions that go into creating a single app.
“You could put all these tools up on a dartboard and throw a dart at it blindfolded and whatever it landed on, you go with that tool, you’ll probably be fine using that tool. And you know what — we all know it,” said Dodds, who now runs the developer education course Epic Web Dev. “We like to think that our project is the snowflake that needs to be exactly with the perfect set of tools, otherwise it will never succeed. But for most of us, it really doesn’t matter that much which tool we use. And yet we are indecisive.”
This is where starter projects can help developers … well, start projects quickly. For instance, the Epic Stack makes decisions about basics such as how to handle two-factor authentication, how the app will send email, how to build forms in the database, which roles to use, how error monitoring is handled, and which component library to use, he said.
“When you make the decisions, you have to wire things together,” he said. “Wiring things together doesn’t always work out perfectly well. All of this is just a big distraction from our desire to just ship our software.”
There are pros and cons to an opinionated project, of course. It’s easy to get started because it’s already set up and ready to go, but developers may disagree with the choices made in an opinionated starter project.
Why Build a Project Starter
The Epic Stack is designed to help developers get a jump start on a web application.
“If you’re building a single page marketing site, and it’s for a single event, and you’re not planning on maintaining it beyond that date, this is going to be overkill for you,” Dodds acknowledged. “If you don’t need authentication, there’s a bunch of stuff that you’ll probably need to rip out. But for the most part, this covers the majority of what developers are building on the web.”
The Epic Stack also serves as a reference implementation, he said.
“I think most people are going to get the most value out of the epic stack as a reference implementation because most of us aren’t building new apps every day,” he said.
Guiding Principles Behind the Epic Stack
To guide the project, Dodds established a number of guiding principles, which he outlined during a React Summit US virtual session in November.
“I should to be clear, I am the benevolent dictator of this project, and so the guiding principles are pretty much how I lead the project,” Dodds told The New Stack during a follow-up interview.
The first guiding principle is to limit services, he said, because every single service added to an application increases complexity.
“Now, sometimes that is going to reduce or solve other problems and so it’s worth that complexity,” he said during the React Summit session. “But especially if you’re just getting started on a new project or for the vast majority of projects that we all work on, you can have everything running on it in a single box and it will work just fine.”
Of course, there are some services that the project starter requires, but the first guiding principle requires that there be a real, justifiable reason to introduce a service.
The next guiding principle is to include only the most common use cases, which is why the epic stack also serves as a reference implementation.
“We have to include some things, but we don’t have to include everything. The idea is we want to limit the number of things that are included when you bootstrap the app,” he said. “Along with that, if you are just getting up and going, you don’t want to spend the first hour of your time signing up for a bunch of different services and setting keys and all that stuff. So we want to minimize the setup friction.”
That said, the third guiding principle is to optimize for adaptability in an industry where the only consistency is inconsistency, he added. Therefore, he has made it easy to swap out tools if developers want to use a different service, he said.
“We want to make it so that you can pivot around the different decisions that need to be made, and product changes and all that stuff,” he added. “So while I do feel very confident in the opinions that I have, I want to make it so that it’s easy for you to swap out different things if you do want to use a service for this thing or whatever.”
Finally, another guiding principle is support for offline development. That helps make the project starter more resilient to dependencies that go down, are temporarily unavailable, or are simply incomplete, he said.
What’s in the Epic Stack
He’s also incorporated decision documents into the GitHub repository. The decision documents are designed to help developers understand what he considered when he made big decisions about what to include in the Epic Stack.
Among the tools the Epic Stack brings together:
Remix. Dodds is the co-founder of Remix, a web framework for building React applications that leverages both JavaScript and TypeScript. He left around the time it was acquired by Shopify. “Remix allows me to build excellent user experiences and I love the code that I wrote to get there,” he said. He’s blogged about why he chose Remix over Next.js and other popular frameworks.
Resend. An API for sending email at scale. ”I would love to just send an email right from your box, but that just is not a thing that you can do if you want your emails to get to their destination,” Dodds said.
Fly.IO. Fly.io is for running full-stack applications and databases close to users. With that decision came Grafana’s app running dashboards and Sentry for code error monitoring, he said.
Github Actions. This is to deploy to both a production environment and a staging environment.
Docker. “I know that some of you are kind of shaking in your boots a little bit when you saw the Docker logo,” Dodds joked in his React Summit presentation. “But to be clear, you probably won’t need to touch this; it is a generated file for you. And if you ever do need to change it, you’ll be really glad that you can change it. It’s really, really powerful.”
Node.js. The runtime environment is battle-tested, he said.
Tailwind. For styling.
SQLite for the database and Prisma for accessing it. “SQLite is actually really, really powerful,” he said. “SQLite also allows us to reduce the number of services that we’re using. Your reliability of your database is going to be awesome and, because it’s on disk, there’s zero latency, so it’s really, really fast.”
Zod and Conform. “The combination gives us progressively enhanced typesafe forms,” he said.
It’s worth noting that he’s considering adding Stripe for e-commerce support. But there is one thing developers probably won’t see in the Epic Stack.
“One thing that’s unlikely to happen is more than one way to do the same thing,” he said. “If you don’t like the opinions of the Epic Stack, that’s totally fine. You can fork it and build your own version of the Epic Stack and then create new projects based on that.”
TRENDING STORIES
YOUTUBE.COM/THENEWSTACK
Tech moves fast, don't miss an episode. Subscribe to our YouTube channel to stream all our podcasts, interviews, demos, and more.
Loraine Lawson is a veteran technology reporter who has covered technology issues from data integration to security for 25 years. Before joining The New Stack, she served as the editor of the banking technology site Bank Automation News. She has...