Skip to content

Repository files navigation

@vanenshi/expo-plugins

A small collection of Expo config plugins.

Install

npx expo install @vanenshi/expo-plugins

withDisplayName

Goal: Give each build variant (dev / beta / prod) its own home-screen display name on both iOS and Android — without touching the internal root name (which drives bundle structure and forces slow clean rebuilds when changed).

Underneath:

  • iOS — sets CFBundleDisplayName in Info.plist via withInfoPlist.
  • Android — sets app_name in strings.xml via withStringsXml.
// app.config.ts
export default {
  name: "MyApp", // internal project name — unchanged
  plugins: [
    ["@vanenshi/expo-plugins/display-name", { displayName: "MyApp (Beta)" }],
  ],
};

Options

Option Type Description
displayName string Name shown to users on the home screen (required).

withExpoGoogleFonts

Goal: Embed @expo-google-fonts/* faces into the native projects without manually listing every font path in your app config. The plugin reads the weight/style folder layout from your installed packages, resolves the .ttf file paths, and delegates to expo-font — so you only declare which font families and weights you want.

Underneath:

  • Discovery — walks @expo-google-fonts/<name> package folders, parses folder names like 400Regular / 700Bold_Italic, and collects .ttf paths.
  • Delegation — passes the resolved font manifest to expo-font/app.plugin (withFonts), which handles embedding into both Android assets and iOS Info.plist.
npx expo install expo-font @expo-google-fonts/roboto @expo-google-fonts/inter
{
  "plugins": [
    [
      "@vanenshi/expo-plugins/google-fonts",
      {
        "fonts": [
          {
            "packageName": "roboto",
            "weights": [400, 500, 700],
            "importItalic": true
          },
          { "packageName": "inter", "weights": [400, 600] }
        ]
      }
    ]
  ]
}

No separate ["expo-font", ...] entry is needed.

Need the raw expo-font options (e.g. to merge with local fonts)? Import buildExpoGoogleFontsOptions(input) and pass the result to ["expo-font", options] yourself.

Options

Option Type Default Description
fonts GoogleFontSpec[] Fonts to embed (see below).
projectRoot string process.cwd() Where to resolve @expo-google-fonts/* packages from.
warnOnMissing boolean true Warn when a package, weight, or .ttf is missing.

GoogleFontSpec: { packageName, fontFamily?, weights?, importItalic? }weights defaults to [400], fontFamily defaults to the package's metadata family name.


Development

This package uses expo-module-scripts and follows expo/config-plugins conventions.

pnpm install
pnpm run build   # compile src/ → build/
pnpm run lint
pnpm test

Example app

example is a minimal Expo app wiring both plugins, used to verify plugins work end-to-end via expo prebuild:

cd example
pnpm install
npx expo prebuild --clean
grep "Example (Beta)" android/app/src/main/res/values/strings.xml
grep "CFBundleDisplayName" ios/*/Info.plist

See example/README.md for details.

Releases

Packages

Contributors

Languages