expo-dev-launcher 55.0.29 → 55.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 55.0.31 — 2026-05-01
14
+
15
+ _This version does not introduce any user-facing changes._
16
+
17
+ ## 55.0.30 — 2026-05-01
18
+
19
+ ### 🎉 New features
20
+
21
+ - [plugin] Add option to disable tools button by default. ([#44251](https://github.com/expo/expo/pull/44251) by [@alanjhughes](https://github.com/alanjhughes))
22
+
13
23
  ## 55.0.29 — 2026-04-21
14
24
 
15
25
  ### 🐛 Bug fixes
@@ -26,13 +26,13 @@ expoModule {
26
26
  }
27
27
 
28
28
  group = "host.exp.exponent"
29
- version = "55.0.29"
29
+ version = "55.0.31"
30
30
 
31
31
  android {
32
32
  namespace "expo.modules.devlauncher"
33
33
  defaultConfig {
34
34
  versionCode 9
35
- versionName "55.0.29"
35
+ versionName "55.0.31"
36
36
  }
37
37
 
38
38
  buildTypes {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-dev-launcher",
3
3
  "title": "Expo Development Launcher",
4
- "version": "55.0.29",
4
+ "version": "55.0.31",
5
5
  "description": "Pre-release version of the Expo development launcher package for testing.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -16,11 +16,11 @@
16
16
  "homepage": "https://docs.expo.dev",
17
17
  "dependencies": {
18
18
  "@expo/schema-utils": "^55.0.3",
19
- "expo-dev-menu": "55.0.24",
19
+ "expo-dev-menu": "55.0.26",
20
20
  "expo-manifests": "~55.0.16"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "expo": "*"
24
24
  },
25
- "gitHead": "e37e614d97c3ca53f16b91609a787675d044c284"
25
+ "gitHead": "a9eee95dc9ff0e1b65051c073ffb61ba3c402611"
26
26
  }
@@ -36,6 +36,12 @@ export type PluginConfigOptions = {
36
36
  * @deprecated use the `launchMode` property instead
37
37
  */
38
38
  launchModeExperimental?: 'most-recent' | 'launcher';
39
+ /**
40
+ * Whether to show the tools button by default.
41
+ *
42
+ * @default true
43
+ */
44
+ toolsButton?: boolean;
39
45
  };
40
46
  /**
41
47
  * @ignore
@@ -16,6 +16,10 @@ const schema = {
16
16
  enum: ['most-recent', 'launcher'],
17
17
  nullable: true,
18
18
  },
19
+ toolsButton: {
20
+ type: 'boolean',
21
+ nullable: true,
22
+ },
19
23
  android: {
20
24
  type: 'object',
21
25
  properties: {
@@ -29,6 +33,10 @@ const schema = {
29
33
  enum: ['most-recent', 'launcher'],
30
34
  nullable: true,
31
35
  },
36
+ toolsButton: {
37
+ type: 'boolean',
38
+ nullable: true,
39
+ },
32
40
  },
33
41
  nullable: true,
34
42
  },
@@ -45,6 +53,10 @@ const schema = {
45
53
  enum: ['most-recent', 'launcher'],
46
54
  nullable: true,
47
55
  },
56
+ toolsButton: {
57
+ type: 'boolean',
58
+ nullable: true,
59
+ },
48
60
  },
49
61
  nullable: true,
50
62
  },
@@ -102,6 +102,13 @@ exports.default = (0, config_plugins_1.createRunOncePlugin)((config, props = {})
102
102
  return config;
103
103
  });
104
104
  }
105
+ const iOSToolsButton = props.ios?.toolsButton ?? props.toolsButton;
106
+ if (iOSToolsButton !== undefined) {
107
+ config = (0, config_plugins_1.withInfoPlist)(config, (config) => {
108
+ config.modResults['EXDevMenuShowFloatingActionButton'] = iOSToolsButton;
109
+ return config;
110
+ });
111
+ }
105
112
  const androidLaunchMode = props.android?.launchMode ??
106
113
  props.launchMode ??
107
114
  props.android?.launchModeExperimental ??
@@ -113,6 +120,14 @@ exports.default = (0, config_plugins_1.createRunOncePlugin)((config, props = {})
113
120
  return config;
114
121
  });
115
122
  }
123
+ const androidToolsButton = props.android?.toolsButton ?? props.toolsButton;
124
+ if (androidToolsButton !== undefined) {
125
+ config = (0, config_plugins_1.withAndroidManifest)(config, (config) => {
126
+ const mainApplication = config_plugins_1.AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
127
+ config_plugins_1.AndroidConfig.Manifest.addMetaDataItemToMainApplication(mainApplication, 'EXDevMenuShowFloatingActionButton', String(androidToolsButton));
128
+ return config;
129
+ });
130
+ }
116
131
  config = withLocalNetworkPermission(config);
117
132
  config = withStripLocalNetworkKeysForRelease(config);
118
133
  return config;
@@ -40,6 +40,12 @@ export type PluginConfigOptions = {
40
40
  * @deprecated use the `launchMode` property instead
41
41
  */
42
42
  launchModeExperimental?: 'most-recent' | 'launcher';
43
+ /**
44
+ * Whether to show the tools button by default.
45
+ *
46
+ * @default true
47
+ */
48
+ toolsButton?: boolean;
43
49
  };
44
50
 
45
51
  const schema: JSONSchema<PluginConfigType> = {
@@ -56,6 +62,10 @@ const schema: JSONSchema<PluginConfigType> = {
56
62
  enum: ['most-recent', 'launcher'],
57
63
  nullable: true,
58
64
  },
65
+ toolsButton: {
66
+ type: 'boolean',
67
+ nullable: true,
68
+ },
59
69
  android: {
60
70
  type: 'object',
61
71
  properties: {
@@ -69,6 +79,10 @@ const schema: JSONSchema<PluginConfigType> = {
69
79
  enum: ['most-recent', 'launcher'],
70
80
  nullable: true,
71
81
  },
82
+ toolsButton: {
83
+ type: 'boolean',
84
+ nullable: true,
85
+ },
72
86
  },
73
87
  nullable: true,
74
88
  },
@@ -85,6 +99,10 @@ const schema: JSONSchema<PluginConfigType> = {
85
99
  enum: ['most-recent', 'launcher'],
86
100
  nullable: true,
87
101
  },
102
+ toolsButton: {
103
+ type: 'boolean',
104
+ nullable: true,
105
+ },
88
106
  },
89
107
  nullable: true,
90
108
  },
@@ -130,6 +130,14 @@ export default createRunOncePlugin<PluginConfigType>(
130
130
  });
