The libSQL package is designed to work with database/sql to provide the usual methods you’d expect when working with databases in Go.

Embedded Replicas with Go are experimental and may break. It’s recommended you use (Remote only) instructions below.

In this Go quickstart we will learn how to:

  • Retrieve database credentials
  • Install Go libSQL
  • Connect to a local or remote Turso database
  • Execute a query using SQL
  • Sync changes to local database (optional)

Retrieve database credentials

You will need an existing database to continue. If you don’t have one, create one.

You will want to store these as environment variables.


First begin by adding libSQL to your project:



Now connect to your local or remote database using the libSQL connector:



You can execute a SQL query against your existing database. Create a function to query your database that accepts the pointer to sql.DB as an argument:

type User struct {
	ID   int
	Name string

func queryUsers(db *sql.DB)  {
  rows, err := db.Query("SELECT * FROM users")
  if err != nil {
    fmt.Fprintf(os.Stderr, "failed to execute query: %v\n", err)
  defer rows.Close()

  var users []User

  for rows.Next() {
    var user User

    if err := rows.Scan(&user.ID, &user.Name); err != nil {
      fmt.Println("Error scanning row:", err)

    users = append(users, user)
    fmt.Println(user.ID, user.Name)

  if err := rows.Err(); err != nil {
    fmt.Println("Error during rows iteration:", err)

Now inside func main() call queryUsers and pass in the pointer to sql.DB:


Sync (Embedded Replicas only)

When using embedded replicas you should call Sync() on the connector to sync your local database with the primary database.

func syncDatabase(connector *libsql.Connector) {
  if err := connector.Sync(); err != nil {
    fmt.Println("Error syncing database:", err)

The connector can automatically sync your database at a regular interval when using the NewEmbeddedReplicaConnectorWithAutoSync method:

duration := time.Minute
connector, err := libsql.NewEmbeddedReplicaConnector(dbPath, primaryUrl, authToken, duration)