Loading...
Loading...
Helps create, configure, and deploy Azure Static Web Apps using the SWA CLI. Use when deploying static sites to Azure, setting up SWA local development, configuring staticwebapp.config.json, adding Azure Functions APIs to SWA, or setting up GitHub Actions CI/CD for Static Web Apps.
npx skill4agent add github/awesome-copilot azure-static-web-appsswaswa-cli.config.jsonswa initstaticwebapp.config.jsonnpm install -D @azure/static-web-apps-clinpx swa --versionswa initswa-cli.config.jsonswa initswa-cli.config.jsonswa starthttp://localhost:4280swa loginswa deployswa initswa initswa init --yes{
"$schema": "https://aka.ms/azure/static-web-apps-cli/schema",
"configurations": {
"app": {
"appLocation": ".",
"apiLocation": "api",
"outputLocation": "dist",
"appBuildCommand": "npm run build",
"run": "npm run dev",
"appDevserverUrl": "http://localhost:3000"
}
}
}{
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/images/*", "/css/*"]
},
"routes": [
{ "route": "/api/*", "allowedRoles": ["authenticated"] }
],
"platform": {
"apiRuntime": "node:20"
}
}swa login # Interactive login
swa login --subscription-id <id> # Specific subscription
swa login --clear-credentials # Clear cached credentials--subscription-id, -S--resource-group, -R--tenant-id, -T--client-id, -C--client-secret, -CS--app-name, -nswa init # Interactive setup
swa init --yes # Accept defaultsswa build # Build using config
swa build --auto # Auto-detect and build
swa build myApp # Build specific configuration--app-location, -a--api-location, -i--output-location, -O--app-build-command, -A--api-build-command, -Iswa start # Serve from outputLocation
swa start ./dist # Serve specific folder
swa start http://localhost:3000 # Proxy to dev server
swa start ./dist --api-location ./api # With API folder
swa start http://localhost:3000 --run "npm start" # Auto-start dev server| Framework | Port |
|---|---|
| React/Vue/Next.js | 3000 |
| Angular | 4200 |
| Vite | 5173 |
--port, -p--api-location, -i--api-port, -j--run, -r--open, -o--ssl, -sswa deploy # Deploy using config
swa deploy ./dist # Deploy specific folder
swa deploy --env production # Deploy to production
swa deploy --deployment-token <TOKEN> # Use deployment token
swa deploy --dry-run # Preview without deployingswa deploy --print-tokenSWA_CLI_DEPLOYMENT_TOKEN--envpreviewproduction--deployment-token, -d--app-name, -nswa db init --database-type mssql
swa db init --database-type postgresql
swa db init --database-type cosmosdb_nosqlswa initswa startswa deployswa-cli.config.json# 1. Install CLI
npm install -D @azure/static-web-apps-cli
# 2. Initialize - REQUIRED: creates swa-cli.config.json with auto-detected settings
npx swa init # Interactive mode
# OR
npx swa init --yes # Accept auto-detected defaults
# 3. Build application (if needed)
npm run build
# 4. Test locally (uses settings from swa-cli.config.json)
npx swa start
# 5. Deploy
npx swa login
npx swa deploy --env productionmkdir api && cd api
func init --worker-runtime node --model V4
func new --name message --template "HTTP trigger"api/src/functions/message.jsconst { app } = require('@azure/functions');
app.http('message', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request) => {
const name = request.query.get('name') || 'World';
return { jsonBody: { message: `Hello, ${name}!` } };
}
});staticwebapp.config.json{
"platform": { "apiRuntime": "node:20" }
}swa-cli.config.json{
"configurations": {
"app": { "apiLocation": "api" }
}
}npx swa start ./dist --api-location ./api
# Access API at http://localhost:4280/api/messagenode:18node:20node:22dotnet:8.0dotnet-isolated:8.0python:3.10python:3.11.github/workflows/azure-static-web-apps.ymlname: Azure Static Web Apps CI/CD
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize, reopened, closed]
branches: [main]
jobs:
build_and_deploy:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build And Deploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: upload
app_location: /
api_location: api
output_location: dist
close_pr:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
runs-on: ubuntu-latest
steps:
- uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
action: closeAZURE_STATIC_WEB_APPS_API_TOKENapp_locationapi_locationoutput_locationskip_app_build: trueapp_build_command| Issue | Solution |
|---|---|
| 404 on client routes | Add |
| API returns 404 | Verify |
| Build output not found | Verify |
| Auth not working locally | Use |
| CORS errors | APIs under |
| Deployment token expired | Regenerate in Azure Portal → Static Web App → Manage deployment token |
| Config not applied | Ensure |
| Local API timeout | Default is 45 seconds; optimize function or check for blocking calls |
swa start --verbose log # Verbose output
swa deploy --dry-run # Preview deployment
swa --print-config # Show resolved configuration