HN पर रिलीज़: Triplit – सर्वर और क्लाइंट पर चलने वाला open source sync database
(github.com/aspen-cloud)Triplit परिचय
Triplit एक open source database है जो server और browser के बीच data को real time में sync करता है। यह Typescript package के रूप में उपलब्ध है, server पर data store करता है और client तक उसे बुद्धिमानी से sync करता है।
- real time sync: property level पर incremental updates और conflict resolution प्रदान करता है
- local caching: client-side database के रूप में काम करता है
- durable server-side storage: admin dashboard शामिल है
- plug-in storage providers: SQLite, IndexedDB, LevelDB, Memory आदि को support करता है
- optimistic updates: तेज interaction प्रदान करता है
- relational queries: complex data models को support करता है
- offline mode: automatic reconnect और consistency सुनिश्चित करता है
- rollback और retry management: update विफल होने पर उसे संभालता है
- schema: data safety और Typescript autocomplete प्रदान करता है
- permission management: server पर read और write permissions लागू करता है
- collaboration/multiplayer: CRDTs द्वारा संचालित
- low latency: delta patches का उपयोग कर network traffic को न्यूनतम रखता है
- simple API: Javascript और React में data query और mutation को support करता है
- पूरी तरह open source
Monorepo परिचय
triplit/packages में Triplit को चलाने वाले विभिन्न projects शामिल हैं:
- TriplitDB: browser, Node, Deno, React Native सहित सभी JS environments में चल सकता है, और network पर कई authors के साथ consistency बनाए रखते हुए तेज, real time updated queries प्रदान करता है
- Client: local और remote TriplitDB के साथ interact करने वाली browser library
- CLI: project scaffolding, full-stack development environment चलाने, server migrations आदि के लिए commands प्रदान करता है
- React: @triplit/client के लिए React bindings
- Svelte: @triplit/client के लिए Svelte bindings
- Console: Triplit project के data को देखने और बदलने, तथा schema manage करने वाला app
- Server: Triplit clients के बीच data sync के लिए Node server
- Server-core: Triplit चलाने वाले server बनाने के लिए protocol-agnostic library
- Docs: Nextra से निर्मित Triplit documentation
- Types: विभिन्न Triplit projects के लिए shared types
- UI: shadcn से निर्मित Triplit frontend projects के लिए shared UI components
त्वरित शुरुआत
नया project शुरू करें:
npm create triplit-app@latest my-app
मौजूदा project में dependency जोड़ें:
npm install --save-dev @triplit/cli
npm run triplit init
schema परिभाषित करें (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;
Triplit development sync server शुरू करें:
npm run triplit dev
environment variables सेट करें (.env file):
VITE_TRIPLIT_SERVER_URL=http://localhost:6543
VITE_TRIPLIT_TOKEN=copied-in-from-triplit-dev
app में query परिभाषित करें (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>
);
}
app शुरू करें, फिर दूसरे browser tab खोलकर real time data sync की पुष्टि करें।
GN⁺ की राय
- Triplit real time sync और local caching को मिलाकर तेज और consistent user experience प्रदान करता है।
- विभिन्न storage providers के support से flexible data management संभव होता है।
- offline mode और automatic reconnect features network instability की स्थिति में भी data consistency बनाए रखते हैं।
- simple API और कई frameworks के support के कारण यह developer-friendly है।
- हालांकि, initial setup और environment variable management कुछ जटिल हो सकते हैं।
1 टिप्पणियां
Hacker News राय
Triplit इस्तेमाल का अनुभव साझा: प्रोजेक्ट में Triplit का उपयोग कर रहा/रही हूँ, और डेटा मॉडल distributed (P2P) के लिए अच्छी तरह फिट बैठता है। लेकिन server authentication token बनाना और query language की सीमित expressiveness थोड़ी खलती है.
Evolu से तुलना: Triplit और Evolu के बीच फर्क यह है कि Triplit में
.subscribe()फीचर है, जबकि Evolu में advanced query features (SQL-आधारित) हैं, और browser में इस्तेमाल होने वाले database के प्रकार भी अलग हैं.Offline sync और schema evolution: offline sync protocol इस्तेमाल करने वाले database में, जब client versions अलग हों, तो schema evolution की समस्या को कैसे हल किया जाता है—यह जानने की जिज्ञासा है.
Client के database में सीधे लिखने पर सवाल: ऐसे apps समझ में नहीं आते जिनमें client को database में सीधे लिखने की अनुमति होती है। Supabase और Firestore को लेकर भी यही सवाल है.
Triplit में user settings management: Triplit का उपयोग user settings manage करने के लिए किया जा रहा है, ताकि app offline में भी अच्छी तरह काम करे। support team की तेज़ प्रतिक्रिया प्रभावशाली लगी.
AGPL लाइसेंस चुनने का कारण: यह जानना चाहा गया कि Triplit ने AGPL लाइसेंस क्यों चुना.
Local-first approach: mobile app में local-first approach का उपयोग किया जा रहा है, और दूसरे solutions की तुलना में यह जिज्ञासा है कि Triplit client-server sync solution क्यों देता है.
Rust bindings का अनुरोध: अगर Rust bindings जुड़ जाएँ, तो Tauri के साथ इस्तेमाल संभव होगा और offline-first app development में मदद मिलेगी.
React Native में Triplit इस्तेमाल का अनुभव: Triplit को React Native app में उपयोग किया जा रहा है, और इसकी query language, TypeScript support, offline support, तथा React Native support बहुत अच्छे लगे। open source और self-hosting की संभावना भी बड़े फायदे हैं.
भविष्य का app development: Triplit app development के भविष्य जैसा लगता है, लेकिन RethinkDB से इसकी तुलना और उनकी असफलता के कारणों पर विचार जानने की इच्छा है.
MongoDB और Triplit को साथ इस्तेमाल करने की संभावना: यह जानना चाहा गया कि क्या server side पर MongoDB और React side पर Triplit साथ में इस्तेमाल किए जा सकते हैं, या Triplit को एक नए database के रूप में अपनाना होगा.