Diluncurkan di HN: Triplit – database sinkronisasi open source yang berjalan di server dan klien
(github.com/aspen-cloud)Gambaran Umum Triplit
Triplit adalah database open source yang menyinkronkan data secara real-time antara server dan browser. Tersedia sebagai paket Typescript, menyimpan data di server dan menyinkronkannya ke klien secara cerdas.
- Sinkronisasi real-time: menyediakan pembaruan inkremental dan penyelesaian konflik pada tingkat properti
- Caching lokal: berjalan sebagai database sisi klien
- Penyimpanan sisi server yang tahan lama: termasuk dashboard admin
- Penyedia penyimpanan yang dapat dipasang: mendukung SQLite, IndexedDB, LevelDB, Memory, dan lainnya
- Pembaruan optimistis: memberikan interaksi yang cepat
- Query relasional: mendukung model data yang kompleks
- Mode offline: menjamin rekoneksi otomatis dan konsistensi
- Manajemen rollback dan retry: menangani saat pembaruan gagal
- Skema: menyediakan keamanan data dan autocomplete Typescript
- Manajemen izin: memaksa izin baca dan tulis di server
- Kolaborasi/multiplayer: ditenagai oleh CRDTs
- Latensi rendah: lalu lintas jaringan minimal menggunakan delta patch
- API sederhana: mendukung query dan transformasi data di Javascript dan React
- Sepenuhnya open source
Gambaran Umum Monorepo
triplit/packages berisi berbagai proyek yang menjalankan Triplit:
- TriplitDB: dapat berjalan di semua lingkungan JS seperti browser, Node, Deno, dan React Native, serta menyediakan query yang cepat, real-time, dan diperbarui sambil menjaga konsistensi di seluruh jaringan dengan banyak penulis
- Client: library browser untuk berinteraksi dengan TriplitDB lokal dan jarak jauh
- CLI: menyediakan perintah untuk scaffolding proyek, menjalankan lingkungan pengembangan full-stack, migrasi server, dan lainnya
- React: binding React untuk @triplit/client
- Svelte: binding Svelte untuk @triplit/client
- Console: aplikasi manajemen skema serta melihat dan mengubah data proyek Triplit
- Server: server Node untuk sinkronisasi data antar klien Triplit
- Server-core: library agnostik protokol untuk membangun server yang menjalankan Triplit
- Docs: dokumentasi Triplit yang dibangun dengan Nextra
- Types: tipe bersama untuk berbagai proyek Triplit
- UI: komponen UI bersama untuk proyek frontend Triplit yang dibangun dengan shadcn
Mulai Cepat
Memulai proyek baru:
npm create triplit-app@latest my-app
Menambahkan dependensi ke proyek yang sudah ada:
npm install --save-dev @triplit/cli
npm run triplit init
Mendefinisikan skema (my-app/triplit/schema.ts):
import { Schema as S, ClientSchema } from '@triplit/client';
export const schema = {
todos: {
schema: S.Schema({
id: S.Id(),
text: S.String(),
completed: S.Boolean({ default: false }),
}),
},
} satisfies ClientSchema;
Menjalankan server sinkronisasi pengembangan Triplit:
npm run triplit dev
Mengatur variabel lingkungan (file .env):
VITE_TRIPLIT_SERVER_URL=http://localhost:6543
VITE_TRIPLIT_TOKEN=copied-in-from-triplit-dev
Mendefinisikan query di aplikasi (contoh React):
import { TriplitClient } from '@triplit/client';
import { useQuery } from '@triplit/react';
import { schema } from '../triplit/schema';
const client = new TriplitClient({
schema,
serverUrl: import.meta.env.VITE_TRIPLIT_SERVER_URL,
token: import.meta.env.VITE_TRIPLIT_TOKEN,
});
function App() {
const { results: todos } = useQuery(client.query('todos'));
return (
<div>
{Array.from(todos.values()).map((todo) => (
<div key={todo.id}>
<input
type="checkbox"
checked={todo.completed}
onChange={() =>
client.update('todos', todo.id, (todo) => ({
todo.completed = !todo.completed,
}))
}
/>
{todo.text}
</div>
))}
</div>
);
}
Jalankan aplikasi, buka tab browser lain, lalu periksa sinkronisasi data real-time.
Pendapat GN⁺
- Triplit menggabungkan sinkronisasi real-time dan caching lokal untuk memberikan pengalaman pengguna yang cepat dan konsisten.
- Mendukung berbagai penyedia penyimpanan sehingga pengelolaan data menjadi fleksibel.
- Mode offline dan fitur rekoneksi otomatis menjaga konsistensi data bahkan dalam kondisi jaringan yang tidak stabil.
- API yang sederhana dan dukungan untuk berbagai framework membuatnya ramah bagi developer.
- Namun, pengaturan awal dan pengelolaan variabel lingkungan bisa agak rumit.
1 komentar
Komentar Hacker News
Berbagi pengalaman menggunakan Triplit: Sedang menggunakan Triplit dalam proyek, dan model datanya cocok untuk pendekatan terdistribusi (P2P). Namun, pembuatan token autentikasi server dan kurang ekspresifnya bahasa kueri terasa kurang memuaskan.
Perbandingan dengan Evolu: Perbedaan Triplit dan Evolu antara lain fitur
.subscribe()milik Triplit, fitur kueri tingkat lanjut Evolu (berbasis SQL), serta jenis database yang digunakan di browser.Sinkronisasi offline dan evolusi skema: Penasaran bagaimana masalah evolusi skema diselesaikan pada database yang menggunakan protokol sinkronisasi offline ketika versi klien berbeda-beda.
Keraguan tentang klien menulis langsung ke database: Sulit memahami aplikasi yang mengizinkan klien menulis langsung ke database. Keraguan yang sama juga ada terhadap Supabase dan Firestore.
Pengelolaan pengaturan pengguna dengan Triplit: Menggunakan Triplit untuk mengelola pengaturan pengguna, sehingga aplikasi tetap berjalan baik meski offline. Respons cepat dari tim dukungan sangat mengesankan.
Alasan memilih lisensi AGPL: Penasaran mengapa Triplit memilih lisensi AGPL.
Pendekatan local-first: Sedang menggunakan pendekatan local-first untuk aplikasi mobile, dan ingin tahu mengapa Triplit menyediakan solusi sinkronisasi klien-server dibanding solusi lain.
Permintaan binding Rust: Jika binding Rust ditambahkan, Triplit bisa digunakan bersama Tauri dan akan membantu pengembangan aplikasi offline-first.
Pengalaman menggunakan Triplit di React Native: Sedang menggunakan Triplit di aplikasi React Native, dan bahasa kueri, dukungan TypeScript, dukungan offline, serta dukungan React Native sangat baik. Sifat open source dan kemungkinan self-hosting juga menjadi kelebihan.
Masa depan pengembangan aplikasi: Triplit terasa seperti masa depan pengembangan aplikasi, tetapi penasaran bagaimana perbandingannya dengan RethinkDB dan alasan kegagalan mereka.
Kemungkinan menggabungkan MongoDB dan Triplit: Penasaran apakah MongoDB bisa digunakan di sisi server dan Triplit di sisi React, atau apakah Triplit harus digunakan sebagai database baru.