Skip to content

Latest commit

 

History

History
202 lines (136 loc) · 4.48 KB

local-development.mdx

File metadata and controls

202 lines (136 loc) · 4.48 KB
title description
Local Development
Build locally using SQLite, libSQL Server or Turso.

Developers can build locally with Turso using either of the following methods:

Using a dump locally

You can always dump your production database and use it locally for development:

turso db shell your-database .dump > dump.sql
cat dump.sql | sqlite3 local.db
You can use any of the methods below with the `local.db` file, or you can use a new file name if you prefer to create a database from scratch.

SQLite

There are a few things to keep in mind when using SQLite for local development:

  • Doesn't have all the features of libSQL
  • Works with non-serverless based Turso SDKs

When working with an SDK, you can pass it a file: URL to connect to a SQLite database file instead of a remote Turso database:

import { createClient } from "@libsql/client";

const client = createClient({
  url: "file:local.db",
});
let client = libsql_client::Client::from_config(libsql_client::Config {
    url: url::Url::parse("file:local.db").unwrap(),
    auth_token: None,
})
.await
.unwrap();
package main

import (
  "database/sql"
  "fmt"
  "os"

  _ "github.com/tursodatabase/go-libsql"
)

func main() {
  dbName := "file:./local.db"

  db, err := sql.Open("libsql", dbName)
  if err != nil {
    fmt.Fprintf(os.Stderr, "failed to open db %s", err)
    os.Exit(1)
  }
  defer db.Close()
}
import libsql_client

client = libsql_client.create_client_sync(
    url="file:local.db"
)

You don't need to provide an authToken in development.

It's recommended to use environment variables for both url and authToken for a seamless developer experience.

Turso CLI

If you're using libSQL specific features like extensions, you should use the Turso CLI:

turso dev

This will start a local libSQL server and create a database for you. You can then connect to it using the url option in your SDK:

import { createClient } from "@libsql/client";

const client = createClient({
  url: "http://127.0.0.1:8080",
});
let client = libsql_client::Client::from_config(libsql_client::Config {
    url: url::Url::parse("http://127.0.0.1:8080").unwrap(),
    auth_token: None,
})
.await
.unwrap();
import libsql_client

client = libsql_client.create_client_sync(
    url="http://127.0.0.1:8080"
)

Changes will be lost when you stop the server.

If you want to persist changes, or use a production dump, you can pass the --db-file flag with the name of the SQLite file:

turso dev --db-file local.db

libSQL Server

You can build and run libSQL server (sqld) yourself locally, or inside your own infrastructure using the source code:

Turso Database

If you already have a database created with Turso, you can use that same one in development by passing the url option to your SDK.

Keep in mind that using the Turso hosted database will incur platform costs and count towards your quota. Consider using SQLite or Turso CLI for local development to avoid platform costs.

Connecting a GUI

During development you can easily connect to a SQLite, libSQL, or Turso database using one of the tools below: