An isomorphic Go client for Supabase.
- Integration with Supabase.Realtime
- Realtime listeners for database changes
- Integration with Postgrest
- Access your database using a REST API generated from your schema & database functions
- Integration with Gotrue
- User authentication, including OAuth, email/password, and native sign-in
- Integration with Supabase Storage
- Store files in S3 with additional managed metadata
- Integration with Supabase Edge Functions
- Run serverless functions on the edge
- To get started, create a new project in the Supabase Admin Panel.
- Grab your Supabase URL and Supabase Public Key from the Admin Panel (Settings -> API Keys).
- Initialize the client!
Reminder: supabase-go
has some APIs that require the service_key
rather than the public_key
(for instance: the administration of users, bypassing database roles, etc.). If you are using the service_key
be sure it is not exposed client side. Additionally, if you need to use both a service account and a public/user account, please do so using a separate client instance for each.
Install the library to your go project:
go get github.com/supabase-community/supabase-go
client, err := supabase.NewClient(API_URL, API_KEY, &supabase.ClientOptions{})
if err != nil {
fmt.Println("Failed to initalize the client: ", err)
}
client, err := supabase.NewClient(url, key, nil)
options := &supabase.ClientOptions{
Headers: map[string]string{
"X-Custom-Header": "custom-value",
},
Schema: "custom_schema", // defaults to "public"
}
client, err := supabase.NewClient(url, key, options)
// ...
data, count, err := client.From("countries").Select("*", "exact", false).Execute()
For more see postgrest-go Query Builder documentation
The client provides comprehensive authentication features through the integrated GoTrue client.
// Sign in with email and password
session, err := client.SignInWithEmailPassword("[email protected]", "password")
if err != nil {
log.Fatal("Sign in failed:", err)
}
fmt.Printf("User ID: %s\n", session.User.ID)
fmt.Printf("Access Token: %s\n", session.AccessToken)
// Sign in with phone and password
session, err := client.SignInWithPhonePassword("+1234567890", "password")
if err != nil {
log.Fatal("Sign in failed:", err)
}
// Refresh an expired token
newSession, err := client.RefreshToken(session.RefreshToken)
if err != nil {
log.Fatal("Token refresh failed:", err)
}
// Enable automatic token refresh in the background
client.EnableTokenAutoRefresh(session)
// The client will automatically:
// - Refresh tokens before they expire (at 75% of expiry time)
// - Retry failed refreshes with exponential backoff
// - Update all service clients with new tokens