CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-expo--config-types

TypeScript type definitions for Expo application configuration objects used in app.config.ts files

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

Expo Config Types

Expo Config Types provides comprehensive TypeScript type definitions for Expo application configuration objects used in app.config.ts files. These types ensure compile-time type safety and IDE autocompletion for all Expo configuration options, automatically generated from versioned JSON schemas maintained by the Expo server.

Package Information

  • Package Name: @expo/config-types
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @expo/config-types

Core Imports

import { ExpoConfig } from "@expo/config-types";

For CommonJS environments:

const { ExpoConfig } = require("@expo/config-types");

Basic Usage

import { ExpoConfig } from "@expo/config-types";

export default (): ExpoConfig => {
  return {
    name: "My Expo App",
    slug: "my-expo-app",
    version: "1.0.0",
    orientation: "portrait",
    icon: "./assets/icon.png",
    userInterfaceStyle: "light",
    splash: {
      image: "./assets/splash.png",
      resizeMode: "contain",
      backgroundColor: "#ffffff"
    },
    platforms: ["ios", "android"],
    ios: {
      bundleIdentifier: "com.example.myapp"
    },
    android: {
      package: "com.example.myapp"
    }
  };
};

Architecture

Expo Config Types is built around a hierarchical type system:

  • ExpoConfig: Main interface defining all configuration options for Expo applications
  • Platform-Specific Types: Specialized interfaces for iOS, Android, and Web platforms
  • Feature-Specific Types: Specialized interfaces for splash screens, notifications, and other features
  • Schema Generation: Types are automatically generated from Expo's versioned JSON schemas
  • Version Synchronization: Types stay synchronized with the latest Expo SDK capabilities

Capabilities

Main Configuration Interface

The primary ExpoConfig interface that defines all possible configuration options for Expo applications.

/**
 * The standard Expo config object defined in `app.config.js` files.
 */
interface ExpoConfig {
  /** The name of your app as it appears both within Expo Go and on your home screen as a standalone app */
  name: string;
  /** A URL-friendly name for your project that is unique across your account */
  slug: string;
  /** A short description of what your app is and why it is great */
  description?: string;
  /** The name of the Expo account that owns the project */
  owner?: string;
  /** Auto generated Expo account name and slug used for display purposes (@username/slug) */
  currentFullName?: string;
  /** Auto generated Expo account name and slug used for services (@username/slug) */
  originalFullName?: string;
  /** The Expo sdkVersion to run the project on */
  sdkVersion?: string;
  /** Property indicating compatibility between a build's native code and an OTA update */
  runtimeVersion?: string | {
    policy: "nativeVersion" | "sdkVersion" | "appVersion" | "fingerprint";
  };
  /** Your app version */
  version?: string;
  /** Platforms that your project explicitly supports. Defaults to ["ios", "android"] */
  platforms?: ("android" | "ios" | "web")[];
  /** GitHub repository URL */
  githubUrl?: string;
  /** Screen orientation lock */
  orientation?: "default" | "portrait" | "landscape";
  /** UI appearance mode */
  userInterfaceStyle?: "light" | "dark" | "automatic";
  /** Root view background color */
  backgroundColor?: string;
  /** App primary color (Android multitasker) */
  primaryColor?: string;
  /** App icon path/URL (1024x1024 recommended) */
  icon?: string;
  /** Legacy push notifications config (deprecated) */
  notification?: {
    icon?: string;
    color?: string;
    iosDisplayInForeground?: boolean;
    androidMode?: "default" | "collapse";
    androidCollapsedTitle?: string;
  };
  /** Android status bar configuration */
  androidStatusBar?: {
    barStyle?: "light-content" | "dark-content";
    backgroundColor?: string;
    hidden?: boolean;
    translucent?: boolean;
  };
  /** Android navigation bar configuration */
  androidNavigationBar?: {
    visible?: "leanback" | "immersive" | "sticky-immersive";
    barStyle?: "light-content" | "dark-content";
    backgroundColor?: string;
    enforceContrast?: boolean;
  };
  /** Development client settings */
  developmentClient?: {
    silentLaunch?: boolean;
  };
  /** URL scheme(s) to link into your app */
  scheme?: string | string[];
  /** Extra fields accessible via Constants.expoConfig.extra */
  extra?: {
    [k: string]: any;
  };
  /** EAS Updates configuration */
  updates?: {
    enabled?: boolean;
    checkAutomatically?: "ON_ERROR_RECOVERY" | "ON_LOAD" | "WIFI_ONLY" | "NEVER";
    useEmbeddedUpdate?: boolean;
    fallbackToCacheTimeout?: number;
    url?: string;
    codeSigningCertificate?: string;
    codeSigningMetadata?: {
      alg?: "rsa-v1_5-sha256";
      keyid?: string;
    };
    requestHeaders?: {
      [k: string]: any;
    };
    assetPatternsToBeBundled?: string[];
    disableAntiBrickingMeasures?: boolean;
    useNativeDebug?: boolean;
  };
  /** App metadata localization */
  locales?: {
    [k: string]: string | {
      [k: string]: any;
    };
  };
  /** Asset bundle patterns (deprecated) */
  assetBundlePatterns?: string[];
  /** Config plugins for adding extra functionality */
  plugins?: (string | [] | [string] | [string, any])[];
  /** Splash screen configuration */
  splash?: Splash;
  /** JavaScript engine selection (deprecated) */
  jsEngine?: "hermes" | "jsc";
  /** React Native new architecture flag */
  newArchEnabled?: boolean;
  /** Remote build caching provider */
  buildCacheProvider?: "eas" | {
    plugin: string;
    options?: {
      [k: string]: any;
    };
  };
  /** iOS-specific configuration */
  ios?: IOS;
  /** Android-specific configuration */
  android?: Android;
  /** Web-specific configuration */
  web?: Web;
  /** Experimental feature flags */
  experiments?: {
    autolinkingModuleResolution?: boolean;
    baseUrl?: string;
    buildCacheProvider?: "eas" | {
      plugin: string;
      options?: {
        [k: string]: any;
      };
    };
    supportsTVOnly?: boolean;
    tsconfigPaths?: boolean;
    typedRoutes?: boolean;
    turboModules?: boolean;
    reactCanary?: boolean;
    reactCompiler?: boolean;
    reactServerComponentRoutes?: boolean;
    reactServerFunctions?: boolean;
  };
  /** Internal developer tools configuration */
  _internal?: {
    pluginHistory?: {
      [k: string]: any;
    };
    [k: string]: any;
  };
}

