Evolu – хуки для local-first разработки
Библиотека для создания local-first приложений. Поддерживает синхронизацию со сквозным шифрованием с использованием CRDT. Для локального хранения данных использует SQLite WASM. Особенности:
- Типизированная схема данных.
- Реактивные запросы.
- Работа в режиме реального времени: синхронизация при восстановление сети.
- Вместо SQL запросов используется типобезопасный query builder.
Описание схемы и создание хуков:
import * as S from "@effect/schema";
import * as E from "evolu";
const TodoId = E.id("Todo");
type TodoId = S.Infer<typeof TodoId>;
const TodoTable = S.struct({
id: TodoId,
title: E.NonEmptyString1000,
isCompleted: E.SqliteBoolean,
});
type TodoTable = S.Infer<typeof TodoTable>;
const Database = S.struct({
todo: TodoTable,
});
const { useQuery, useMutation, useOwner, useOwnerActions, useEvoluError } =
E.createHooks(Database);
Выполнение запросов:
const { rows } = useQuery((db) =>
db
.selectFrom("todo")
.select(["id", "title"])
.orderBy("updatedAt"),
// (row) => row
({ title, ...rest }) => title && { title, ...rest }
);
https://github.com/evoluhq/evolu