No-code Integrations. Ejectable.

Integrate tools to your existing app without writing code. As the
need arises, eject integration code for full customizability.

This page is meant for vite-plugin-ssr users. If you aren't a vite-plugin-ssr user, then you won't understand this.

Example: Frontend

By using stem-react you get a React DX like Next.js powered by Vite and vite-plugin-ssr. For a Vue DX like Nuxt.js you can use stem-vue instead.

React integration for vite-plugin-ssr.
Vue integration for vite-plugin-ssr.


Usually, with vite-plugin-ssr, the user defines a renderer/ directory that determintes how pages are rendered. However, when using stem-react, it's node_modules/stem-react/renderer/ instead that determines how pages are rendered.

You can eject stem-react: the directory renderer/ is moved from node_modules/stem-react/renderer/ to your repository's root directory. In other words, after ejecting, you fully control how pages are rendererd. You can then even replace React with any UI framework you want (Preact, Solid, ...).

This means you can use stem-react to quickly get started and, if the need arises, you can eject in order to gain control and flexibility.

Example: authentication

You can add authentication to your app simply by installing the stem-nextauth package.

Authentication with NextAuth.js.

You have zero boilerplate code to write: stem-nextauth includes everything, including a UI at /login and /signup.

For stem-nextauth to work, you also have to install stem-prisma (enabling stem-nextauth to talk to your database), and stem-gmail (enabling stem-nextauth to send emails).

Database access with Prisma.
Send emails programmatically with Gmail's API and Nodemailer.

stem-* pacakges integrate with each other automatically by using open standards.


The stem-nextauth package automatically adds authentication to your app in a way that works for the majority of users, while you can eject the parts that don't work out for you.

For example, if you don't like the UI of /login and /signup that's built into stem-nextauth, you can eject and customize it.

If you eject all your stem-* packages, then you completely remove Stem. While only very few users need to go that extreme, it shows that you can gain as much control as needed.


Stem enables you to quickly get started and, if you need special needs as you scale, you can eject and take control over integration.