Splash Screen Configuration

Base splash screen configuration used across platforms.

/**
 * Configuration for loading and splash screen for standalone apps.
 */
interface Splash {
  /** Color to fill the loading screen background */
  backgroundColor?: string;
  /** How the image will be displayed in the splash loading screen */
  resizeMode?: "cover" | "contain";
  /** Local path or remote URL to an image to fill the background of the loading screen */
  image?: string;
  [k: string]: any;
}

iOS Platform Configuration

Configuration specific to the iOS platform including App Store deployment, certificates, and iOS-specific features.

/**
 * Configuration that is specific to the iOS platform.
 */
interface IOS {
  /** Apple development team ID */
  appleTeamId?: string;
  /** Manifest path for iOS version during publish */
  publishManifestPath?: string;
  /** Bundle path for iOS version during publish */
  publishBundlePath?: string;
  /** Bundle identifier for iOS standalone app */
  bundleIdentifier?: string;
  /** Build number for iOS standalone app */
  buildNumber?: string;
  /** Background color for iOS app */
  backgroundColor?: string;
  /** URL scheme(s) to link into iOS app */
  scheme?: string | string[];
  /** App icon for iOS */
  icon?: string | IOSIcons;
  /** App Store URL */
  appStoreUrl?: string;
  /** iOS Bitcode optimizations */
  bitcode?: boolean | string;
  /** Private configuration with API keys */
  config?: {
    branch?: {
      apiKey?: string;
    };
    usesNonExemptEncryption?: boolean;
    googleMapsApiKey?: string;
    googleMobileAdsAppId?: string;
    googleMobileAdsAutoInit?: boolean;
  };
  /** Firebase Configuration File location */
  googleServicesFile?: string;
  /** Tablet screen size support */
  supportsTablet?: boolean;
  /** Tablet-only support flag */
  isTabletOnly?: boolean;
  /** Disable Slide Over and Split View on iPad */
  requireFullScreen?: boolean;
  /** UI appearance mode */
  userInterfaceStyle?: "light" | "dark" | "automatic";
  /** Info.plist configuration */
  infoPlist?: {
    [k: string]: any;
  };
  /** Entitlements configuration */
  entitlements?: {
    [k: string]: any;
  };
  /** Privacy manifests configuration */
  privacyManifests?: {
    NSPrivacyAccessedAPITypes?: {
      NSPrivacyAccessedAPIType: string;
      NSPrivacyAccessedAPITypeReasons: string[];
    }[];
    NSPrivacyTrackingDomains?: string[];
    NSPrivacyTracking?: boolean;
    NSPrivacyCollectedDataTypes?: {
      NSPrivacyCollectedDataType: string;
      NSPrivacyCollectedDataTypeLinked: boolean;
      NSPrivacyCollectedDataTypeTracking: boolean;
      NSPrivacyCollectedDataTypePurposes: string[];
    }[];
  };
  /** Associated Domains */
  associatedDomains?: string[];
  /** iCloud Storage usage flag */
  usesIcloudStorage?: boolean;
  /** Apple Sign-In usage flag */
  usesAppleSignIn?: boolean;
  /** Push Notifications Broadcast capability */
  usesBroadcastPushNotifications?: boolean;
  /** Contact notes access permission */
  accessesContactNotes?: boolean;
  /** iOS splash screen configuration */
  splash?: {
    backgroundColor?: string;
    resizeMode?: "cover" | "contain";
    image?: string;
    tabletImage?: string;
    dark?: {
      backgroundColor?: string;
      resizeMode?: "cover" | "contain";
      image?: string;
      tabletImage?: string;
      [k: string]: any;
    };
    [k: string]: any;
  };
  /** JavaScript engine for iOS (deprecated) */
  jsEngine?: "hermes" | "jsc";
  /** New architecture flag for iOS */
  newArchEnabled?: boolean;
  /** Runtime version for iOS platform */
  runtimeVersion?: string | {
    policy: "nativeVersion" | "sdkVersion" | "appVersion" | "fingerprint";
  };
  /** iOS app version */
  version?: string;
}

iOS Adaptive Icons

iOS platform icons supporting system appearance variations.

/**
 * Configuration that is specific to the iOS platform icons.
 */
interface IOSIcons {
  /** Light appearance icon */
  light?: string;
  /** Dark appearance icon */
  dark?: string;
  /** Tinted appearance icon */
  tinted?: string;
}

Android Platform Configuration

Configuration specific to the Android platform including Play Store deployment and Android-specific features.

/**
 * Configuration that is specific to the Android platform.
 */
interface Android {
  /** Manifest path for Android version during publish */
  publishManifestPath?: string;
  /** Bundle path for Android version during publish */
  publishBundlePath?: string;
  /** Package name for Android standalone app */
  package?: string;
  /** Version code required by Google Play */
  versionCode?: number;
  /** Background color for Android app */
  backgroundColor?: string;
  /** UI appearance mode */
  userInterfaceStyle?: "light" | "dark" | "automatic";
  /** URL scheme(s) to link into Android app */
  scheme?: string | string[];
  /** App icon for Android */
  icon?: string;
  /** Adaptive Launcher Icon settings */
  adaptiveIcon?: {
    foregroundImage?: string;
    monochromeImage?: string;
    backgroundImage?: string;
    backgroundColor?: string;
  };
  /** Google Play Store URL */
  playStoreUrl?: string;
  /** List of permissions to add to AndroidManifest.xml */
  permissions?: string[];
  /** List of permissions to block in AndroidManifest.xml */
  blockedPermissions?: string[];
  /** Firebase Configuration File location */
  googleServicesFile?: string;
  /** Private configuration with API keys */
  config?: {
    branch?: {
      apiKey?: string;
    };
    googleMaps?: {
      apiKey?: string;
    };
    googleMobileAdsAppId?: string;
    googleMobileAdsAutoInit?: boolean;
  };
  /** Android splash screen configuration */
  splash?: {
    backgroundColor?: string;
    resizeMode?: "cover" | "contain" | "native";
    image?: string;
    mdpi?: string;
    hdpi?: string;
    xhdpi?: string;
    xxhdpi?: string;
    xxxhdpi?: string;
    dark?: {
      backgroundColor?: string;
      resizeMode?: "cover" | "contain" | "native";
      image?: string;
      mdpi?: string;
      hdpi?: string;
      xhdpi?: string;
      xxhdpi?: string;
      xxxhdpi?: string;
      [k: string]: any;
    };
    [k: string]: any;
  };
  /** Custom intent filters configuration */
  intentFilters?: {
    autoVerify?: boolean;
    action: string;
    data?: AndroidIntentFiltersData | AndroidIntentFiltersData[];
    category?: string | string[];
  }[];
  /** App data backup configuration */
  allowBackup?: boolean;
  /** Software keyboard layout mode */
  softwareKeyboardLayoutMode?: "resize" | "pan";
  /** JavaScript engine for Android (deprecated) */
  jsEngine?: "hermes" | "jsc";
  /** New architecture flag for Android */
  newArchEnabled?: boolean;
  /** Runtime version for Android platform */
  runtimeVersion?: string | {
    policy: "nativeVersion" | "sdkVersion" | "appVersion" | "fingerprint";
  };
  /** Android app version */
  version?: string;
  /** Edge-to-edge mode support */
  edgeToEdgeEnabled?: boolean;
  /** Predictive back gesture support */
  predictiveBackGestureEnabled?: boolean;
}