131
131
  }
132
132
 
133
+ const iOSToolsButton = props.ios?.toolsButton ?? props.toolsButton;
134
+ if (iOSToolsButton !== undefined) {
135
+ config = withInfoPlist(config, (config) => {
136
+ config.modResults['EXDevMenuShowFloatingActionButton'] = iOSToolsButton;
137
+ return config;
138
+ });
139
+ }
140
+
133
141
  const androidLaunchMode =
134
142
  props.android?.launchMode ??
135
143
  props.launchMode ??
@@ -148,6 +156,20 @@ export default createRunOncePlugin<PluginConfigType>(
148
156
  });
149
157
  }
150
158
 
159
+ const androidToolsButton = props.android?.toolsButton ?? props.toolsButton;
160
+ if (androidToolsButton !== undefined) {
161
+ config = withAndroidManifest(config, (config) => {
162
+ const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
163
+
164
+ AndroidConfig.Manifest.addMetaDataItemToMainApplication(
165
+ mainApplication,
166
+ 'EXDevMenuShowFloatingActionButton',
167
+ String(androidToolsButton)
168
+ );
169
+ return config;
170
+ });
171
+ }
172
+
151
173
  config = withLocalNetworkPermission(config);
152
174
  config = withStripLocalNetworkKeysForRelease(config);
153
175