Guides
Plan-enterprise-icon
Expo Application Services
API Reference

Configuring EAS Metadata

Warning-icon
EAS Metadata is in beta and subject to breaking changes.
EAS Metadata is configured by a store.config.json file at the root of your project.

Static store config

The default store config type for EAS Metadata is a simple JSON file. The code snippet below shows an example store config with basic App Store information written in English (U.S.).
You can find all configuration options in the store config schema.
Info-icon
If you have the VS Code Expo plugin installed, you get auto-complete, suggestions, and warnings for store.config.json files.
store.config.json
{
  "configVersion": 0,
  "apple": {
    "info": {
      "en-US": {
        "title": "Awesome App",
        "subtitle": "Your self-made awesome app",
        "description": "The most awesome app you've ever seen",
        "keywords": ["awesome", "app"],
        "marketingUrl": "https://example.com/en/promo",
        "supportUrl": "https://example.com/en/support",
        "privacyPolicyUrl": "https://example.com/en/privacy"
      }
    }
  }
}

Dynamic store config

At times, Metadata properties can benefit from dynamic values. For example, the Metadata copyright notice should contain the current year. This can be automated with EAS Metadata.
To generate content dynamically, start by creating a JavaScript config file store.config.js. Then, use the metadataPath property in the eas.json file to pick the JS config file.
Info-icon
eas metadata:pull can't update dynamic store config files. Instead, it creates a JSON file with the same name as the configured file. You can import the JSON file to reuse the data from eas metadata:pull.
store.config.js
// Use the data from `eas metadata:pull`
const config = require('./store.config.json');

const year = new Date().getFullYear();
config.apple.copyright = `${year} Acme, Inc.`;

module.exports = config;
eas.json
{
  "submit": {
    "production": {
      "ios": {
        "metadataPath": "./store.config.js"
      }
    }
  }
}

Store config with external content

When using external services for localizations, you have to fetch external content. EAS Metadata supports synchronous and asynchronous functions exported from dynamic store config files. The function results are awaited before validating and syncing with the stores.
Info-icon
The store.config.js function is evaluated in Node.js. If you need special values, like secrets, use environment variables.
store.config.js
// Use the data from `eas metadata:pull`
const config = require('./store.config.json');

module.exports = async () => {
  const year = new Date().getFullYear();
  const info = await fetchLocalizations('...').then(response => response.json());

  config.apple.copyright = `${year} Acme, Inc.`;
  config.apple.info = info;

  return config;
};
eas.json
{
  "submit": {
    "production": {
      "ios": {
        "metadataPath": "./store.config.js"
      }
    }
  }
}
  • Message-iconAsk a question on the forums
  • Edit-iconEdit this page

Was this doc helpful?