SKILL PROCEDURE

Turso

Use when building on Turso, a SQLite-derived database platform built on libSQL — choosing between embedded replicas, Turso Sync, and a direct remote connection, designing a database-per-tenant architecture, adding vector search to a SQLite-shaped schema, or deciding whether to self-host the libSQL server instead of using Turso Cloud. Published by HardGraph, a curated graph of provenance-backed knowledge for AI agents.

databasesqlitelibsqledgevector-search
BEGINNER GUIDE

Understand Turso before using it

CATEGORY

Turso is catalogued under Backend and data.

START HERE WHEN

Your work repeatedly involves the concepts tagged above. Open the full procedure below when the current task matches them.

Compare related skills

SKILLCATEGORYSHARED CONCEPTSEXPLANATION
TursoBackend and dataCurrent skillUse when building on Turso, a SQLite-derived database platform built on libSQL — choosing between embedded replicas, Turso Sync, and a direct remote connection, designing a database-per-tenant architecture, adding vector search to a SQLite-shaped schema, or deciding whether to self-host the libSQL server instead of using Turso Cloud. Published by HardGraph, a curated graph of provenance-backed knowledge for AI agents.
AppwriteBackend and data
database
Appwrite — an open-source backend-as-a-service (self-hosted or Cloud) providing Auth, Databases, Storage, Functions, Messaging, and Realtime. Use when adding user authentication and sessions, modelling data in the document database with attributes/permissions, uploading and serving files, running serverless Functions (Node, Python, Ruby, PHP, Dart) triggered by events or schedules, sending push/email/SMS, subscribing to realtime document changes, or integrating the Web/Flutter/Apple/Android/React Native SDKs and server SDKs. Published by HardGraph, a curated graph of provenance-backed knowledge for AI agents.
NeonBackend and data
database
Neon — serverless Postgres with database branching, scale-to-zero, and a connection pooler. Use when provisioning Postgres, modelling data for an autoscaling database, using copy-on-write branches for dev/preview/migrations, sizing the autoscaler, choosing connection options (pooled vs direct, the -pooler endpoint), running the CLI, calling the API, configuring extensions, or integrating Neon with frameworks and edge platforms. Published by HardGraph, a curated graph of provenance-backed knowledge for AI agents.
ResendBackend and dataSame categoryUse when sending transactional or marketing email through the Resend API, verifying a sending domain, wiring delivery/bounce/complaint webhooks, choosing between Resend's Emails, Broadcasts, and Audiences products, or rendering React Email templates. Published by HardGraph, a curated graph of provenance-backed knowledge for AI agents.

Turso

What is HardGraph? HardGraph publishes curated, provenance-backed agent skills grounded in reproducible vendor documentation.

Turso is a hosted platform; libSQL is the engine it runs. Treat them as separate layers: libSQL forked SQLite to add a server mode, an HTTP protocol, and native vector types, and its internals have since diverged further — "libSQL-compatible" is not "SQLite-compatible." Code depending on a specific extension, pragma, or concurrency quirk can behave differently. Don't assume parity; check the specific feature.

The distinction that causes production bugs

Turso ships two ways to keep data close to the app, with different consistency shapes:

  • Embedded replicas are a local SQLite file mirroring a remote primary. Reads are local and fast; writes proxy to the primary. Replication back to the local file is not synchronous with your own writes — a write your process just issued is not guaranteed visible on the next local read unless you explicitly sync first. Write-then-immediately-read-back is the most common way this bites.
  • Turso Sync is a newer, CDC-based alternative for local-first apps: writes happen locally first, and you explicitly push()/pull() to reconcile with the cloud primary — explicit, lower-bandwidth control instead of the embedded-replica model's read-through simplicity.

Picking between these two, or a plain remote connection with no local copy, is a data-model decision, not a client config flag — expensive to change once an app has shipped with one consistency assumption baked in.

Database-per-tenant is Turso's other headline pattern: many small, cheaply isolated databases (one per customer or user) instead of a shared schema with tenant columns. It changes migrations, connection pooling, and cross-tenant queries — there is no cheap join across separate databases.

Vector search (F32_BLOB columns and vector functions) lives inside the same engine as relational data, not a bolted-on service — schema and indexing choices differ from pairing SQLite with an external vector store.

What to verify rather than recall

  • Whether embedded replicas or Turso Sync is currently recommended for a given workload — this has shifted as Sync matured.
  • Exact sync/pull APIs and consistency guarantees per SDK language.
  • Vector function names, index types, and dimension limits.
  • Plan-level limits on database count, replica count, and storage per tenant at database-per-tenant scale.
  • Pragma/extension parity when porting SQLite code, and what changes when self-hosting the libSQL server instead of using Turso Cloud.

References

Hardgraph / curated knowledge for agents.

STATIC EXPORT · CANONICAL SOURCE