Skip to main content

max / goingson

Enable Tauri devtools in release; refresh macOS capability schema Turn on the tauri "devtools" feature so the WebKit inspector is available in release builds. GoingsOn is a solo/alpha-stage desktop app, so being able to right-click → Inspect Element on any deployed build is a much bigger triage win than the shipped-inspector attack surface costs. The macOS capability schema drifted because the app moved from tauri-plugin-shell to tauri-plugin-opener a while back but the generated schema was never refreshed; tauri-build regenerated it on the next release build.
Co-Authored-By
Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-26 19:04 UTC
Signed with PGP, not checked
Commit: e3f53debe1f3b4699bf1b00dcc0a74e5a3acb66b
Parent: e5967a5
2 files changed, +109 insertions, -166 deletions
@@ -24,7 +24,7 @@
24 24 synckit-config = { path = "../../../synckit/synckit-config" }
25 25
26 26 # Tauri
27 - tauri = { workspace = true, features = ["image-png"] }
27 + tauri = { workspace = true, features = ["image-png", "devtools"] }
28 28 tauri-plugin-dialog = { workspace = true }
29 29
30 30 # Async runtime
@@ -140,70 +140,52 @@
140 140 "identifier": {
141 141 "anyOf": [
142 142 {
143 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`",
143 + "description": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`",
144 144 "type": "string",
145 - "const": "shell:default",
146 - "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`"
145 + "const": "opener:default",
146 + "markdownDescription": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`"
147 147 },
148 148 {
149 - "description": "Enables the execute command without any pre-configured scope.",
149 + "description": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.",
150 150 "type": "string",
151 - "const": "shell:allow-execute",
152 - "markdownDescription": "Enables the execute command without any pre-configured scope."
151 + "const": "opener:allow-default-urls",
152 + "markdownDescription": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application."
153 153 },
154 154 {
155 - "description": "Enables the kill command without any pre-configured scope.",
155 + "description": "Enables the open_path command without any pre-configured scope.",
156 156 "type": "string",
157 - "const": "shell:allow-kill",
158 - "markdownDescription": "Enables the kill command without any pre-configured scope."
157 + "const": "opener:allow-open-path",
158 + "markdownDescription": "Enables the open_path command without any pre-configured scope."
159 159 },
160 160 {
161 - "description": "Enables the open command without any pre-configured scope.",
161 + "description": "Enables the open_url command without any pre-configured scope.",
162 162 "type": "string",
163 - "const": "shell:allow-open",
164 - "markdownDescription": "Enables the open command without any pre-configured scope."
163 + "const": "opener:allow-open-url",
164 + "markdownDescription": "Enables the open_url command without any pre-configured scope."
165 165 },
166 166 {
167 - "description": "Enables the spawn command without any pre-configured scope.",
167 + "description": "Enables the reveal_item_in_dir command without any pre-configured scope.",
168 168 "type": "string",
169 - "const": "shell:allow-spawn",
170 - "markdownDescription": "Enables the spawn command without any pre-configured scope."
169 + "const": "opener:allow-reveal-item-in-dir",
170 + "markdownDescription": "Enables the reveal_item_in_dir command without any pre-configured scope."
171 171 },
172 172 {
173 - "description": "Enables the stdin_write command without any pre-configured scope.",
173 + "description": "Denies the open_path command without any pre-configured scope.",
174 174 "type": "string",
175 - "const": "shell:allow-stdin-write",
176 - "markdownDescription": "Enables the stdin_write command without any pre-configured scope."
175 + "const": "opener:deny-open-path",
176 + "markdownDescription": "Denies the open_path command without any pre-configured scope."
177 177 },
178 178 {
179 - "description": "Denies the execute command without any pre-configured scope.",
179 + "description": "Denies the open_url command without any pre-configured scope.",
180 180 "type": "string",
181 - "const": "shell:deny-execute",
182 - "markdownDescription": "Denies the execute command without any pre-configured scope."
181 + "const": "opener:deny-open-url",
182 + "markdownDescription": "Denies the open_url command without any pre-configured scope."
183 183 },
184 184 {
185 - "description": "Denies the kill command without any pre-configured scope.",
185 + "description": "Denies the reveal_item_in_dir command without any pre-configured scope.",
186 186 "type": "string",
187 - "const": "shell:deny-kill",
188 - "markdownDescription": "Denies the kill command without any pre-configured scope."
189 - },
190 - {
191 - "description": "Denies the open command without any pre-configured scope.",
192 - "type": "string",
193 - "const": "shell:deny-open",
194 - "markdownDescription": "Denies the open command without any pre-configured scope."
195 - },
196 - {
197 - "description": "Denies the spawn command without any pre-configured scope.",
198 - "type": "string",
199 - "const": "shell:deny-spawn",
200 - "markdownDescription": "Denies the spawn command without any pre-configured scope."
201 - },
202 - {
203 - "description": "Denies the stdin_write command without any pre-configured scope.",
204 - "type": "string",
205 - "const": "shell:deny-stdin-write",
206 - "markdownDescription": "Denies the stdin_write command without any pre-configured scope."
187 + "const": "opener:deny-reveal-item-in-dir",
188 + "markdownDescription": "Denies the reveal_item_in_dir command without any pre-configured scope."
207 189 }
208 190 ]
209 191 }
@@ -213,120 +195,96 @@
213 195 "properties": {
214 196 "allow": {
215 197 "items": {
216 - "title": "ShellScopeEntry",
217 - "description": "Shell scope entry.",
198 + "title": "OpenerScopeEntry",
199 + "description": "Opener scope entry.",
218 200 "anyOf": [
219 201 {
220 202 "type": "object",
221 203 "required": [
222 - "cmd",
223 - "name"
204 + "url"
224 205 ],
225 206 "properties": {
226 - "args": {
227 - "description": "The allowed arguments for the command execution.",
207 + "app": {
208 + "description": "An application to open this url with, for example: firefox.",
228 209 "allOf": [
229 210 {
230 - "$ref": "#/definitions/ShellScopeEntryAllowedArgs"
211 + "$ref": "#/definitions/Application"
231 212 }
232 213 ]
233 214 },
234 - "cmd": {
235 - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.",
236 - "type": "string"
237 - },
238 - "name": {
239 - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.",
215 + "url": {
216 + "description": "A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"",
240 217 "type": "string"
241 218 }
242 - },
243 - "additionalProperties": false
219 + }
244 220 },
245 221 {
246 222 "type": "object",
247 223 "required": [
248 - "name",
249 - "sidecar"
224 + "path"
250 225 ],
251 226 "properties": {
252 - "args": {
253 - "description": "The allowed arguments for the command execution.",
227 + "app": {
228 + "description": "An application to open this path with, for example: xdg-open.",
254 229 "allOf": [
255 230 {
256 - "$ref": "#/definitions/ShellScopeEntryAllowedArgs"
231 + "$ref": "#/definitions/Application"
257 232 }
258 233 ]
259 234 },
260 - "name": {
261 - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.",
235 + "path": {
236 + "description": "A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.",
262 237 "type": "string"
263 - },
264 - "sidecar": {
265 - "description": "If this command is a sidecar command.",
266 - "type": "boolean"
267 238 }
268 - },
269 - "additionalProperties": false
239 + }
270 240 }
271 241 ]
272 242 }
273 243 },
274 244 "deny": {
275 245 "items": {
276 - "title": "ShellScopeEntry",
277 - "description": "Shell scope entry.",
246 + "title": "OpenerScopeEntry",
247 + "description": "Opener scope entry.",
278 248 "anyOf": [
279 249 {
280 250 "type": "object",
281 251 "required": [
282 - "cmd",
283 - "name"
252 + "url"
284 253 ],
285 254 "properties": {
286 - "args": {
287 - "description": "The allowed arguments for the command execution.",
255 + "app": {
256 + "description": "An application to open this url with, for example: firefox.",
288 257 "allOf": [
289 258 {
290 - "$ref": "#/definitions/ShellScopeEntryAllowedArgs"
259 + "$ref": "#/definitions/Application"
291 260 }
292 261 ]
293 262 },
294 - "cmd": {
295 - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.",
296 - "type": "string"
297 - },
298 - "name": {
299 - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.",
263 + "url": {
264 + "description": "A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"",
300 265 "type": "string"
301 266 }
302 - },
303 - "additionalProperties": false
267 + }
304 268 },
305 269 {
306 270 "type": "object",
307 271 "required": [
308 - "name",
309 - "sidecar"
272 + "path"
310 273 ],
311 274 "properties": {
312 - "args": {
313 - "description": "The allowed arguments for the command execution.",
275 + "app": {
276 + "description": "An application to open this path with, for example: xdg-open.",
314 277 "allOf": [
315 278 {
316 - "$ref": "#/definitions/ShellScopeEntryAllowedArgs"
279 + "$ref": "#/definitions/Application"
317 280 }
318 281 ]
319 282 },
320 - "name": {
321 - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.",
283 + "path": {
284 + "description": "A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.",
322 285 "type": "string"
323 - },
324 - "sidecar": {
325 - "description": "If this command is a sidecar command.",
326 - "type": "boolean"
327 286 }
328 - },
329 - "additionalProperties": false
287 + }
330 288 }
331 289 ]
332 290 }
@@ -2619,70 +2577,82 @@
2619 2577 "markdownDescription": "Denies the show command without any pre-configured scope."
2620 2578 },
2621 2579 {
2622 - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`",
2580 + "description": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`",
2623 2581 "type": "string",
2624 - "const": "shell:default",
2625 - "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`"
2582 + "const": "opener:default",
2583 + "markdownDescription": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`"
2626 2584 },
2627 2585 {
2628 - "description": "Enables the execute command without any pre-configured scope.",
2586 + "description": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.",
2629 2587 "type": "string",
2630 - "const": "shell:allow-execute",
2631 - "markdownDescription": "Enables the execute command without any pre-configured scope."
2588 + "const": "opener:allow-default-urls",
2589 + "markdownDescription": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application."
2632 2590 },
2633 2591 {
2634 - "description": "Enables the kill command without any pre-configured scope.",
2592 + "description": "Enables the open_path command without any pre-configured scope.",
2635 2593 "type": "string",
2636 - "const": "shell:allow-kill",
2637 - "markdownDescription": "Enables the kill command without any pre-configured scope."
2594 + "const": "opener:allow-open-path",
2595 + "markdownDescription": "Enables the open_path command without any pre-configured scope."
2638 2596 },
2639 2597 {
2640 - "description": "Enables the open command without any pre-configured scope.",
2598 + "description": "Enables the open_url command without any pre-configured scope.",
2641 2599 "type": "string",
2642 - "const": "shell:allow-open",
2643 - "markdownDescription": "Enables the open command without any pre-configured scope."
2600 + "const": "opener:allow-open-url",
2601 + "markdownDescription": "Enables the open_url command without any pre-configured scope."
2644 2602 },
2645 2603 {
2646 - "description": "Enables the spawn command without any pre-configured scope.",
2604 + "description": "Enables the reveal_item_in_dir command without any pre-configured scope.",
2647 2605 "type": "string",
2648 - "const": "shell:allow-spawn",
2649 - "markdownDescription": "Enables the spawn command without any pre-configured scope."
2606 + "const": "opener:allow-reveal-item-in-dir",
2607 + "markdownDescription": "Enables the reveal_item_in_dir command without any pre-configured scope."
2650 2608 },
2651 2609 {
2652 - "description": "Enables the stdin_write command without any pre-configured scope.",
2610 + "description": "Denies the open_path command without any pre-configured scope.",
2653 2611 "type": "string",
2654 - "const": "shell:allow-stdin-write",
2655 - "markdownDescription": "Enables the stdin_write command without any pre-configured scope."
2612 + "const": "opener:deny-open-path",
2613 + "markdownDescription": "Denies the open_path command without any pre-configured scope."
2656 2614 },
2657 2615 {
2658 - "description": "Denies the execute command without any pre-configured scope.",
2616 + "description": "Denies the open_url command without any pre-configured scope.",
2659 2617 "type": "string",
2660 - "const": "shell:deny-execute",
2661 - "markdownDescription": "Denies the execute command without any pre-configured scope."
2618 + "const": "opener:deny-open-url",
2619 + "markdownDescription": "Denies the open_url command without any pre-configured scope."
2662 2620 },
2663 2621 {
2664 - "description": "Denies the kill command without any pre-configured scope.",
2622 + "description": "Denies the reveal_item_in_dir command without any pre-configured scope.",
2665 2623 "type": "string",
2666 - "const": "shell:deny-kill",
2667 - "markdownDescription": "Denies the kill command without any pre-configured scope."
2624 + "const": "opener:deny-reveal-item-in-dir",
2625 + "markdownDescription": "Denies the reveal_item_in_dir command without any pre-configured scope."
2668 2626 },
2669 2627 {
2670 - "description": "Denies the open command without any pre-configured scope.",
2628 + "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`",
2671 2629 "type": "string",
2672 - "const": "shell:deny-open",
2673 - "markdownDescription": "Denies the open command without any pre-configured scope."
2630 + "const": "process:default",
2631 + "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`"
2674 2632 },
2675 2633 {
2676 - "description": "Denies the spawn command without any pre-configured scope.",
2634 + "description": "Enables the exit command without any pre-configured scope.",
2677 2635 "type": "string",
2678 - "const": "shell:deny-spawn",
2679 - "markdownDescription": "Denies the spawn command without any pre-configured scope."
2636 + "const": "process:allow-exit",
2637 + "markdownDescription": "Enables the exit command without any pre-configured scope."
2680 2638 },
2681 2639 {
2682 - "description": "Denies the stdin_write command without any pre-configured scope.",
2640 + "description": "Enables the restart command without any pre-configured scope.",
2683 2641 "type": "string",
2684 - "const": "shell:deny-stdin-write",
2685 - "markdownDescription": "Denies the stdin_write command without any pre-configured scope."
2642 + "const": "process:allow-restart",
2643 + "markdownDescription": "Enables the restart command without any pre-configured scope."
2644 + },
2645 + {
2646 + "description": "Denies the exit command without any pre-configured scope.",
2647 + "type": "string",
2648 + "const": "process:deny-exit",
2649 + "markdownDescription": "Denies the exit command without any pre-configured scope."
2650 + },
2651 + {
2652 + "description": "Denies the restart command without any pre-configured scope.",
2653 + "type": "string",
2654 + "const": "process:deny-restart",
2655 + "markdownDescription": "Denies the restart command without any pre-configured scope."
2686 2656 },
2687 2657 {
2688 2658 "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n\n#### This default permission set includes:\n\n- `allow-check`\n- `allow-download`\n- `allow-install`\n- `allow-download-and-install`",
@@ -2876,47 +2846,20 @@
2876 2846 }
2877 2847 ]
2878 2848 },
2879 - "ShellScopeEntryAllowedArg": {
2880 - "description": "A command argument allowed to be executed by the webview API.",
2849 + "Application": {
2850 + "description": "Opener scope application.",
2881 2851 "anyOf": [
2882 2852 {
2883 - "description": "A non-configurable argument that is passed to the command in the order it was specified.",
2884 - "type": "string"
2853 + "description": "Open in default application.",
2854 + "type": "null"
2885 2855 },
2886 2856 {
2887 - "description": "A variable that is set while calling the command from the webview API.",
2888 - "type": "object",
2889 - "required": [
2890 - "validator"
2891 - ],
2892 - "properties": {
2893 - "raw": {
2894 - "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.",
2895 - "default": false,
2896 - "type": "boolean"
2897 - },
2898 - "validator": {
2899 - "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: <https://docs.rs/regex/latest/regex/#syntax>",
2900 - "type": "string"
2901 - }
2902 - },
2903 - "additionalProperties": false
2904 - }
2905 - ]
2906 - },
2907 - "ShellScopeEntryAllowedArgs": {
2908 - "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.",
2909 - "anyOf": [
2910 - {
2911 - "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.",
2857 + "description": "If true, allow open with any application.",
2912 2858 "type": "boolean"
2913 2859 },
2914 2860 {
2915 - "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.",
2916 - "type": "array",
2917 - "items": {
2918 - "$ref": "#/definitions/ShellScopeEntryAllowedArg"
2919 - }
2861 + "description": "Allow specific application to open with.",
2862 + "type": "string"
2920 2863 }
2921 2864 ]
2922 2865 }