Edit this page
Learn about different ways to configure EAS Metadata.
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.
You can configure the path or name of the store config file with the eas.json metadataPath
property.
Besides the default JSON format, EAS Metadata also supports more dynamic config using JavaScript files.
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.
If you have the VS Code Expo Tools extension installed, you get auto-complete, suggestions, and warnings for store.config.json files.
{
"configVersion": 0,
"apple": {
"info": {
"en-US": {
"title": "Awesome App",
"subtitle": "Your self-made awesome app",
"description": "The most awesome app you have ever seen",
"keywords": ["awesome", "app"],
"marketingUrl": "https://example.com/en/promo",
"supportUrl": "https://example.com/en/support",
"privacyPolicyUrl": "https://example.com/en/privacy"
}
}
}
}
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.
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 fromeas metadata:pull
.
// 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;
{
"submit": {
"production": {
"ios": {
"metadataPath": "./store.config.js"
}
}
}
}
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.
The store.config.js function is evaluated in Node.js. If you need special values, like secrets, use environment variables.
// 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;
};
{
"submit": {
"production": {
"ios": {
"metadataPath": "./store.config.js"
}
}
}
}