Android Intent Filter Data

Data structure for Android intent filters used in deep linking configuration.

/**
 * Data structure for Android intent filters
 */
interface AndroidIntentFiltersData {
  /** URL scheme */
  scheme?: string;
  /** Hostname */
  host?: string;
  /** Port number */
  port?: string;
  /** Exact path for URLs */
  path?: string;
  /** Pattern for paths with wildcards */
  pathPattern?: string;
  /** Prefix for paths */
  pathPrefix?: string;
  /** Suffix for paths */
  pathSuffix?: string;
  /** Advanced pattern for paths (API 31+) */
  pathAdvancedPattern?: string;
  /** MIME type for URLs */
  mimeType?: string;
}

Web Platform Configuration

Configuration specific to the web platform including Progressive Web App (PWA) settings.

/**
 * Configuration that is specific to the web platform.
 */
interface Web {
  /** Web app build output mode */
  output?: "single" | "static" | "server";
  /** Web app favicon */
  favicon?: string;
  /** Web app name */
  name?: string;
  /** Web app short name */
  shortName?: string;
  /** Primary language for the app */
  lang?: string;
  /** Navigation scope of the website */
  scope?: string;
  /** Android toolbar color */
  themeColor?: string;
  /** General description of the website */
  description?: string;
  /** Text direction for name and description */
  dir?: "auto" | "ltr" | "rtl";
  /** Display mode for the website */
  display?: "fullscreen" | "standalone" | "minimal-ui" | "browser";
  /** URL that loads when user launches the application */
  startUrl?: string;
  /** Default orientation for browsing contexts */
  orientation?: "any" | "natural" | "landscape" | "landscape-primary" | "landscape-secondary" | "portrait" | "portrait-primary" | "portrait-secondary";
  /** Background color for the website */
  backgroundColor?: string;
  /** Status bar style */
  barStyle?: "default" | "black" | "black-translucent";
  /** Prefer native applications over website */
  preferRelatedApplications?: boolean;
  /** Experimental features */
  dangerous?: {
    [k: string]: any;
  };
  /** PWA splash screen configuration */
  splash?: {
    backgroundColor?: string;
    resizeMode?: "cover" | "contain";
    image?: string;
    [k: string]: any;
  };
  /** Firebase web configuration */
  config?: {
    firebase?: {
      apiKey?: string;
      authDomain?: string;
      databaseURL?: string;
      projectId?: string;
      storageBucket?: string;
      messagingSenderId?: string;
      appId?: string;
      measurementId?: string;
      [k: string]: any;
    };
    [k: string]: any;
  };
  /** Web bundler selection */
  bundler?: "webpack" | "metro";
  [k: string]: any;
}

Type Unions and Constants

The package defines several union types used throughout the configuration interfaces:

/** Screen orientation options */
type Orientation = "default" | "portrait" | "landscape";

/** User interface style options */
type UserInterfaceStyle = "light" | "dark" | "automatic";

/** Platform identifiers */
type Platform = "android" | "ios" | "web";

/** JavaScript engine options (deprecated) */
type JSEngine = "hermes" | "jsc";

/** Update check modes */
type UpdateCheckMode = "ON_ERROR_RECOVERY" | "ON_LOAD" | "WIFI_ONLY" | "NEVER";

/** Web output modes */
type WebOutput = "single" | "static" | "server";

/** Runtime version policy options */
type RuntimeVersionPolicy = "nativeVersion" | "sdkVersion" | "appVersion" | "fingerprint";

/** Splash image resize modes */
type ResizeMode = "contain" | "cover" | "native";

/** Android keyboard layout modes */
type KeyboardLayoutMode = "pan" | "resize";

/** Web display modes */
type WebDisplayMode = "fullscreen" | "standalone" | "minimal-ui" | "browser";

/** Status bar styles */
type StatusBarStyle = "light-content" | "dark-content";

/** Navigation bar visibility modes */
type NavigationBarVisibility = "leanback" | "immersive" | "sticky-immersive";

/** Notification modes */
type NotificationMode = "default" | "collapse";

/** Web text direction */
type TextDirection = "auto" | "ltr" | "rtl";

/** Web status bar styles */
type WebStatusBarStyle = "default" | "black" | "black-translucent";
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@expo/config-types@54.0.x
Publish Source
CLI
Badge
tessl/npm-expo--config-types badge