Skip to content
Skip to content
Goodspeed

Connect Expo SecureStore to your Goodspeed app

Encrypted key-value storage for auth tokens, session data, and user credentials. The secure layer under every Goodspeed auth flow on native. Goodspeed wires Expo SecureStore into every app that needs it at generation time, so you start with a working integration, not a blank config and a documentation tab.

WHAT GETS WIRED IN

Built into every Expo SecureStore build

Every app Goodspeed generates with Expo SecureStore includes these wired integrations from the first build. No manual setup required.

ItemDescriptionStrength
ExpoSecureStoreAdapter used as the Supabase auth storage adapter on native, replacing the default AsyncStorageExpoSecureStoreAdapter used as the Supabase auth storage adapter on native, replacing the default AsyncStorage01
getItemAsync and setItemAsync wrapped in try/catch so unavailable keychain access degrades gracefully instead of crashinggetItemAsync and setItemAsync wrapped in try/catch so unavailable keychain access degrades gracefully instead of crashing02
Platform.OS guard ensures ExpoSecureStore is never imported on web, where it is unavailablePlatform.OS guard ensures ExpoSecureStore is never imported on web, where it is unavailable03
Token refresh handled automatically by Supabase's autoRefreshToken option, reading the encrypted session from SecureStoreToken refresh handled automatically by Supabase's autoRefreshToken option, reading the encrypted session from SecureStore04

Source: gas-template repository · identity/auth

REAL GENERATED CODE

A snippet from a Expo SecureStore integration the pipeline ships

This pattern comes directly from the gas-template codebase. The studio generates Expo SecureStore integration code like this for every app that includes it, not a placeholder you have to fill in yourself.

  1. SecureStore adapter

    // lib/supabase.ts: ExpoSecureStore auth adapter
    const ExpoSecureStoreAdapter = {
      getItem: async (key: string) => {
        try {
          return await SecureStore.getItemAsync(key);
        } catch {
          return null;
        }
      },
      setItem: async (key: string, value: string) => {
        try {
          await SecureStore.setItemAsync(key, value);
        } catch { /* ignore write failures */ }
      },
      removeItem: async (key: string) => {
        try {
          await SecureStore.deleteItemAsync(key);
        } catch { /* ignore */ }
      },
    };
GDaily Allergens

Today's log

Gluten
Tree nuts
Shellfish
Dairy
HomeScanLogProfile

START WITH EXPO SECURESTORE

Your Expo SecureStore integration, generated