{"_rev":"5-9a6ecdf1d60f1b073ec23c5bb62c7d66","time":{"created":"2026-05-07T03:46:16.263Z","modified":"2026-05-07T03:46:16.867Z","1.0.0-beta.6":"2026-05-07T03:25:41.114Z","1.0.0":"2026-05-07T03:27:48.381Z","1.1.0":"2026-05-07T03:46:16.618Z"},"_id":"@cabrera-evil/semantic-release-expo","name":"@cabrera-evil/semantic-release-expo","dist-tags":{"latest":"1.1.0"},"versions":{"1.1.0":{"name":"@cabrera-evil/semantic-release-expo","version":"1.1.0","description":"An Expo implementation for semantic release, so you don't have to bother","keywords":["expo","react","native","semantic","release"],"publishConfig":{"access":"public"},"main":"./dist/index.js","types":"./dist/index.d.ts","homepage":"https://github.com/cabrera-evil/semantic-release-expo#readme","bugs":{"url":"https://github.com/cabrera-evil/semantic-release-expo/issues"},"repository":{"type":"git","url":"git+https://github.com/cabrera-evil/semantic-release-expo.git"},"license":"MIT","author":{"name":"cabrera-evil","email":"info@cabrera-dev.com"},"maintainers":[{"name":"cabrera-evil","email":"info@cabrera-dev.com"}],"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json && tsc-alias --project tsconfig.build.json","start":"tsx -r tsconfig-paths/register src/index.ts","dev":"tsx watch -r tsconfig-paths/register src/index.ts","lint":"eslint . --fix","lint:check":"eslint .","lint:fix":"pnpm lint && pnpm format","format":"prettier --write .","format:check":"prettier --check .","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","check-types":"tsc --project tsconfig.build.json --noEmit","prepare":"node .husky/install.mjs"},"dependencies":{"detect-indent":"^7.0.2","detect-newline":"^4.0.1","fs-extra":"^11.3.4","lodash":"^4.18.1","semver":"^7.7.4"},"devDependencies":{"@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0","@commitlint/travis-cli":"^20.5.0","@eslint/compat":"^1.4.1","@eslint/eslintrc":"^3.3.3","@eslint/js":"^9.39.2","@eslint/json":"^0.12.0","@semantic-release/changelog":"^6.0.3","@semantic-release/error":"^4.0.0","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@types/fs-extra":"^11.0.4","@types/jest":"^30.0.0","@types/lodash":"^4.17.24","@types/node":"^25.5.0","@types/semver":"^7.7.1","@typescript-eslint/eslint-plugin":"^8.58.0","@typescript-eslint/parser":"^8.58.0","commitlint":"^20.5.0","conventional-changelog-conventionalcommits":"^9.3.1","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-plugin-import":"^2.32.0","eslint-plugin-prettier":"^5.5.5","globals":"^17.4.0","husky":"^9.1.7","jest":"^30.3.0","lint-staged":"^16.4.0","prettier":"^3.8.1","prettier-plugin-organize-imports":"^4.3.0","rimraf":"^6.1.3","semantic-release":"^24.2.9","semantic-release-export-data":"^1.2.0","ts-jest":"^29.4.9","tsc-alias":"^1.8.16","tsconfig-paths":"^4.2.0","tsx":"^4.21.0","typescript":"^6.0.2","typescript-eslint":"^8.55.0"},"engines":{"node":">=22.0.0"},"packageManager":"pnpm@10.33.4","gitHead":"c10333d56c2c0e5b6081f779827b59faedb6a17e","_id":"@cabrera-evil/semantic-release-expo@1.1.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-iTRfZKaJdFyuPYetZr7ZeB6KpGS3UiPE8LFbcZ5alwpUTlbEML5SoTvN/RpHeMylQYbhlD+PeNcMUuLFrKT6UA==","shasum":"ab155853f7aa3cee85a98866b8002bea05d1d88a","tarball":"https://registry.npmjs.org/@cabrera-evil/semantic-release-expo/-/semantic-release-expo-1.1.0.tgz","fileCount":41,"unpackedSize":187056,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFhJfOl6GeRGKmAJiA7vmOn807jXyHvr55nu4NRzgeAUAiAVf9+FsVLuYDsi52c3aoWL8lev+am1HfDeSbbk29jQFQ=="}]},"_npmUser":{"name":"cabrera-evil","email":"info@cabrera-dev.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/semantic-release-expo_1.1.0_1778125576438_0.6259317667931628"},"_hasShrinkwrap":false}},"maintainers":[{"name":"cabrera-evil","email":"info@cabrera-dev.com"}],"description":"An Expo implementation for semantic release, so you don't have to bother","homepage":"https://github.com/cabrera-evil/semantic-release-expo#readme","keywords":["expo","react","native","semantic","release"],"repository":{"type":"git","url":"git+https://github.com/cabrera-evil/semantic-release-expo.git"},"author":{"name":"cabrera-evil","email":"info@cabrera-dev.com"},"bugs":{"url":"https://github.com/cabrera-evil/semantic-release-expo/issues"},"license":"MIT","readme":"# Expo - Semantic Release\n\n[![Latest Release](https://img.shields.io/github/release/cabrera-evil/semantic-release-expo/all.svg?style=flat-square)](https://github.com/cabrera-evil/semantic-release-expo/releases)\n\nAn [Expo][expo] implementation for [semantic release][semantic-release], so you don't have to bother.\n\n## How it works\n\nSemantic release will first determine a new version based on your likings.\nThis plugin will then search for your [Expo manifest(s)][expo-manifest] and update it accordingly.\nNot only will this update the [`version`][expo-version] property within the manifest.\nIt will also update the [Android `versionCode`][expo-version-android] and [iOS `buildNumber`][expo-version-ios] platform too, based on the [configuration](#configuration).\n\n### Verify Conditions\n\nBefore such a smooth, carefree release can take place, the plugin must validate the existence of a manifest.\nThis check takes place in the [verify condition][semantic-release-steps] step of semantic release.\nThe name of the Expo app, defined in the [`name` property][expo-name], is dumped to console to provide some feedback for successful validation.\n\n### Prepare\n\nThis plugin writes the actual changes to the manifest during preparation.\nAfter this step, you can [publish to Expo][expo-publish], [create a new build][expo-build] or add the changes in a [release commit][semantic-release-commit].\nThe [`version` property][expo-version] within the manifest is always updated.\nAll of the platform specific changes are only applied when the platform is enabled.\n\n> It is highly recommended to add the Expo manifest (`app.json`) to the [list of assets][semantic-release-assets] to include in the release commit.\n\n## Usage\n\nHere is an example configuration with automated changelogs, `package.json` versions, Expo and git release commits.\n\n```json\n{\n    \"verifyConditions\": [\n        \"@cabrera-evil/semantic-release-expo\",\n        \"@semantic-release/changelog\",\n        \"@semantic-release/git\",\n        \"@semantic-release/npm\"\n    ],\n    \"prepare\": [\n        \"@cabrera-evil/semantic-release-expo\",\n        \"@semantic-release/changelog\",\n        \"@semantic-release/npm\",\n        {\n            \"path\": \"@semantic-release/git\",\n            \"assets\": [\n                \"CHANGELOG.md\",\n                \"package.json\",\n                \"package-lock.json\",\n                \"app.json\"\n            ]\n        }\n    ],\n    \"publish\": false,\n    \"success\": false,\n    \"fail\": false\n}\n```\n\n## Configuration\n\nBy default this plugin uses configuration that should work straight out of the box.\nUnfortunately, all apps are different and sometimes require a specific release flow.\nTo satisfy these needs, you can customize some of these settings below.\n\n### Multiple manifests\n\nNormally, an Expo app should have a single manifest located at `/app.json`.\nBut you might have good reasons to use non-standard or multiple manifests.\nFor example, if you need to [create multiple versions/flavours and allow them to work side-by-side][info-multiple-manifests], you need multiple manifests.\nTo configure this plugin, you can provide a list of manifests to update.\n\n```json\n{\n    \"prepare\": [\n        {\n            \"path\": \"@cabrera-evil/semantic-release-expo\",\n            \"manifests\": [\n                \"app.test.json\",\n                \"app.staging.json\",\n                \"app.production.json\"\n            ]\n        }\n    ]\n}\n```\n\n> `manifests` accepts either a single string, or a list of strings.\n\n### Version templates\n\nUnfortunately, right now there is no \"universal\" versioning which can be used across all platforms.\nFor example, iOS can simply use the exact semantic version (e.g. `2.5.1`) but [Android can't][info-android-semver].\nTo allow multiple \"tactics\" or personal favorites, you can change the so called \"versioning templates\".\nThese templates use [lodash template][lodash-template] to build new versions.\nEvery version string, `version`, `Android versionCode` and `iOS buildNumber` can be modified independently.\n\n```json\n{\n    \"prepare\": [\n        {\n            \"path\": \"@cabrera-evil/semantic-release-expo\",\n            \"versions\": {\n                \"version\": \"${next.raw}\",\n                \"android\": \"${code}\",\n                \"ios\": \"${next.raw}\"\n            }\n        }\n    ]\n}\n```\n\n> `versions` accepts either a single string for all versions, or a (partial) object with templates. By default the `${recommended}` template is used.\n\n#### Version template variables\n\nThe following variables are available within the templates.\n\n| name        | type                    | description |\n| ---         | ---                     | --- |\n| expo        | [`SemVer`][info-semver] | The semver-coerced Expo SDK version |\n| last        | [`SemVer`][info-semver] | The semver-coerced last release version |\n| next        | [`SemVer`][info-semver] | The semver-coerced next release version |\n| code        | `Number`                | The (Android) version code, using the [versioning approach by Maxi Rosson][info-android-versioncode] |\n| increment   | `Number`                | An incremented number of the previous version, [discouraged because of non-deterministic behaviour][repo-issue-increments] |\n| recommended | `String` or `Number`    | _differs per versioning/platform, listed below_ |\n\n##### Recommended per version type\n\n| version                                     | example     | description |\n| ---                                         | ---         | --- |\n| [version][expo-version]                     | `1.2.3`     | The \"raw\" next release version (also available in `${next.raw}`) |\n| [Android versionCode][expo-version-android] | `290010203` | The [versioning approach by Maxi Rosson][info-android-versioncode] (same as `${code}`) |\n| [iOS buildNumber][expo-version-ios]         | `1.2.3`     | The \"raw\" next release version (also available in `${next.raw}`) |\n\n> In these examples Expo SDK `29.x.x` and SemVer `1.2.3` is used.\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n\n[expo]: https://expo.io/\n[expo-build]: https://docs.expo.io/versions/latest/distribution/building-standalone-apps\n[expo-manifest]: https://docs.expo.io/versions/latest/workflow/configuration\n[expo-name]: https://docs.expo.io/versions/latest/workflow/configuration#name\n[expo-publish]: https://docs.expo.io/versions/latest/workflow/publishing\n[expo-version]: https://docs.expo.io/versions/latest/workflow/configuration#version\n[expo-version-android]: https://docs.expo.io/versions/latest/workflow/configuration#android\n[expo-version-ios]: https://docs.expo.io/versions/latest/workflow/configuration#ios\n[semantic-release]: https://github.com/semantic-release/semantic-release\n[semantic-release-assets]: https://github.com/semantic-release/git#assets\n[semantic-release-commit]: https://github.com/semantic-release/git#prepare\n[semantic-release-steps]: https://github.com/semantic-release/semantic-release#release-steps\n[lodash-template]: https://www.npmjs.com/package/lodash.template\n[info-multiple-manifests]: https://blog.expo.io/setting-up-expo-and-bitbucket-pipelines-8995ef036a18#e09a\n[info-android-semver]: https://github.com/semver/semver/issues/309\n[info-android-versioncode]: https://medium.com/@maxirosson/versioning-android-apps-d6ec171cfd82\n[info-semver]: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/257c8bc48a08620b77088af209ff3f4153221784/types/semver/index.d.ts#L152-L171\n[repo-issue-increments]: https://github.com/cabrera-evil/semantic-release-expo/issues/4#issuecomment-417583573\n","readmeFilename":"README.md"}