Skip to content

Schema

LiveStore provides a schema definition language for defining your database tables and mutation definitions. It’s also using the Effect Schema library.

Example

import { Schema } from 'effect'
export const Filter = Schema.Literal('all', 'active', 'completed')
const todos = DbSchema.table(
'todos',
{
id: DbSchema.text({ primaryKey: true }),
text: DbSchema.text({ default: '' }),
completed: DbSchema.boolean({ default: false }),
deleted: DbSchema.integer({ nullable: true }),
},
{ deriveMutations: true },
)
const app = DbSchema.table(
'app',
{
newTodoText: DbSchema.text({ default: '' }),
filter: DbSchema.text({ schema: Filter, default: 'all' }),
},
{ deriveMutations: { enabled: true, localOnly: true } },
)
export type Todo = DbSchema.FromTable.RowDecoded<typeof todos>
export type AppState = DbSchema.FromTable.RowDecoded<typeof app>
export const tables = { todos, app }
export const schema = makeSchema({ tables, mutations, migrations: { strategy: 'from-mutation-log' } })