Frameworks
Vue & manual setup
Mount the Clivly fetch handler by hand for Vue, Hono, Express, or any other runtime.
The docs work better when framework-specific scaffolding is on its own route instead of being buried in one huge page.
clivly.createClivlyHandler()
clivly.config.ts
Next.js
app/api/clivly/tick/route.tsTanStack Start
src/routes/api/clivly/tick.tsSvelteKit
src/routes/api/clivly/tick/+server.tsRemix
app/routes/api.clivly.tick.tsNuxt
server/api/clivly/tick.ts/api/clivly/tick
what Clivly calls
This is why `syncTrigger.path` is a single constant rather than a per-framework setting.
Every framework wraps the same createClivlyHandler(), and every route resolves to the same public URL: /api/clivly/tick. Vue + Vite, Hono, and Express are not scaffolded — mount the fetch handler in your own server layer, or prefer Nuxt when available. The rows above are the frameworks clivly init scaffolds for you; a hand-mounted handler lands at the same URL, you just choose the file yourself.
Anything else — Vue with a custom server, Hono, Express — mounts the same fetch handler by hand. It is a plain (Request) => Promise<Response>, so any runtime that speaks Web standards works.
Everything else
import { Hono } from "hono";
import { clivly } from "./clivly";
const app = new Hono();
const tick = clivly.createClivlyHandler();
// Optional: only add this when you explicitly configure verifyToken on the host.
const verify = clivly.createAuthVerifyHandler(async (request) => {
const session = await mySessionFromRequest(request);
return session
? { id: session.userId, email: session.email, name: session.name }
: null;
});
app.post("/api/clivly/tick", (c) => tick(c.req.raw));
app.get("/api/clivly/auth/verify", (c) => verify(c.req.raw));
export default app;clivly initscaffolds only the five frameworks above; anywhere else, mount the handler yourself.- Keep the path at
/api/clivly/tick, or setsyncTrigger.pathto whatever you chose.