重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
configuring-tauri-capabilities by dchuk/claude-code-tauri-skills
npx skills add https://github.com/dchuk/claude-code-tauri-skills --skill configuring-tauri-capabilities能力是 Tauri 的权限管理系统,用于精细控制前端可以访问哪些 API 和命令。它们通过指定哪些权限适用于哪些窗口或 Webview 来定义安全边界。
能力充当权限与窗口/Webview 之间的桥梁。它们:
能力文件位于 src-tauri/capabilities/ 目录下,使用 JSON 或 TOML 格式。
能力文件包含以下字段:
| 字段 | 必需 | 描述 |
|---|---|---|
identifier | 是 | 唯一的能力名称 |
description | 否 | 用途说明 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
windows| 是 |
| 目标窗口标签(支持通配符) |
permissions | 是 | 允许/拒绝的操作数组 |
platforms | 否 | 目标平台(linux、macOS、windows、iOS、android) |
remote | 否 | 远程 URL 访问配置 |
$schema | 否 | 引用生成的模式以支持 IDE |
创建 src-tauri/capabilities/main.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "主窗口的能力",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default"
]
}
默认情况下,src-tauri/capabilities/ 目录中的所有能力都会自动启用。无需额外配置。
若要显式控制哪些能力处于活动状态,请在 tauri.conf.json 中进行配置:
{
"app": {
"security": {
"capabilities": ["main-capability", "editor-capability"]
}
}
}
当显式配置时,只有列出的能力才会生效。
将独立的能力文件存储在能力目录中:
src-tauri/
capabilities/
main.json
editor.json
settings.json
在 tauri.conf.json 中通过标识符引用:
{
"app": {
"security": {
"capabilities": ["main-capability", "editor-capability", "settings-capability"]
}
}
}
直接在 tauri.conf.json 中嵌入能力:
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "用于所有窗口的能力",
"windows": ["*"],
"permissions": ["fs:default", "core:window:default"]
}
]
}
}
}
结合基于文件的能力和内联能力:
{
"app": {
"security": {
"capabilities": [
{
"identifier": "inline-capability",
"windows": ["*"],
"permissions": ["fs:default"]
},
"file-based-capability"
]
}
}
}
使用窗口标签为不同窗口分配不同的权限:
{
"identifier": "main-capability",
"windows": ["main"],
"permissions": ["core:window:default", "fs:default"]
}
{
"identifier": "editor-capability",
"windows": ["editor", "preview"],
"permissions": ["fs:read-files", "core:event:default"]
}
{
"identifier": "global-capability",
"windows": ["*"],
"permissions": ["core:event:default"]
}
{
"identifier": "dialog-capability",
"windows": ["dialog-*"],
"permissions": ["core:window:allow-close"]
}
权限遵循命名约定:
| 模式 | 描述 |
|---|---|
<plugin>:default | 插件的默认权限集 |
<plugin>:allow-<command> | 允许特定命令 |
<plugin>:deny-<command> | 拒绝特定命令 |
{
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:window:allow-set-title",
"core:window:allow-close",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default"
]
}
{
"permissions": [
"fs:default",
"fs:allow-read-file",
"fs:allow-write-file",
"shell:allow-open",
"dialog:allow-open",
"dialog:allow-save",
"http:default",
"clipboard-manager:allow-read",
"clipboard-manager:allow-write"
]
}
使用 platforms 数组来定位特定平台。
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": [
"global-shortcut:allow-register",
"global-shortcut:allow-unregister",
"shell:allow-execute"
]
}
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}
创建平台特定的能力文件:
src-tauri/capabilities/desktop.json:
{
"identifier": "desktop-features",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:default", "shell:default"]
}
src-tauri/capabilities/mobile.json:
{
"identifier": "mobile-features",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": ["haptics:default", "biometric:default"]
}
允许远程 URL 访问 Tauri 命令(请谨慎使用):
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.example.com"]
},
"permissions": ["http:default"]
}
一个具有不同权限级别的多窗口应用程序:
src-tauri/capabilities/main.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-window",
"description": "主应用程序窗口的完全访问权限",
"windows": ["main"],
"permissions": [
"core:default",
"fs:default",
"shell:allow-open",
"dialog:default",
"http:default",
"clipboard-manager:default"
]
}
src-tauri/capabilities/settings.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "settings-window",
"description": "设置窗口的有限访问权限",
"windows": ["settings"],
"permissions": [
"core:window:allow-close",
"core:event:default",
"fs:allow-read-file",
"fs:allow-write-file"
]
}
src-tauri/capabilities/preview.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "preview-window",
"description": "预览窗口的只读访问权限",
"windows": ["preview"],
"permissions": [
"core:window:default",
"core:event:default",
"fs:allow-read-file"
]
}
能力可以防范:
能力不能防范:
main-window、editor-readonly)生成的模式提供 IDE 自动补全功能。在能力文件中引用它们:
{
"$schema": "../gen/schemas/desktop-schema.json"
}
构建后可用的模式:
desktop-schema.json - 桌面平台mobile-schema.json - 移动平台remote-schema.json - 远程访问能力检查能力是否包含所需的权限,并且目标窗口标签是否正确。
确认能力文件位于 src-tauri/capabilities/ 目录中,或者在 tauri.conf.json 中明确列出。
能力中的窗口标签必须与在 Rust 代码中创建窗口时定义的标签匹配。标签区分大小写。
每周安装量
48
代码仓库
GitHub 星标数
12
首次出现
2026 年 1 月 24 日
安全审计
安装于
gemini-cli41
opencode39
codex38
cursor38
claude-code35
github-copilot35
Capabilities are Tauri's permission management system that granularly controls which APIs and commands the frontend can access. They define security boundaries by specifying which permissions apply to which windows or webviews.
Capabilities serve as the bridge between permissions and windows/webviews. They:
Capability files reside in src-tauri/capabilities/ and use JSON or TOML format.
A capability file contains:
| Field | Required | Description |
|---|---|---|
identifier | Yes | Unique capability name |
description | No | Purpose explanation |
windows | Yes | Target window labels (supports wildcards) |
permissions | Yes | Array of allowed/denied operations |
platforms | No | Target platforms (linux, macOS, windows, iOS, android) |
remote | No | Remote URL access configuration |
$schema | No | Reference to generated schema for IDE support |
Create src-tauri/capabilities/main.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default"
]
}
All capabilities in src-tauri/capabilities/ are automatically enabled by default. No additional configuration is required.
To explicitly control which capabilities are active, configure them in tauri.conf.json:
{
"app": {
"security": {
"capabilities": ["main-capability", "editor-capability"]
}
}
}
When explicitly configured, only the listed capabilities apply.
Store individual capability files in the capabilities directory:
src-tauri/
capabilities/
main.json
editor.json
settings.json
Reference by identifier in tauri.conf.json:
{
"app": {
"security": {
"capabilities": ["main-capability", "editor-capability", "settings-capability"]
}
}
}
Embed capabilities directly in tauri.conf.json:
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "Capability used for all windows",
"windows": ["*"],
"permissions": ["fs:default", "core:window:default"]
}
]
}
}
}
Combine file-based and inline capabilities:
{
"app": {
"security": {
"capabilities": [
{
"identifier": "inline-capability",
"windows": ["*"],
"permissions": ["fs:default"]
},
"file-based-capability"
]
}
}
}
Assign different permissions to different windows using window labels:
{
"identifier": "main-capability",
"windows": ["main"],
"permissions": ["core:window:default", "fs:default"]
}
{
"identifier": "editor-capability",
"windows": ["editor", "preview"],
"permissions": ["fs:read-files", "core:event:default"]
}
{
"identifier": "global-capability",
"windows": ["*"],
"permissions": ["core:event:default"]
}
{
"identifier": "dialog-capability",
"windows": ["dialog-*"],
"permissions": ["core:window:allow-close"]
}
Permissions follow a naming convention:
| Pattern | Description |
|---|---|
<plugin>:default | Default permission set for a plugin |
<plugin>:allow-<command> | Allow a specific command |
<plugin>:deny-<command> | Deny a specific command |
{
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:window:allow-set-title",
"core:window:allow-close",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default"
]
}
{
"permissions": [
"fs:default",
"fs:allow-read-file",
"fs:allow-write-file",
"shell:allow-open",
"dialog:allow-open",
"dialog:allow-save",
"http:default",
"clipboard-manager:allow-read",
"clipboard-manager:allow-write"
]
}
Target specific platforms using the platforms array.
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": [
"global-shortcut:allow-register",
"global-shortcut:allow-unregister",
"shell:allow-execute"
]
}
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}
Create platform-specific capability files:
src-tauri/capabilities/desktop.json:
{
"identifier": "desktop-features",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:default", "shell:default"]
}
src-tauri/capabilities/mobile.json:
{
"identifier": "mobile-features",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": ["haptics:default", "biometric:default"]
}
Allow remote URLs to access Tauri commands (use with caution):
{
"$schema": "../gen/schemas/remote-schema.json",
"identifier": "remote-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.example.com"]
},
"permissions": ["http:default"]
}
A multi-window application with different permission levels:
src-tauri/capabilities/main.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-window",
"description": "Full access for main application window",
"windows": ["main"],
"permissions": [
"core:default",
"fs:default",
"shell:allow-open",
"dialog:default",
"http:default",
"clipboard-manager:default"
]
}
src-tauri/capabilities/settings.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "settings-window",
"description": "Limited access for settings window",
"windows": ["settings"],
"permissions": [
"core:window:allow-close",
"core:event:default",
"fs:allow-read-file",
"fs:allow-write-file"
]
}
src-tauri/capabilities/preview.json:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "preview-window",
"description": "Read-only access for preview window",
"windows": ["preview"],
"permissions": [
"core:window:default",
"core:event:default",
"fs:allow-read-file"
]
}
Capabilities protect against:
Capabilities do NOT protect against:
main-window, editor-readonly)Generated schemas provide IDE autocompletion. Reference them in capability files:
{
"$schema": "../gen/schemas/desktop-schema.json"
}
Available schemas after build:
desktop-schema.json - Desktop platformsmobile-schema.json - Mobile platformsremote-schema.json - Remote access capabilitiesCheck that the capability includes the required permission and targets the correct window label.
Verify the capability file is in src-tauri/capabilities/ or explicitly listed in tauri.conf.json.
Window labels in capabilities must match the labels defined when creating windows in Rust code. Labels are case-sensitive.
Weekly Installs
48
Repository
GitHub Stars
12
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
gemini-cli41
opencode39
codex38
cursor38
claude-code35
github-copilot35
Lark Mail CLI 使用指南:邮件管理、安全规则与自动化工作流
47,900 周安装
sadd:do-competitively - 多代理竞争性AI生成与评估框架,实现宪法式AI自我批判循环
366 周安装
DOCX文件处理指南:创建、编辑、分析Word文档的完整技术方案
364 周安装
Agent Tool Builder:大语言模型工具设计专家,优化AI代理工具模式与错误处理
366 周安装
macOS应用公证完整指南:使用asc-notarization进行开发者ID签名与公证
372 周安装
json-render MCP 集成:在 Claude、ChatGPT 等 AI 客户端中嵌入交互式 UI 应用
377 周安装
Remotion JSON 渲染器:使用 JSON 时间线规范快速创建和渲染视频
378 周安装