superapp
BackendAdapters

Hono

Deploy the superapp backend with Hono, the recommended adapter for Node.js and edge runtimes.

Hono is the recommended adapter. It works on Node.js, Bun, Deno, and Cloudflare Workers with zero config changes.

import { createEngine } from '@superapp/backend'
import { createHonoMiddleware } from '@superapp/backend/adapters/hono'
import { postgresProvider } from '@superapp/backend/integrations/postgres'
import { serve } from '@hono/node-server'
import { Hono } from 'hono'

const engine = createEngine({
  integrations: [postgresProvider],
  connections: {
    main: { type: 'postgres', url: process.env.PG_URL! },
  },
})

const app = new Hono()
app.route('/', createHonoMiddleware(engine))
serve({ fetch: app.fetch, port: 3001 })

With Authentication and Permissions

import { createEngine } from '@superapp/backend'
import { createHonoMiddleware } from '@superapp/backend/adapters/hono'
import { betterAuthProvider } from '@superapp/backend/auth/better-auth'
import { postgresProvider } from '@superapp/backend/integrations/postgres'
import { serve } from '@hono/node-server'
import { Hono } from 'hono'

const engine = createEngine({
  integrations: [postgresProvider],
  connections: {
    main: { type: 'postgres', url: process.env.PG_URL! },
  },
  auth: betterAuthProvider({
    secret: process.env.AUTH_SECRET!,
    userTable: {
      table: 'main.users',
      matchOn: { column: 'id', jwtField: 'id' },
    },
  }),
  permissions: {
    view_own_orders: {
      name: 'View own orders',
      table: 'main.orders',
      operations: { select: true },
      columns: '*',
      filter: { customer_id: { $eq: '$user.id' } },
    },
  },
  roles: {
    viewer: ['view_own_orders'],
  },
})

const app = new Hono()
app.route('/', createHonoMiddleware(engine))

serve({ fetch: app.fetch, port: 3001 }, (info) => {
  console.log(`Server running at http://localhost:${info.port}`)
})

Adding Custom Routes

Mount the engine middleware alongside your own Hono routes:

const app = new Hono()

// Custom routes
app.get('/health', (c) => c.json({ status: 'ok' }))

// Engine routes (/data, /schema, /auth/*, /admin)
app.route('/', createHonoMiddleware(engine))

serve({ fetch: app.fetch, port: 3001 })

With CORS

import { cors } from 'hono/cors'

const app = new Hono()

app.use('*', cors({
  origin: ['https://myapp.com'],
  credentials: true,
}))

app.route('/', createHonoMiddleware(engine))

Route Prefix

Mount the engine under a custom path prefix:

app.route('/api/v1', createHonoMiddleware(engine))
// Routes become: /api/v1/data, /api/v1/schema, /api/v1/auth/*, /api/v1/admin

On this page