THE BACKEND FRAMEWORK FOR NEXT.JS, NUXT & SVELTEKIT

Build the product.
Skip the plumbing.

A complete backend for Next.js, Nuxt, and SvelteKit.
Keep your framework. Get your backend together.

Get started Read the docs OPEN SOURCE · MIT LICENSED

Keep your framework.
Unlock a full backend.

Models, auth, jobs, and files. Connected inside the app you already know how to build.

Your routes. Your rendering. Your deployment.

See it in a real route
YOUR APPLICATIONNext.js
WEB LAYER
RoutesRenderingDeployment
HOLO BACKEND INSIDE YOUR APP
Typed modelsAuthenticationBackground jobsFile storage
ONE APPLICATIONFrontend freedom. Backend structure.

One click.
A connected backend.

From permission to persistence to background work.

AUTHORIZATION

Permissions belong
to your domain.

Define an ability once. Reuse the same decision in routes, jobs, and services.

Explore authorization
Inspect the real API
TSserver/abilities/publish-post.tsDOCUMENTED API
import { defineAbility, allow, deny }
  from '@holo-js/authorization'

export default defineAbility('posts.publish',
  context => context.user?.role === 'editor'
    ? allow()
    : deny('Editor access required.')
)

A backend decision.
Not a frontend migration.

Same backend conventions. The route syntax you already know.

Same model.
Same backend conventions.
TSapp/api/posts/route.ts
import Post from '@/server/models/Post'

export async function GET() {
  const posts = await Post
    .where('status', 'published')
    .latest()
    .paginate(15)

  return Response.json(posts)
}
Your route. Your rendering. Holo underneath.

Your code stays.
Your infrastructure can change.

One contract. Different drivers.
Explore what each module does.

@holo-js/storage

Different disks. Same file API.

Store files locally, serve public uploads, or use S3-compatible storage through the same API. Your media library builds on these disks with model collections and conversions.

CONFIG CHANGESdefaultDisk: 'local'
SAME APPLICATION CODE
await Storage.put('avatars/ava.png', file)
const avatar = await Storage.get('avatars/ava.png')
INTERACTIVE ILLUSTRATION

avatar.png → public disk

Storage uses the configured default disk. S3 credentials and disk configuration belong in your environment.

Explore storage →Explore the media library →

A TOOLKIT, NOT A TAKEOVER

A complete backend.
Your combination.

Pick your pieces. Your choices become your starter command.

3 optional modules selected
See your starter command
THE FOUNDATION

Your data, modeled.

Models, migrations, relationships.

PostgreSQLMySQLSQLite
Explore the ORM
IDENTITY & TRUST

Identity, handled.

Auth, sessions, and permissions.

Explore identity
WORK BEYOND THE REQUEST

Work, off the request.

Typed jobs. Explicit retries.

Explore background work
FILES, SPEED & CONNECTIONS

Files, wherever you need.

Local and cloud disks. One API.

Explore storage

Your next app.
Ready for more.

The stack you chose. One command to start.

YOUR OPTIONAL MODULES
npm create holo-js@latest my-app -- --framework next --database sqlite --package auth,queue,storage
Node 22.12+ · MIT licensedReview configuration after scaffolding.

Orange modules are included in your app.