Hono Adapter
Adapter for integrating Better Auth Studio with Hono applications.
Import
import { betterAuthStudio } from 'better-auth-studio/hono';
betterAuthStudio()
Creates a Hono-compatible handler for Better Auth Studio.
Function Signature
function betterAuthStudio(config: StudioConfig): (c: Context) => Promise<Response>
Parameters
Studio configuration object containing authentication and feature settings.Show StudioConfig properties
Your Better Auth instance
Base path for the studio routes. Default: "/api/studio"
Access control configuration for the studio
Customization options for branding and theming
Last-seen tracking configuration
IP geolocation provider configuration
Event tracking and ingestion configuration
Tools configuration with exclude list
Returns
An async function that accepts a Hono Context and returns a Response
Usage
Basic Setup
import { Hono } from 'hono';
import { betterAuthStudio } from 'better-auth-studio/hono';
import { auth } from './auth';
import { defineStudioConfig } from 'better-auth-studio';
const app = new Hono();
const studioConfig = defineStudioConfig({
auth,
basePath: '/api/studio',
metadata: {
title: 'My App Studio',
theme: 'dark'
},
events: {
enabled: true,
tableName: 'auth_events'
}
});
const studioHandler = betterAuthStudio(studioConfig);
// Mount as a catch-all route
app.all('/api/studio/*', studioHandler);
export default app;
With Cloudflare Workers
import { Hono } from 'hono';
import { betterAuthStudio } from 'better-auth-studio/hono';
import { auth } from './auth';
const app = new Hono();
const studioHandler = betterAuthStudio({
auth,
basePath: '/api/studio',
events: {
enabled: true,
clientType: 'clickhouse',
client: // Your ClickHouse client
}
});
app.all('/api/studio/*', studioHandler);
export default app;
With Middleware
import { Hono } from 'hono';
import { cors } from 'hono/cors';
import { logger } from 'hono/logger';
import { betterAuthStudio } from 'better-auth-studio/hono';
import { auth } from './auth';
const app = new Hono();
// Global middleware
app.use('*', cors());
app.use('*', logger());
// Studio handler
const studioHandler = betterAuthStudio({
auth,
access: {
roles: ['admin']
}
});
app.all('/api/studio/*', studioHandler);
With TypeScript Types
import { Hono } from 'hono';
import type { Context } from 'hono';
import { betterAuthStudio } from 'better-auth-studio/hono';
import { auth } from './auth';
const app = new Hono();
const studioHandler: (c: Context) => Promise<Response> = betterAuthStudio({
auth
});
app.all('/api/studio/*', studioHandler);
Implementation Details
Request Conversion
The adapter converts Hono Context to the universal format:
type UniversalRequest = {
url: string; // URL pathname + search params
method: string; // c.req.method
headers: Record<string, string>; // c.req.raw.headers
body?: any; // Parsed from c.req.json() or c.req.parseBody()
};
Content Type Handling
The adapter automatically detects and parses:
application/json → c.req.json()
application/x-www-form-urlencoded → c.req.parseBody()
Response Handling
The adapter returns appropriate Hono response types based on content:
- JSON content →
c.json()
- HTML content →
c.html()
- Text content →
c.text()
- Buffer content →
c.body()
Error Handling
Errors are caught and returned as JSON responses:
{
error: "Internal server error"
}
Status code: 500