FAQ
Frequently asked questions about zopio
.
Why is Clerk the default?
Given that the docs say Philosophy that the stack is thought to keep things lowcost and simple. So why is Clerk the default? It’s a paid app, and on top of that you kind of “spread” your user info in two databases instead of keeping it all in your own.
Clerk is the default because it offers one of the most comprehensive and production-ready authentication solutions for modern apps—especially for teams with enterprise needs.
It includes user management, multi-tenant orgs, MFA, SSO, audit logs, RBAC, and even GDPR tooling—all in a fully hosted and secure package that integrates seamlessly with the zopio
stack. This dramatically reduces development time and long-term maintenance overhead.
That said, we understand the importance of cost and data ownership—especially for early-stage or privacy-conscious teams.
zopio
is modular, and you’re free to replace Clerk with open-source alternatives like Auth.js, Better Auth, Supabase Auth, or Keycloak depending on your needs. We aim to support both plug-and-play defaults and customizable integrations, keeping with our philosophy of speed, simplicity, and flexibility.
Why don’t you use trpc?
While tRPC is a great tool for building type-safe APIs, Next.js Server Actions provide similar benefits with tighter framework integration. This native solution reduces complexity while maintaining the type safety that makes tRPC attractive. Since Server Actions are part of the framework itself, they’re also likely to receive continued optimization and feature improvements directly from the Next.js team.
Why did you pick X as the default tool instead of Y?
The default zopio
tooling was chosen by our core team at Zopio Labs after having used them in numerous production applications. It doesn’t mean they’re the best tools, it means they’re the ones that helped us launch quickly. Tools and tastes change over time and it’s inevitable that the defaults will change at some point.
That being said, if you really believe tool Y is a much better choice than tool X, feel free to start up a conversation on Discussions and we can hash it out!
Why is there a suppressHydrationWarning
on every html
tag?
This is the recommendation by next-themes
to supress the warning stemming from determining theme on the client side.
Why are there unused dependencies like import-in-the-middle
?
Without these packages, Turbopack throws warnings highlighting cases where packages are being used but are not installed so it can fail when running in production.
This was already an issue when we were using Webpack, it just never warned us that it was missing. This can be fixed by installing the external packages into the project itself.
Why are certain folders ignored by the linting configuration?
There are three types of files that are ignored by the linting configuration:
- shadcn/ui components, libraries, and hooks - shadcn/ui has its own linting configuration that is less strict than the one used in this project. As such, we ignore these files to avoid modifying them. This makes it easier to update shadcn/ui in the future.
- Collaboration package configuration - This is a package that is used to configure the collaboration package. The types are stubs and fail some of the linting rules, but it’s not important unless you’re using them.
- Internal documentation files - These are the documentation files for this project. They’re deleted when you initialize the project, so they’re not important to lint.