[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69AVPMCKTMB55Y3ST9PBDTB":3,"skill-same:01M69AVPMCKTMB55Y3ST9PBDTB":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M69AVPMCKTMB55Y3ST9PBDTB","azure-appconfiguration-ts",null,"Build applications using Azure App Configuration SDK for JavaScript (@azure\u002Fapp-configuration). Use when working with configuration settings, feature flags, Key Vault references, dynamic refresh, or centralized configuration management.","microsoft\u002Fskills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69AJYYW4E1RMSYCQDJ4FJSH",3195,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-appconfiguration-ts\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,9,37],"azure","azure appconfiguration ts","use","when","for","with","azure app configuration","app","feature","configuration management","build","references","sdk","settings","refresh","feature flags","vault","applications","javascript","2026-11-10 10:12:30",false,"---\nname: azure-appconfiguration-ts\ndescription: Build applications using Azure App Configuration SDK for JavaScript (@azure\u002Fapp-configuration). Use when working with configuration settings, feature flags, Key Vault references, dynamic refresh, or centralized configuration management.\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: '@azure\u002Fapp-configuration'\n---\n\n# Azure App Configuration SDK for TypeScript\n\nCentralized configuration management with feature flags and dynamic refresh.\n\n## Installation\n\n```bash\n# Low-level CRUD SDK\nnpm install @azure\u002Fapp-configuration @azure\u002Fidentity\n\n# High-level provider (recommended for apps)\nnpm install @azure\u002Fapp-configuration-provider @azure\u002Fidentity\n\n# Feature flag management\nnpm install @microsoft\u002Ffeature-management\n```\n\n## Environment Variables\n\n```bash\nAZURE_APPCONFIG_ENDPOINT=https:\u002F\u002F\u003Cyour-resource>.azconfig.io\n# OR\nAZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https:\u002F\u002F...;Id=...;Secret=...\nAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production\n```\n\n## Authentication\n\n```typescript\nimport { AppConfigurationClient } from \"@azure\u002Fapp-configuration\";\nimport { DefaultAzureCredential, ManagedIdentityCredential } from \"@azure\u002Fidentity\";\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nconst credential = new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]});\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fjavascript\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-node-latest#credential-classes\n\u002F\u002F const credential = new ManagedIdentityCredential();\n\nconst client = new AppConfigurationClient(\n  process.env.AZURE_APPCONFIG_ENDPOINT!,\n  credential\n);\n\n\u002F\u002F Connection string\nconst client2 = new AppConfigurationClient(\n  process.env.AZURE_APPCONFIG_CONNECTION_STRING!\n);\n```\n\n## CRUD Operations\n\n### Create\u002FUpdate Settings\n\n```typescript\n\u002F\u002F Add new (fails if exists)\nawait client.addConfigurationSetting({\n  key: \"app:settings:message\",\n  value: \"Hello World\",\n  label: \"production\",\n  contentType: \"text\u002Fplain\",\n  tags: { environment: \"prod\" },\n});\n\n\u002F\u002F Set (create or update)\nawait client.setConfigurationSetting({\n  key: \"app:settings:message\",\n  value: \"Updated value\",\n  label: \"production\",\n});\n\n\u002F\u002F Update with optimistic concurrency\nconst existing = await client.getConfigurationSetting({ key: \"myKey\" });\nexisting.value = \"new value\";\nawait client.setConfigurationSetting(existing, { onlyIfUnchanged: true });\n```\n\n### Read Settings\n\n```typescript\n\u002F\u002F Get single setting\nconst setting = await client.getConfigurationSetting({\n  key: \"app:settings:message\",\n  label: \"production\",  \u002F\u002F optional\n});\nconsole.log(setting.value);\n\n\u002F\u002F List with filters\nconst settings = client.listConfigurationSettings({\n  keyFilter: \"app:*\",\n  labelFilter: \"production\",\n});\n\nfor await (const setting of settings) {\n  console.log(`${setting.key}: ${setting.value}`);\n}\n```\n\n### Delete Settings\n\n```typescript\nawait client.deleteConfigurationSetting({\n  key: \"app:settings:message\",\n  label: \"production\",\n});\n```\n\n### Lock\u002FUnlock (Read-Only)\n\n```typescript\n\u002F\u002F Lock\nawait client.setReadOnly({ key: \"myKey\", label: \"prod\" }, true);\n\n\u002F\u002F Unlock\nawait client.setReadOnly({ key: \"myKey\", label: \"prod\" }, false);\n```\n\n## App Configuration Provider\n\n### Load Configuration\n\n```typescript\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nconst appConfig = await load(\n  process.env.AZURE_APPCONFIG_ENDPOINT!,\n  new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]}),\n  {\n    selectors: [\n      { keyFilter: \"app:*\", labelFilter: \"production\" },\n    ],\n    trimKeyPrefixes: [\"app:\"],\n  }\n);\n\n\u002F\u002F Map-style access\nconst value = appConfig.get(\"settings:message\");\n\n\u002F\u002F Object-style access\nconst config = appConfig.constructConfigurationObject({ separator: \":\" });\nconsole.log(config.settings.message);\n```\n\n### Dynamic Refresh\n\n```typescript\nconst appConfig = await load(endpoint, credential, {\n  selectors: [{ keyFilter: \"app:*\" }],\n  refreshOptions: {\n    enabled: true,\n    refreshIntervalInMs: 30_000,  \u002F\u002F 30 seconds\n  },\n});\n\n\u002F\u002F Trigger refresh (non-blocking)\nappConfig.refresh();\n\n\u002F\u002F Listen for refresh events\nconst disposer = appConfig.onRefresh(() => {\n  console.log(\"Configuration refreshed!\");\n});\n\n\u002F\u002F Express middleware pattern\napp.use((req, res, next) => {\n  appConfig.refresh();\n  next();\n});\n```\n\n### Key Vault References\n\n```typescript\nconst appConfig = await load(endpoint, credential, {\n  selectors: [{ keyFilter: \"app:*\" }],\n  keyVaultOptions: {\n    credential: new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]}),\n    secretRefreshIntervalInMs: 7200_000,  \u002F\u002F 2 hours\n  },\n});\n\n\u002F\u002F Secrets are automatically resolved\nconst dbPassword = appConfig.get(\"database:password\");\n```\n\n## Feature Flags\n\n### Create Feature Flag (Low-Level)\n\n```typescript\nimport {\n  featureFlagPrefix,\n  featureFlagContentType,\n  FeatureFlagValue,\n  ConfigurationSetting,\n} from \"@azure\u002Fapp-configuration\";\n\nconst flag: ConfigurationSetting\u003CFeatureFlagValue> = {\n  key: `${featureFlagPrefix}Beta`,\n  contentType: featureFlagContentType,\n  value: {\n    id: \"Beta\",\n    enabled: true,\n    description: \"Beta feature\",\n    conditions: {\n      clientFilters: [\n        {\n          name: \"Microsoft.Targeting\",\n          parameters: {\n            Audience: {\n              Users: [\"user@example.com\"],\n              Groups: [{ Name: \"beta-testers\", RolloutPercentage: 50 }],\n              DefaultRolloutPercentage: 0,\n            },\n          },\n        },\n      ],\n    },\n  },\n};\n\nawait client.addConfigurationSetting(flag);\n```\n\n### Load and Evaluate Feature Flags\n\n```typescript\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\nimport {\n  ConfigurationMapFeatureFlagProvider,\n  FeatureManager,\n} from \"@microsoft\u002Ffeature-management\";\n\nconst appConfig = await load(endpoint, credential, {\n  featureFlagOptions: {\n    enabled: true,\n    selectors: [{ keyFilter: \"*\" }],\n    refresh: {\n      enabled: true,\n      refreshIntervalInMs: 30_000,\n    },\n  },\n});\n\nconst featureProvider = new ConfigurationMapFeatureFlagProvider(appConfig);\nconst featureManager = new FeatureManager(featureProvider);\n\n\u002F\u002F Simple check\nconst isEnabled = await featureManager.isEnabled(\"Beta\");\n\n\u002F\u002F With targeting context\nconst isEnabledForUser = await featureManager.isEnabled(\"Beta\", {\n  userId: \"user@example.com\",\n  groups: [\"beta-testers\"],\n});\n```\n\n## Snapshots\n\n```typescript\n\u002F\u002F Create snapshot\nconst snapshot = await client.beginCreateSnapshotAndWait({\n  name: \"release-v1.0\",\n  retentionPeriod: 2592000,  \u002F\u002F 30 days\n  filters: [{ keyFilter: \"app:*\", labelFilter: \"production\" }],\n});\n\n\u002F\u002F Get snapshot\nconst snap = await client.getSnapshot(\"release-v1.0\");\n\n\u002F\u002F List settings in snapshot\nconst settings = client.listConfigurationSettingsForSnapshot(\"release-v1.0\");\nfor await (const setting of settings) {\n  console.log(`${setting.key}: ${setting.value}`);\n}\n\n\u002F\u002F Archive\u002Frecover\nawait client.archiveSnapshot(\"release-v1.0\");\nawait client.recoverSnapshot(\"release-v1.0\");\n\n\u002F\u002F Load from snapshot (provider)\nconst config = await load(endpoint, credential, {\n  selectors: [{ snapshotName: \"release-v1.0\" }],\n});\n```\n\n## Labels\n\n```typescript\n\u002F\u002F Create settings with labels\nawait client.setConfigurationSetting({\n  key: \"database:host\",\n  value: \"dev-db.example.com\",\n  label: \"development\",\n});\n\nawait client.setConfigurationSetting({\n  key: \"database:host\",\n  value: \"prod-db.example.com\",\n  label: \"production\",\n});\n\n\u002F\u002F Filter by label\nconst prodSettings = client.listConfigurationSettings({\n  keyFilter: \"*\",\n  labelFilter: \"production\",\n});\n\n\u002F\u002F No label (null label)\nconst noLabelSettings = client.listConfigurationSettings({\n  labelFilter: \"\\0\",\n});\n\n\u002F\u002F List available labels\nfor await (const label of client.listLabels()) {\n  console.log(label.name);\n}\n```\n\n## Key Types\n\n```typescript\nimport {\n  AppConfigurationClient,\n  ConfigurationSetting,\n  FeatureFlagValue,\n  SecretReferenceValue,\n  featureFlagPrefix,\n  featureFlagContentType,\n  secretReferenceContentType,\n  ListConfigurationSettingsOptions,\n} from \"@azure\u002Fapp-configuration\";\n\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\n\nimport {\n  FeatureManager,\n  ConfigurationMapFeatureFlagProvider,\n} from \"@microsoft\u002Ffeature-management\";\n```\n\n## Best Practices\n\n1. **Use provider for apps** - `@azure\u002Fapp-configuration-provider` for runtime config\n2. **Use low-level for management** - `@azure\u002Fapp-configuration` for CRUD operations\n3. **Enable refresh** - For dynamic configuration updates\n4. **Use labels** - Separate configurations by environment\n5. **Use snapshots** - For immutable release configurations\n6. **Sentinel pattern** - Use a sentinel key to trigger full refresh\n7. **RBAC roles** - `App Configuration Data Reader` for read-only access\n","# Azure App Configuration SDK for TypeScript\n\nCentralized configuration management with feature flags and dynamic refresh.\n\n## Installation\n\n```bash\n# Low-level CRUD SDK\nnpm install @azure\u002Fapp-configuration @azure\u002Fidentity\n\n# High-level provider (recommended for apps)\nnpm install @azure\u002Fapp-configuration-provider @azure\u002Fidentity\n\n# Feature flag management\nnpm install @microsoft\u002Ffeature-management\n```\n\n## Environment Variables\n\n```bash\nAZURE_APPCONFIG_ENDPOINT=https:\u002F\u002F\u003Cyour-resource>.azconfig.io\n# OR\nAZURE_APPCONFIG_CONNECTION_STRING=Endpoint=https:\u002F\u002F...;Id=...;Secret=...\nAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production\n```\n\n## Authentication\n\n```typescript\nimport { AppConfigurationClient } from \"@azure\u002Fapp-configuration\";\nimport { DefaultAzureCredential, ManagedIdentityCredential } from \"@azure\u002Fidentity\";\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nconst credential = new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]});\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fjavascript\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-node-latest#credential-classes\n\u002F\u002F const credential = new ManagedIdentityCredential();\n\nconst client = new AppConfigurationClient(\n  process.env.AZURE_APPCONFIG_ENDPOINT!,\n  credential\n);\n\n\u002F\u002F Connection string\nconst client2 = new AppConfigurationClient(\n  process.env.AZURE_APPCONFIG_CONNECTION_STRING!\n);\n```\n\n## CRUD Operations\n\n### Create\u002FUpdate Settings\n\n```typescript\n\u002F\u002F Add new (fails if exists)\nawait client.addConfigurationSetting({\n  key: \"app:settings:message\",\n  value: \"Hello World\",\n  label: \"production\",\n  contentType: \"text\u002Fplain\",\n  tags: { environment: \"prod\" },\n});\n\n\u002F\u002F Set (create or update)\nawait client.setConfigurationSetting({\n  key: \"app:settings:message\",\n  value: \"Updated value\",\n  label: \"production\",\n});\n\n\u002F\u002F Update with optimistic concurrency\nconst existing = await client.getConfigurationSetting({ key: \"myKey\" });\nexisting.value = \"new value\";\nawait client.setConfigurationSetting(existing, { onlyIfUnchanged: true });\n```\n\n### Read Settings\n\n```typescript\n\u002F\u002F Get single setting\nconst setting = await client.getConfigurationSetting({\n  key: \"app:settings:message\",\n  label: \"production\",  \u002F\u002F optional\n});\nconsole.log(setting.value);\n\n\u002F\u002F List with filters\nconst settings = client.listConfigurationSettings({\n  keyFilter: \"app:*\",\n  labelFilter: \"production\",\n});\n\nfor await (const setting of settings) {\n  console.log(`${setting.key}: ${setting.value}`);\n}\n```\n\n### Delete Settings\n\n```typescript\nawait client.deleteConfigurationSetting({\n  key: \"app:settings:message\",\n  label: \"production\",\n});\n```\n\n### Lock\u002FUnlock (Read-Only)\n\n```typescript\n\u002F\u002F Lock\nawait client.setReadOnly({ key: \"myKey\", label: \"prod\" }, true);\n\n\u002F\u002F Unlock\nawait client.setReadOnly({ key: \"myKey\", label: \"prod\" }, false);\n```\n\n## App Configuration Provider\n\n### Load Configuration\n\n```typescript\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nconst appConfig = await load(\n  process.env.AZURE_APPCONFIG_ENDPOINT!,\n  new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]}),\n  {\n    selectors: [\n      { keyFilter: \"app:*\", labelFilter: \"production\" },\n    ],\n    trimKeyPrefixes: [\"app:\"],\n  }\n);\n\n\u002F\u002F Map-style access\nconst value = appConfig.get(\"settings:message\");\n\n\u002F\u002F Object-style access\nconst config = appConfig.constructConfigurationObject({ separator: \":\" });\nconsole.log(config.settings.message);\n```\n\n### Dynamic Refresh\n\n```typescript\nconst appConfig = await load(endpoint, credential, {\n  selectors: [{ keyFilter: \"app:*\" }],\n  refreshOptions: {\n    enabled: true,\n    refreshIntervalInMs: 30_000,  \u002F\u002F 30 seconds\n  },\n});\n\n\u002F\u002F Trigger refresh (non-blocking)\nappConfig.refresh();\n\n\u002F\u002F Listen for refresh events\nconst disposer = appConfig.onRefresh(() => {\n  console.log(\"Configuration refreshed!\");\n});\n\n\u002F\u002F Express middleware pattern\napp.use((req, res, next) => {\n  appConfig.refresh();\n  next();\n});\n```\n\n### Key Vault References\n\n```typescript\nconst appConfig = await load(endpoint, credential, {\n  selectors: [{ keyFilter: \"app:*\" }],\n  keyVaultOptions: {\n    credential: new DefaultAzureCredential({requiredEnvVars: [\"AZURE_TOKEN_CREDENTIALS\"]}),\n    secretRefreshIntervalInMs: 7200_000,  \u002F\u002F 2 hours\n  },\n});\n\n\u002F\u002F Secrets are automatically resolved\nconst dbPassword = appConfig.get(\"database:password\");\n```\n\n## Feature Flags\n\n### Create Feature Flag (Low-Level)\n\n```typescript\nimport {\n  featureFlagPrefix,\n  featureFlagContentType,\n  FeatureFlagValue,\n  ConfigurationSetting,\n} from \"@azure\u002Fapp-configuration\";\n\nconst flag: ConfigurationSetting\u003CFeatureFlagValue> = {\n  key: `${featureFlagPrefix}Beta`,\n  contentType: featureFlagContentType,\n  value: {\n    id: \"Beta\",\n    enabled: true,\n    description: \"Beta feature\",\n    conditions: {\n      clientFilters: [\n        {\n          name: \"Microsoft.Targeting\",\n          parameters: {\n            Audience: {\n              Users: [\"user@example.com\"],\n              Groups: [{ Name: \"beta-testers\", RolloutPercentage: 50 }],\n              DefaultRolloutPercentage: 0,\n            },\n          },\n        },\n      ],\n    },\n  },\n};\n\nawait client.addConfigurationSetting(flag);\n```\n\n### Load and Evaluate Feature Flags\n\n```typescript\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\nimport {\n  ConfigurationMapFeatureFlagProvider,\n  FeatureManager,\n} from \"@microsoft\u002Ffeature-management\";\n\nconst appConfig = await load(endpoint, credential, {\n  featureFlagOptions: {\n    enabled: true,\n    selectors: [{ keyFilter: \"*\" }],\n    refresh: {\n      enabled: true,\n      refreshIntervalInMs: 30_000,\n    },\n  },\n});\n\nconst featureProvider = new ConfigurationMapFeatureFlagProvider(appConfig);\nconst featureManager = new FeatureManager(featureProvider);\n\n\u002F\u002F Simple check\nconst isEnabled = await featureManager.isEnabled(\"Beta\");\n\n\u002F\u002F With targeting context\nconst isEnabledForUser = await featureManager.isEnabled(\"Beta\", {\n  userId: \"user@example.com\",\n  groups: [\"beta-testers\"],\n});\n```\n\n## Snapshots\n\n```typescript\n\u002F\u002F Create snapshot\nconst snapshot = await client.beginCreateSnapshotAndWait({\n  name: \"release-v1.0\",\n  retentionPeriod: 2592000,  \u002F\u002F 30 days\n  filters: [{ keyFilter: \"app:*\", labelFilter: \"production\" }],\n});\n\n\u002F\u002F Get snapshot\nconst snap = await client.getSnapshot(\"release-v1.0\");\n\n\u002F\u002F List settings in snapshot\nconst settings = client.listConfigurationSettingsForSnapshot(\"release-v1.0\");\nfor await (const setting of settings) {\n  console.log(`${setting.key}: ${setting.value}`);\n}\n\n\u002F\u002F Archive\u002Frecover\nawait client.archiveSnapshot(\"release-v1.0\");\nawait client.recoverSnapshot(\"release-v1.0\");\n\n\u002F\u002F Load from snapshot (provider)\nconst config = await load(endpoint, credential, {\n  selectors: [{ snapshotName: \"release-v1.0\" }],\n});\n```\n\n## Labels\n\n```typescript\n\u002F\u002F Create settings with labels\nawait client.setConfigurationSetting({\n  key: \"database:host\",\n  value: \"dev-db.example.com\",\n  label: \"development\",\n});\n\nawait client.setConfigurationSetting({\n  key: \"database:host\",\n  value: \"prod-db.example.com\",\n  label: \"production\",\n});\n\n\u002F\u002F Filter by label\nconst prodSettings = client.listConfigurationSettings({\n  keyFilter: \"*\",\n  labelFilter: \"production\",\n});\n\n\u002F\u002F No label (null label)\nconst noLabelSettings = client.listConfigurationSettings({\n  labelFilter: \"\\0\",\n});\n\n\u002F\u002F List available labels\nfor await (const label of client.listLabels()) {\n  console.log(label.name);\n}\n```\n\n## Key Types\n\n```typescript\nimport {\n  AppConfigurationClient,\n  ConfigurationSetting,\n  FeatureFlagValue,\n  SecretReferenceValue,\n  featureFlagPrefix,\n  featureFlagContentType,\n  secretReferenceContentType,\n  ListConfigurationSettingsOptions,\n} from \"@azure\u002Fapp-configuration\";\n\nimport { load } from \"@azure\u002Fapp-configuration-provider\";\n\nimport {\n  FeatureManager,\n  ConfigurationMapFeatureFlagProvider,\n} from \"@microsoft\u002Ffeature-management\";\n```\n\n## Best Practices\n\n1. **Use provider for apps** - `@azure\u002Fapp-configuration-provider` for runtime config\n2. **Use low-level for management** - `@azure\u002Fapp-configuration` for CRUD operations\n3. **Enable refresh** - For dynamic configuration updates\n4. **Use labels** - Separate configurations by environment\n5. **Use snapshots** - For immutable release configurations\n6. **Sentinel pattern** - Use a sentinel key to trigger full refresh\n7. **RBAC roles** - `App Configuration Data Reader` for read-only access\n",{"name":5,"license":15,"metadata":43,"description":7},{"author":12,"package":44,"version":45},"@azure\u002Fapp-configuration","1.0.0","main","3f5b461b2314e01c400564051e92469114c5b68f",".github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-appconfiguration-ts",365,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","https:\u002F\u002Fmicrosoft.github.io\u002Fskills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-12 02:02:58",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add microsoft\u002Fskills --skill azure-appconfiguration-ts",{"tool":62,"command":63},"bunx","bunx skills add microsoft\u002Fskills --skill azure-appconfiguration-ts",{"tool":65,"command":66},"pnpm","pnpm dlx skills add microsoft\u002Fskills --skill azure-appconfiguration-ts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-typescript\u002Fskills\u002Fazure-appconfiguration-ts\u002FSKILL.md",true,[],[71,96,134,161,181,219],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":38},"01M69B4JCRQV5SPXAFCKXQRV0H","skill-creator","Guide for creating effective skills for AI coding agents working with Azure SDKs and Microsoft Foundry services. Use when creating new skills or updating existing skills.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fskill-creator\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[83,84,85,9,86,87,88,19,89,90,91,21,92,24,93,23,94,22,95],"skill creator","creator","coding agents","foundry","microsoft foundry","ai coding agents","services","coding","guide","ai coding","sdks","Existing","new",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":112,"publishedAt":38},"01M69B4FD57V1MYKRWAJJECTZ7","podcast-generation","Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpodcast-generation\u002FSKILL.md",[102,105,108,111],{"categoryNo":103,"categoryName":104,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":106,"categoryName":107,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":109,"categoryName":110,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[113,114,115,116,117,118,119,19,120,121,122,123,124,125,126,127,128,129,130,131,132,22,133],"podcast generation","podcast","generation","frontend","python","react","realtime","azure openai","generate","streaming","api","Audio","stack","text","model","fastapi","creation","python fastapi","narrative","features","fastapi backend",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":38},"01M69B4CYPM5SESY5ZWEFDXEQZ","microsoft-docs","Understand Microsoft technologies by querying official documentation. Use whenever the user asks how something works, wants tutorials, needs configuration options, limits, quotas, or best practices for any Microsoft technology (Azure, .NET, M365, Windows, Power Platform, etc.)—even if they don't mention \"docs.\" If the question is about understanding a concept rather than writing code, this is the right skill.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmicrosoft-docs\u002FSKILL.md",[140],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[142,9,143,144,145,146,147,148,149,150,151,19,152,153,154,21,155,59,156,157,158,159,160,23],"docs","microsoft docs","MCP","writing","cli","mcp server","windows","power platform","official","documentation","learn","best practices","question","power","back","technology","platform","learn mcp","concept",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":168,"publishedAt":38},"01M69B49C3YPD1ZJ3NC0HPCY58","mcp-builder","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP), Node\u002FTypeScript (MCP SDK), or C#\u002F.NET (Microsoft MCP SDK).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmcp-builder\u002FSKILL.md",[167],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},[144,169,170,171,117,172,31,173,9,174,175,127,176,177,91,21,178,179,180,24,23,22],"mcp builder","builder","typescript","llms","model context protocol","fastmcp","Tools","node","context","integrate","mcp sdk","building mcp servers",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":199,"publishedAt":38},"01M69B467A7CDMFQ0T6Q0ZA12Q","kql","KQL language expertise for writing correct, efficient Kusto Query Language queries. Covers syntax gotchas, join patterns, dynamic types, datetime pitfalls, regex patterns, serialization, memory management, result-size discipline, and advanced functions (geo, vector, graph). USE THIS SKILL whenever writing, debugging, or reviewing KQL queries — even simple ones — because the gotchas section prevents the most common errors that waste tool calls and cause expensive retry cascades. Trigger on: KQL, Kusto, ADX, Azure Data Explorer, Fabric Real-Time Intelligence, EventHouse, Log Analytics, log analysis, data exploration, time series, anomaly detection, summarize, where clause, join, extend, project, let statement, parse operator, extract function, any mention of pipe-forward query syntax.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fkql\u002FSKILL.md",[187,190,191,196],{"categoryNo":188,"categoryName":189,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},{"categoryNo":192,"categoryName":193,"taxonomyType":194,"taxonomyTypeDesc":195},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",{"categoryNo":197,"categoryName":198,"taxonomyType":194,"taxonomyTypeDesc":195},"01JBSEEDCAT000000000000036","内容创作者",[183,145,200,201,202,19,203,204,205,206,207,208,209,210,211,212,213,214,215,23,216,217,218],"summarize","memory","analytics","vector","time series","tool","discipline","log","geo","exploration","pipe","time","project","regex","join","datetime","section","anomaly","parse",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":225,"publishedAt":38},"01M69B44HJQ7897EZ7NE7DWQX3","github-issue-creator","Convert raw notes, error logs, voice dictation, or screenshots into crisp GitHub-flavored markdown issue reports. Use when the user pastes bug info, error messages, or informal descriptions and wants a structured GitHub issue. Supports images\u002FGIFs for visual evidence.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fgithub-issue-creator\u002FSKILL.md",[],[226,227,228,229,84,230,231,232,233,234,235,236,21,237,238,239,240,241,242,23,22],"github","github issue creator","github issue","issue","issue creator","screenshots","notes","logs","error messages","messages","convert","evidence","reports","images","info","visual","error"]