SvelteKit,
but with superpowers
A batteries-included framework built on SvelteKit. One Vite plugin. One config block. Database
ORM, auth, schema codegen, typed models, virtual modules — all wired together on every pnpm dev.
All the pieces, none of the glue
Stop wiring the same things together on every project. OmniSvelte handles it at the framework level.
Schema-Driven Database
Define your data model once in .schema.ts. OmniSvelte generates Drizzle tables, Zod validators, and typed ActiveRecord model classes on every save.
Auth, Wired In
Better-Auth pre-configured in svelte.config.js. Email, magic link, OAuth, 2FA, and passkeys — automatically hooked into SvelteKit sessions.
Virtual Module Aliases
Import $db, $auth/server, $auth/client, $models/*, $schema, $validation/* — generated paths that always resolve correctly, no hardcoding.
Model Relationships
hasMany, belongsTo, hasOne, belongsToMany — defined in your schema, resolved with .with([]) eager loading on any query.
Plugin System
A comprehensive OmniPlugin interface for extending tables, hooks, auth providers, CLI commands, routes, UI components, and realtime channels.
Zero Config Start
One Vite plugin. One config block. OmniSvelte handles hook injection, type generation, virtual modules, and wiring — on every pnpm dev.
One config block
Add the omni block
to your existing svelte.config.js.
Enable database and auth — OmniSvelte handles the rest.
- Zero Drizzle boilerplate
- Better-Auth wired to SvelteKit hooks
- Type declarations auto-generated
// svelte.config.js
const config = {
kit: { adapter: adapter() },
omni: {
database: {
enabled: true,
connection: { url: process.env.DATABASE_URL }
},
auth: {
enabled: true,
secret: process.env.BETTER_AUTH_SECRET,
emailAndPassword: { enabled: true }
}
}
};// src/lib/posts.schema.ts
import { defineSchema, field } from 'omni-svelte/schema';
export default defineSchema('posts', {
id: field.serial().primaryKey(),
title: field.string(255).required(),
slug: field.slug().required().unique(),
content: field.string().required(),
published: field.boolean().default(false),
userId: field.integer().required()
}, {
timestamps: true,
indexes: ['slug', 'published'],
softDeletes: false
});Define your schema once
Create a .schema.ts file with the fluent field.* builder. On every
save, OmniSvelte generates three outputs automatically.
Drizzle
table
Zod
validators
Model
class
Use the generated model
Import from virtual aliases — $models, $db, $auth/server — no path
management needed.
// OmniSvelte auto-generates $models/posts.model
import { Posts } from '$models/posts.model';
// Find
const post = await Posts.find(1);
const posts = await Posts.query()
.where('published', true)
.orderBy('created_at', 'desc')
.limit(10).get();
// Create / update / delete
const newPost = await Posts.create({ title, slug, content, userId });
await post.update({ title: 'New title' });
await post.delete();
// Relationships (eager loading)
const full = await Posts.with(['author', 'comments']).find(1);OmniSvelte vs plain SvelteKit
Same foundation. Everything you'd add manually — already wired in.
| Feature | OmniSvelte | Plain SvelteKit |
|---|---|---|
| SvelteKit routing | ||
| Database ORM | DIY | |
| Schema codegen (Drizzle + Zod + Models) | DIY | |
| Auth pre-wired | DIY | |
| Virtual module aliases | DIY | |
| Model relationships | DIY | |
| Lifecycle hooks | DIY | |
| Plugin system | DIY | |
| Works with any SvelteKit adapter |
Built for the long term
OmniSvelte starts with a solid foundation and grows incrementally — AI primitives, caching, realtime, payments, jobs, and more.
v0.1.0-alpha · Now
Core Foundation
Schema codegen, Drizzle models, Better-Auth, virtual modules, Plugin API types, Vite plugin
v0.2–v0.3 · Soon
CLI, DX & UI
omni generate remote, resource CRUD generation, Auth session live query, shadcn-svelte UI
v0.4–v1.0
Production Readiness
Realtime channels, caching, background jobs, payments, file storage, plugins
v1.1+
Ecosystem & AI
AI primitives, Local-first sync, Tauri desktop adapter, African infrastructure
Start building today
Free, open source, and ready to use. Add OmniSvelte to any SvelteKit project in minutes.