Chirag's Blog
July 6, 2025
If I had a penny for each time a youtuber has launched his own tech stack, I would have 2 pennies, which isn't much but its weird that it happened twice.
I am talking about T3 Stack launched a while back by everyone's favourite Theo, but recently a new player has entered the market called JStack, by Josh who is the lead Devrel at Upstash. To be fair, its not even that recent, but as always I am late to the party I try to give a framework time to mature and gather feedback from community before giving it a shot.
So, did I prefer JStack over T3 stack? Did it have more compatibility with Appwrite, my favourite backend provider? Can it be hosted on Appwrite Sites? Let's find out.
Let's start with initialising the project:
Options selected:
Let's just quickly run a dev server to see what we get out of the box:
On skipping the ORM option, the stack still sets up a /src/server
folder with an example posts router. But it only mocks the DB using an array which does not persist:
We skipped the ORM option because Appwrite provides built-in schema management through its SDK, eliminating the need for a separate ORM layer. To get started, let's head over to https://cloud.appwrite.io to set up our project.
If you are using Appwrite for the first time, I highly recommend you check out our Start with Web docs.
Here is a quick setup guide:
.env
file in your project directory and paste in those values:This covers up on how to initialize Appwrite in normal Next.js project. Now we need to configure our Appwrite databases according to the project. For this demo, let's create a Posts
collection to shift the mock database JStack uses as an example to Appwrite.
main
, and keep it' ID as main as well:posts
and keep its ID as posts
.name
for now:That's it, we are all set with configuration on the Appwrite Console. Now let's set it up in our project. I will also take the help of the Appwrite CLI to help me set up things faster. You can learn more about how to install it by following the installation docs.
Once done, run:
Once done, let's utilize the last Types Generation feature to sync our defined types:
Result will look something like this:
Obviously pretty small for now, but a really helpful feature once the project expands and more collections are defined.
Final steps are to connect the Appwrite backend with our tech stack. For that let's create a simple appwrite.ts
file in src/lib
folder:
Now, we can modify the original post-router.ts
file to use the defined database:
And done! Now your JStack application is using Appwrite as its backend provider.
Until recently, to deploy your Next.js application, you had pretty low choices. But no more Appwrite Sites. Now, you can have your backend and frontend hosted on Appwrite.
Check out these docs on how to get started with Sites - https://appwrite.io/docs/advanced/self-hosting/sites
Let's deploy your application using Sites:
APP_DOMAIN
variable we defined earlier. For me I will keep it:And done! Your application should be live 🎉
You can checkout the demo application here - https://jstack-appwrite-template.appwrite.network/
Let's start by answering the question the blog began with: Do I prefer JStack over T3 Stack? I'm sorry, Theo, but I do.
JStack solves the fundamental problems I have always had with Next.js:
The most noticeable difference between T3 Stack and JStack is how light they are, mainly due to the inclusion of the TRPC protocol in T3 Stack. Most projects do not require it, and it makes the code 10x more complicated to maintain, in my opinion.
So, give JStack a shot if you are starting with a new project (or want to spend a weekend migrating your existing stack to it). Huge shoutout to Josh for creating this wonderful stack. And lastly, give Appwrite a chance to be your next all in one cloud platform, both for your backend and frontend needs.