@vodailoc/kilo-kit-mcp 1.1.0 → 1.2.0
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/.mcp/kilo-kit.codex-windows.toml +5 -0
- package/LICENSE +190 -190
- package/QUICKSTART.md +265 -255
- package/README.md +321 -267
- package/mcp/README.md +64 -12
- package/mcp/dist/formatters.js +142 -1
- package/mcp/dist/orchestration-audit.js +20 -0
- package/mcp/dist/orchestration-memory.js +258 -0
- package/mcp/dist/orchestration-types.js +1 -0
- package/mcp/dist/orchestrator.js +222 -0
- package/mcp/dist/question-templates.js +249 -0
- package/mcp/dist/route-analytics.js +149 -0
- package/mcp/dist/router.js +75 -82
- package/mcp/dist/routing-policy-data.js +241 -0
- package/mcp/dist/routing-policy.js +145 -0
- package/mcp/dist/server.js +93 -4
- package/mcp/dist/smoke-env.js +18 -0
- package/mcp/dist/smoke.js +68 -1
- package/mcp/package.json +1 -2
- package/package.json +3 -2
- package/skills/README.md +647 -647
- package/skills/SKILLS_INDEX.md +139 -139
- package/skills/ai-media/ai-multimodal/.env.example +97 -97
- package/skills/ai-media/ai-multimodal/SKILL.md +357 -357
- package/skills/ai-media/ai-multimodal/references/audio-processing.md +373 -373
- package/skills/ai-media/ai-multimodal/references/image-generation.md +558 -558
- package/skills/ai-media/ai-multimodal/references/video-analysis.md +502 -502
- package/skills/ai-media/ai-multimodal/references/vision-understanding.md +483 -483
- package/skills/ai-media/ai-multimodal/scripts/document_converter.py +395 -395
- package/skills/ai-media/ai-multimodal/scripts/gemini_batch_process.py +480 -480
- package/skills/ai-media/ai-multimodal/scripts/media_optimizer.py +506 -506
- package/skills/ai-media/ai-multimodal/scripts/requirements.txt +26 -26
- package/skills/ai-media/ai-multimodal/scripts/tests/requirements.txt +20 -20
- package/skills/ai-media/ai-multimodal/scripts/tests/test_document_converter.py +299 -299
- package/skills/ai-media/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -362
- package/skills/ai-media/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -373
- package/skills/ai-media/media-processing/SKILL.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-encoding.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-filters.md +503 -503
- package/skills/ai-media/media-processing/references/ffmpeg-streaming.md +403 -403
- package/skills/ai-media/media-processing/references/format-compatibility.md +375 -375
- package/skills/ai-media/media-processing/references/imagemagick-batch.md +612 -612
- package/skills/ai-media/media-processing/references/imagemagick-editing.md +623 -623
- package/skills/ai-media/media-processing/scripts/batch_resize.py +342 -342
- package/skills/ai-media/media-processing/scripts/media_convert.py +311 -311
- package/skills/ai-media/media-processing/scripts/requirements.txt +24 -24
- package/skills/ai-media/media-processing/scripts/tests/requirements.txt +2 -2
- package/skills/ai-media/media-processing/scripts/tests/test_batch_resize.py +372 -372
- package/skills/ai-media/media-processing/scripts/tests/test_media_convert.py +259 -259
- package/skills/ai-media/media-processing/scripts/tests/test_video_optimize.py +397 -397
- package/skills/ai-media/media-processing/scripts/video_optimize.py +414 -414
- package/skills/ai-media/screenshot/LICENSE.txt +201 -201
- package/skills/ai-media/screenshot/SKILL.md +267 -267
- package/skills/ai-media/screenshot/agents/openai.yaml +6 -6
- package/skills/ai-media/screenshot/assets/screenshot-small.svg +5 -5
- package/skills/ai-media/screenshot/scripts/ensure_macos_permissions.sh +54 -54
- package/skills/ai-media/screenshot/scripts/macos_display_info.swift +22 -22
- package/skills/ai-media/screenshot/scripts/macos_permissions.swift +40 -40
- package/skills/ai-media/screenshot/scripts/macos_window_info.swift +126 -126
- package/skills/ai-media/screenshot/scripts/take_screenshot.ps1 +163 -163
- package/skills/ai-media/screenshot/scripts/take_screenshot.py +585 -585
- package/skills/ai-media/sora/LICENSE.txt +201 -201
- package/skills/ai-media/sora/SKILL.md +153 -153
- package/skills/ai-media/sora/agents/openai.yaml +6 -6
- package/skills/ai-media/sora/assets/sora-small.svg +4 -4
- package/skills/ai-media/sora/references/cinematic-shots.md +53 -53
- package/skills/ai-media/sora/references/cli.md +248 -248
- package/skills/ai-media/sora/references/codex-network.md +28 -28
- package/skills/ai-media/sora/references/prompting.md +137 -137
- package/skills/ai-media/sora/references/sample-prompts.md +95 -95
- package/skills/ai-media/sora/references/social-ads.md +42 -42
- package/skills/ai-media/sora/references/troubleshooting.md +58 -58
- package/skills/ai-media/sora/references/video-api.md +45 -45
- package/skills/ai-media/sora/scripts/sora.py +970 -970
- package/skills/design/aesthetic/SKILL.md +121 -121
- package/skills/design/aesthetic/assets/design-guideline-template.md +163 -163
- package/skills/design/aesthetic/assets/design-story-template.md +135 -135
- package/skills/design/aesthetic/references/design-principles.md +62 -62
- package/skills/design/aesthetic/references/design-resources.md +75 -75
- package/skills/design/aesthetic/references/micro-interactions.md +53 -53
- package/skills/design/aesthetic/references/storytelling-design.md +50 -50
- package/skills/design/figma/LICENSE.txt +202 -202
- package/skills/design/figma/SKILL.md +42 -42
- package/skills/design/figma/agents/openai.yaml +14 -14
- package/skills/design/figma/assets/figma-small.svg +3 -3
- package/skills/design/figma/assets/icon.svg +28 -28
- package/skills/design/figma/references/figma-mcp-config.md +35 -35
- package/skills/design/figma/references/figma-tools-and-prompts.md +34 -34
- package/skills/design/figma-implement-design/LICENSE.txt +202 -202
- package/skills/design/figma-implement-design/SKILL.md +264 -264
- package/skills/design/figma-implement-design/agents/openai.yaml +14 -14
- package/skills/design/figma-implement-design/assets/figma-small.svg +3 -3
- package/skills/design/figma-implement-design/assets/icon.svg +28 -28
- package/skills/design/frontend-design/SKILL.md +41 -41
- package/skills/design/frontend-design/references/animejs.md +395 -395
- package/skills/design/ui-styling/LICENSE.txt +201 -201
- package/skills/design/ui-styling/SKILL.md +321 -321
- package/skills/design/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/design/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/design/ui-styling/references/canvas-design-system.md +320 -320
- package/skills/design/ui-styling/references/shadcn-accessibility.md +471 -471
- package/skills/design/ui-styling/references/shadcn-components.md +424 -424
- package/skills/design/ui-styling/references/shadcn-theming.md +373 -373
- package/skills/design/ui-styling/references/tailwind-customization.md +483 -483
- package/skills/design/ui-styling/references/tailwind-responsive.md +382 -382
- package/skills/design/ui-styling/references/tailwind-utilities.md +455 -455
- package/skills/design/ui-styling/scripts/requirements.txt +17 -17
- package/skills/design/ui-styling/scripts/shadcn_add.py +292 -292
- package/skills/design/ui-styling/scripts/tailwind_config_gen.py +456 -456
- package/skills/design/ui-styling/scripts/tests/requirements.txt +3 -3
- package/skills/design/ui-styling/scripts/tests/test_shadcn_add.py +266 -266
- package/skills/design/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -336
- package/skills/engineering/aspnet-core/LICENSE.txt +201 -201
- package/skills/engineering/aspnet-core/SKILL.md +61 -61
- package/skills/engineering/aspnet-core/agents/openai.yaml +5 -5
- package/skills/engineering/aspnet-core/references/_sections.md +40 -40
- package/skills/engineering/aspnet-core/references/apis-minimal-and-controllers.md +81 -81
- package/skills/engineering/aspnet-core/references/data-state-and-services.md +69 -69
- package/skills/engineering/aspnet-core/references/program-and-pipeline.md +103 -103
- package/skills/engineering/aspnet-core/references/realtime-grpc-and-background-work.md +58 -58
- package/skills/engineering/aspnet-core/references/security-and-identity.md +75 -75
- package/skills/engineering/aspnet-core/references/source-map.md +43 -43
- package/skills/engineering/aspnet-core/references/stack-selection.md +63 -63
- package/skills/engineering/aspnet-core/references/testing-performance-and-operations.md +92 -92
- package/skills/engineering/aspnet-core/references/ui-blazor.md +53 -53
- package/skills/engineering/aspnet-core/references/ui-mvc.md +56 -56
- package/skills/engineering/aspnet-core/references/ui-razor-pages.md +55 -55
- package/skills/engineering/aspnet-core/references/versioning-and-upgrades.md +51 -51
- package/skills/engineering/backend-development/SKILL.md +95 -95
- package/skills/engineering/backend-development/references/backend-api-design.md +495 -495
- package/skills/engineering/backend-development/references/backend-architecture.md +454 -454
- package/skills/engineering/backend-development/references/backend-authentication.md +338 -338
- package/skills/engineering/backend-development/references/backend-code-quality.md +659 -659
- package/skills/engineering/backend-development/references/backend-debugging.md +904 -904
- package/skills/engineering/backend-development/references/backend-devops.md +494 -494
- package/skills/engineering/backend-development/references/backend-mindset.md +387 -387
- package/skills/engineering/backend-development/references/backend-performance.md +397 -397
- package/skills/engineering/backend-development/references/backend-security.md +290 -290
- package/skills/engineering/backend-development/references/backend-technologies.md +256 -256
- package/skills/engineering/backend-development/references/backend-testing.md +429 -429
- package/skills/engineering/better-auth/SKILL.md +204 -204
- package/skills/engineering/better-auth/references/advanced-features.md +553 -553
- package/skills/engineering/better-auth/references/database-integration.md +577 -577
- package/skills/engineering/better-auth/references/email-password-auth.md +416 -416
- package/skills/engineering/better-auth/references/oauth-providers.md +430 -430
- package/skills/engineering/better-auth/scripts/better_auth_init.py +521 -521
- package/skills/engineering/better-auth/scripts/requirements.txt +15 -15
- package/skills/engineering/better-auth/scripts/tests/test_better_auth_init.py +421 -421
- package/skills/engineering/code-review/SKILL.md +140 -140
- package/skills/engineering/code-review/references/code-review-reception.md +208 -208
- package/skills/engineering/code-review/references/requesting-code-review.md +104 -104
- package/skills/engineering/code-review/references/verification-before-completion.md +138 -138
- package/skills/engineering/context-engineering/SKILL.md +86 -86
- package/skills/engineering/context-engineering/references/context-compression.md +84 -84
- package/skills/engineering/context-engineering/references/context-degradation.md +93 -93
- package/skills/engineering/context-engineering/references/context-fundamentals.md +75 -75
- package/skills/engineering/context-engineering/references/context-optimization.md +82 -82
- package/skills/engineering/context-engineering/references/evaluation.md +89 -89
- package/skills/engineering/context-engineering/references/memory-systems.md +88 -88
- package/skills/engineering/context-engineering/references/multi-agent-patterns.md +90 -90
- package/skills/engineering/context-engineering/references/project-development.md +97 -97
- package/skills/engineering/context-engineering/references/tool-design.md +86 -86
- package/skills/engineering/context-engineering/scripts/compression_evaluator.py +329 -329
- package/skills/engineering/context-engineering/scripts/context_analyzer.py +294 -294
- package/skills/engineering/databases/SKILL.md +232 -232
- package/skills/engineering/databases/references/mongodb-aggregation.md +447 -447
- package/skills/engineering/databases/references/mongodb-atlas.md +465 -465
- package/skills/engineering/databases/references/mongodb-crud.md +408 -408
- package/skills/engineering/databases/references/mongodb-indexing.md +442 -442
- package/skills/engineering/databases/references/postgresql-administration.md +594 -594
- package/skills/engineering/databases/references/postgresql-performance.md +527 -527
- package/skills/engineering/databases/references/postgresql-psql-cli.md +467 -467
- package/skills/engineering/databases/references/postgresql-queries.md +475 -475
- package/skills/engineering/databases/scripts/db_backup.py +502 -502
- package/skills/engineering/databases/scripts/db_migrate.py +414 -414
- package/skills/engineering/databases/scripts/db_performance_check.py +444 -444
- package/skills/engineering/databases/scripts/requirements.txt +20 -20
- package/skills/engineering/databases/scripts/tests/requirements.txt +4 -4
- package/skills/engineering/databases/scripts/tests/test_db_backup.py +340 -340
- package/skills/engineering/databases/scripts/tests/test_db_migrate.py +277 -277
- package/skills/engineering/databases/scripts/tests/test_db_performance_check.py +370 -370
- package/skills/engineering/diagnose/SKILL.md +117 -117
- package/skills/engineering/diagnose/scripts/hitl-loop.template.sh +41 -41
- package/skills/engineering/docs-seeker/SKILL.md +207 -207
- package/skills/engineering/docs-seeker/WORKFLOWS.md +505 -505
- package/skills/engineering/docs-seeker/references/best-practices.md +632 -632
- package/skills/engineering/docs-seeker/references/documentation-sources.md +461 -461
- package/skills/engineering/docs-seeker/references/error-handling.md +621 -621
- package/skills/engineering/docs-seeker/references/limitations.md +821 -821
- package/skills/engineering/docs-seeker/references/performance.md +574 -574
- package/skills/engineering/docs-seeker/references/tool-selection.md +262 -262
- package/skills/engineering/frontend-development/SKILL.md +398 -398
- package/skills/engineering/frontend-development/resources/common-patterns.md +330 -330
- package/skills/engineering/frontend-development/resources/complete-examples.md +871 -871
- package/skills/engineering/frontend-development/resources/component-patterns.md +501 -501
- package/skills/engineering/frontend-development/resources/data-fetching.md +766 -766
- package/skills/engineering/frontend-development/resources/file-organization.md +501 -501
- package/skills/engineering/frontend-development/resources/loading-and-error-states.md +500 -500
- package/skills/engineering/frontend-development/resources/performance.md +405 -405
- package/skills/engineering/frontend-development/resources/routing-guide.md +363 -363
- package/skills/engineering/frontend-development/resources/styling-guide.md +427 -427
- package/skills/engineering/frontend-development/resources/typescript-standards.md +417 -417
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +37 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +53 -53
- package/skills/engineering/improve-codebase-architecture/SKILL.md +71 -71
- package/skills/engineering/openai-docs/LICENSE.txt +201 -201
- package/skills/engineering/openai-docs/SKILL.md +69 -69
- package/skills/engineering/openai-docs/agents/openai.yaml +14 -14
- package/skills/engineering/openai-docs/assets/openai-small.svg +3 -3
- package/skills/engineering/openai-docs/references/gpt-5p4-prompting-guide.md +433 -433
- package/skills/engineering/openai-docs/references/latest-model.md +35 -35
- package/skills/engineering/openai-docs/references/upgrading-to-gpt-5p4.md +164 -164
- package/skills/engineering/playwright/LICENSE.txt +201 -201
- package/skills/engineering/playwright/NOTICE.txt +14 -14
- package/skills/engineering/playwright/SKILL.md +147 -147
- package/skills/engineering/playwright/agents/openai.yaml +6 -6
- package/skills/engineering/playwright/assets/playwright-small.svg +3 -3
- package/skills/engineering/playwright/references/cli.md +116 -116
- package/skills/engineering/playwright/references/workflows.md +95 -95
- package/skills/engineering/playwright/scripts/playwright_cli.sh +25 -25
- package/skills/engineering/playwright-interactive/LICENSE.txt +201 -201
- package/skills/engineering/playwright-interactive/NOTICE.txt +13 -13
- package/skills/engineering/playwright-interactive/SKILL.md +689 -689
- package/skills/engineering/playwright-interactive/agents/openai.yaml +6 -6
- package/skills/engineering/playwright-interactive/assets/playwright-small.svg +3 -3
- package/skills/engineering/render-deploy/LICENSE.txt +201 -201
- package/skills/engineering/render-deploy/SKILL.md +479 -479
- package/skills/engineering/render-deploy/agents/openai.yaml +14 -14
- package/skills/engineering/render-deploy/assets/docker.yaml +62 -62
- package/skills/engineering/render-deploy/assets/go-api.yaml +35 -35
- package/skills/engineering/render-deploy/assets/nextjs-postgres.yaml +35 -35
- package/skills/engineering/render-deploy/assets/node-express.yaml +25 -25
- package/skills/engineering/render-deploy/assets/python-django.yaml +89 -89
- package/skills/engineering/render-deploy/assets/render-small.svg +3 -3
- package/skills/engineering/render-deploy/assets/static-site.yaml +54 -54
- package/skills/engineering/render-deploy/references/blueprint-spec.md +718 -718
- package/skills/engineering/render-deploy/references/codebase-analysis.md +49 -49
- package/skills/engineering/render-deploy/references/configuration-guide.md +603 -603
- package/skills/engineering/render-deploy/references/deployment-details.md +224 -224
- package/skills/engineering/render-deploy/references/direct-creation.md +113 -113
- package/skills/engineering/render-deploy/references/error-patterns.md +13 -13
- package/skills/engineering/render-deploy/references/post-deploy-checks.md +36 -36
- package/skills/engineering/render-deploy/references/runtimes.md +473 -473
- package/skills/engineering/render-deploy/references/service-types.md +450 -450
- package/skills/engineering/render-deploy/references/troubleshooting-basics.md +36 -36
- package/skills/engineering/repomix/SKILL.md +215 -215
- package/skills/engineering/repomix/references/configuration.md +211 -211
- package/skills/engineering/repomix/references/usage-patterns.md +232 -232
- package/skills/engineering/repomix/scripts/README.md +179 -179
- package/skills/engineering/repomix/scripts/repomix_batch.py +455 -455
- package/skills/engineering/repomix/scripts/repos.example.json +15 -15
- package/skills/engineering/repomix/scripts/requirements.txt +15 -15
- package/skills/engineering/repomix/scripts/tests/test_repomix_batch.py +531 -531
- package/skills/engineering/setup-matt-pocock-skills/SKILL.md +121 -121
- package/skills/engineering/setup-matt-pocock-skills/domain.md +51 -51
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +22 -22
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -23
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +19 -19
- package/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -15
- package/skills/engineering/shopify/README.md +66 -66
- package/skills/engineering/shopify/SKILL.md +319 -319
- package/skills/engineering/shopify/references/app-development.md +470 -470
- package/skills/engineering/shopify/references/extensions.md +493 -493
- package/skills/engineering/shopify/references/themes.md +498 -498
- package/skills/engineering/shopify/scripts/requirements.txt +19 -19
- package/skills/engineering/shopify/scripts/shopify_init.py +423 -423
- package/skills/engineering/shopify/scripts/tests/test_shopify_init.py +385 -385
- package/skills/engineering/tdd/SKILL.md +109 -109
- package/skills/engineering/tdd/deep-modules.md +33 -33
- package/skills/engineering/tdd/interface-design.md +31 -31
- package/skills/engineering/tdd/mocking.md +59 -59
- package/skills/engineering/tdd/refactoring.md +10 -10
- package/skills/engineering/tdd/tests.md +61 -61
- package/skills/engineering/to-issues/SKILL.md +81 -81
- package/skills/engineering/to-prd/SKILL.md +74 -74
- package/skills/engineering/triage/AGENT-BRIEF.md +168 -168
- package/skills/engineering/triage/OUT-OF-SCOPE.md +101 -101
- package/skills/engineering/triage/SKILL.md +103 -103
- package/skills/engineering/web-frameworks/SKILL.md +324 -324
- package/skills/engineering/web-frameworks/references/nextjs-app-router.md +465 -465
- package/skills/engineering/web-frameworks/references/nextjs-data-fetching.md +459 -459
- package/skills/engineering/web-frameworks/references/nextjs-optimization.md +511 -511
- package/skills/engineering/web-frameworks/references/nextjs-server-components.md +495 -495
- package/skills/engineering/web-frameworks/references/remix-icon-integration.md +603 -603
- package/skills/engineering/web-frameworks/references/turborepo-caching.md +551 -551
- package/skills/engineering/web-frameworks/references/turborepo-pipelines.md +517 -517
- package/skills/engineering/web-frameworks/references/turborepo-setup.md +542 -542
- package/skills/engineering/web-frameworks/scripts/nextjs_init.py +547 -547
- package/skills/engineering/web-frameworks/scripts/requirements.txt +16 -16
- package/skills/engineering/web-frameworks/scripts/tests/requirements.txt +3 -3
- package/skills/engineering/web-frameworks/scripts/tests/test_nextjs_init.py +319 -319
- package/skills/engineering/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -374
- package/skills/engineering/web-frameworks/scripts/turborepo_migrate.py +394 -394
- package/skills/engineering/write-a-skill/SKILL.md +117 -117
- package/skills/kilo-kit/SKILL.md +346 -346
- package/skills/kilo-kit/_template/SKILL.md +185 -185
- package/skills/kilo-kit/debugging/root-cause/SKILL.md +360 -360
- package/skills/kilo-kit/debugging/systematic/SKILL.md +339 -339
- package/skills/kilo-kit/debugging/verification/SKILL.md +424 -424
- package/skills/kilo-kit/development/backend/SKILL.md +540 -540
- package/skills/kilo-kit/development/security/SKILL.md +529 -529
- package/skills/kilo-kit/quality/code-review/SKILL.md +297 -297
- package/skills/kilo-kit/quality/testing/SKILL.md +540 -540
- package/skills/kilo-kit/references/output-formats.md +204 -204
- package/skills/kilo-kit/references/patterns.md +156 -156
- package/skills/kilo-kit/references/performance-benchmarks.md +90 -90
- package/skills/operations/chrome-devtools/SKILL.md +392 -392
- package/skills/operations/chrome-devtools/references/cdp-domains.md +694 -694
- package/skills/operations/chrome-devtools/references/performance-guide.md +940 -940
- package/skills/operations/chrome-devtools/references/puppeteer-reference.md +953 -953
- package/skills/operations/chrome-devtools/scripts/PERSISTENT-BROWSER.md +107 -107
- package/skills/operations/chrome-devtools/scripts/README.md +213 -213
- package/skills/operations/chrome-devtools/scripts/__tests__/selector.test.js +210 -210
- package/skills/operations/chrome-devtools/scripts/click.js +79 -79
- package/skills/operations/chrome-devtools/scripts/close-persistent.js +36 -36
- package/skills/operations/chrome-devtools/scripts/console.js +75 -75
- package/skills/operations/chrome-devtools/scripts/evaluate.js +49 -49
- package/skills/operations/chrome-devtools/scripts/fill.js +72 -72
- package/skills/operations/chrome-devtools/scripts/install-deps.sh +181 -181
- package/skills/operations/chrome-devtools/scripts/install.sh +83 -83
- package/skills/operations/chrome-devtools/scripts/launch-persistent.js +71 -71
- package/skills/operations/chrome-devtools/scripts/lib/browser.js +144 -144
- package/skills/operations/chrome-devtools/scripts/lib/selector.js +178 -178
- package/skills/operations/chrome-devtools/scripts/navigate.js +46 -46
- package/skills/operations/chrome-devtools/scripts/network.js +102 -102
- package/skills/operations/chrome-devtools/scripts/package-lock.json +1206 -1206
- package/skills/operations/chrome-devtools/scripts/package.json +15 -15
- package/skills/operations/chrome-devtools/scripts/performance.js +145 -145
- package/skills/operations/chrome-devtools/scripts/screenshot.js +180 -180
- package/skills/operations/chrome-devtools/scripts/snapshot.js +131 -131
- package/skills/operations/devops/.env.example +76 -76
- package/skills/operations/devops/SKILL.md +285 -285
- package/skills/operations/devops/references/browser-rendering.md +305 -305
- package/skills/operations/devops/references/cloudflare-d1-kv.md +123 -123
- package/skills/operations/devops/references/cloudflare-platform.md +271 -271
- package/skills/operations/devops/references/cloudflare-r2-storage.md +280 -280
- package/skills/operations/devops/references/cloudflare-workers-advanced.md +312 -312
- package/skills/operations/devops/references/cloudflare-workers-apis.md +309 -309
- package/skills/operations/devops/references/cloudflare-workers-basics.md +418 -418
- package/skills/operations/devops/references/docker-basics.md +297 -297
- package/skills/operations/devops/references/docker-compose.md +292 -292
- package/skills/operations/devops/references/gcloud-platform.md +297 -297
- package/skills/operations/devops/references/gcloud-services.md +304 -304
- package/skills/operations/devops/scripts/cloudflare_deploy.py +269 -269
- package/skills/operations/devops/scripts/docker_optimize.py +320 -320
- package/skills/operations/devops/scripts/requirements.txt +20 -20
- package/skills/operations/devops/scripts/tests/requirements.txt +3 -3
- package/skills/operations/devops/scripts/tests/test_cloudflare_deploy.py +285 -285
- package/skills/operations/devops/scripts/tests/test_docker_optimize.py +436 -436
- package/skills/operations/mcp-builder/LICENSE.txt +201 -201
- package/skills/operations/mcp-builder/SKILL.md +328 -328
- package/skills/operations/mcp-builder/reference/evaluation.md +601 -601
- package/skills/operations/mcp-builder/reference/mcp_best_practices.md +915 -915
- package/skills/operations/mcp-builder/reference/node_mcp_server.md +915 -915
- package/skills/operations/mcp-builder/reference/python_mcp_server.md +751 -751
- package/skills/operations/mcp-builder/scripts/connections.py +151 -151
- package/skills/operations/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/operations/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/operations/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/operations/mcp-management/README.md +219 -219
- package/skills/operations/mcp-management/SKILL.md +175 -175
- package/skills/operations/mcp-management/assets/tools.json +3043 -3043
- package/skills/operations/mcp-management/references/configuration.md +114 -114
- package/skills/operations/mcp-management/references/gemini-cli-integration.md +201 -201
- package/skills/operations/mcp-management/references/mcp-protocol.md +116 -116
- package/skills/operations/mcp-management/scripts/.env.example +10 -10
- package/skills/operations/mcp-management/scripts/cli.ts +155 -155
- package/skills/operations/mcp-management/scripts/dist/analyze-tools.js +70 -70
- package/skills/operations/mcp-management/scripts/dist/cli.js +131 -131
- package/skills/operations/mcp-management/scripts/dist/mcp-client.js +115 -115
- package/skills/operations/mcp-management/scripts/mcp-client.ts +163 -163
- package/skills/operations/mcp-management/scripts/package.json +18 -18
- package/skills/operations/mcp-management/scripts/tsconfig.json +15 -15
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -62
- package/skills/problem-solving/defense-in-depth/SKILL.md +130 -130
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -58
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -54
- package/skills/problem-solving/root-cause-tracing/SKILL.md +177 -177
- package/skills/problem-solving/root-cause-tracing/find-polluter.sh +63 -63
- package/skills/problem-solving/scale-game/SKILL.md +63 -63
- package/skills/problem-solving/sequential-thinking/README.md +118 -118
- package/skills/problem-solving/sequential-thinking/SKILL.md +93 -93
- package/skills/problem-solving/sequential-thinking/references/advanced.md +122 -122
- package/skills/problem-solving/sequential-thinking/references/examples.md +274 -274
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -76
- package/skills/problem-solving/when-stuck/SKILL.md +88 -88
- package/skills/productivity/caveman/SKILL.md +49 -49
- package/skills/productivity/grill-me/SKILL.md +10 -10
- package/skills/productivity/grill-with-docs/ADR-FORMAT.md +47 -47
- package/skills/productivity/grill-with-docs/CONTEXT-FORMAT.md +77 -77
- package/skills/productivity/grill-with-docs/SKILL.md +88 -88
- package/skills/productivity/writing-skills/graphviz-conventions.dot +171 -171
- package/skills/productivity/zoom-out/SKILL.md +7 -7
- package/skills/writing-docs/doc/LICENSE.txt +201 -201
- package/skills/writing-docs/doc/SKILL.md +80 -80
- package/skills/writing-docs/doc/agents/openai.yaml +6 -6
- package/skills/writing-docs/doc/assets/doc-small.svg +3 -3
- package/skills/writing-docs/doc/scripts/render_docx.py +296 -296
- package/skills/writing-docs/docx/LICENSE.txt +30 -30
- package/skills/writing-docs/docx/SKILL.md +196 -196
- package/skills/writing-docs/docx/docx-js.md +349 -349
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/docx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/docx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/docx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/docx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/docx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/docx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/docx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/docx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/docx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/docx/ooxml.md +609 -609
- package/skills/writing-docs/docx/scripts/__init__.py +1 -1
- package/skills/writing-docs/docx/scripts/document.py +1276 -1276
- package/skills/writing-docs/docx/scripts/templates/comments.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtended.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtensible.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsIds.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/people.xml +2 -2
- package/skills/writing-docs/docx/scripts/utilities.py +374 -374
- package/skills/writing-docs/mermaidjs-v11/SKILL.md +115 -115
- package/skills/writing-docs/mermaidjs-v11/references/cli-usage.md +228 -228
- package/skills/writing-docs/mermaidjs-v11/references/configuration.md +232 -232
- package/skills/writing-docs/mermaidjs-v11/references/diagram-types.md +315 -315
- package/skills/writing-docs/mermaidjs-v11/references/examples.md +344 -344
- package/skills/writing-docs/mermaidjs-v11/references/integration.md +310 -310
- package/skills/writing-docs/pdf/LICENSE.txt +30 -30
- package/skills/writing-docs/pdf/SKILL.md +294 -294
- package/skills/writing-docs/pdf/forms.md +205 -205
- package/skills/writing-docs/pdf/reference.md +611 -611
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes.py +70 -70
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes_test.py +226 -226
- package/skills/writing-docs/pdf/scripts/check_fillable_fields.py +12 -12
- package/skills/writing-docs/pdf/scripts/convert_pdf_to_images.py +35 -35
- package/skills/writing-docs/pdf/scripts/create_validation_image.py +41 -41
- package/skills/writing-docs/pdf/scripts/extract_form_field_info.py +152 -152
- package/skills/writing-docs/pdf/scripts/fill_fillable_fields.py +114 -114
- package/skills/writing-docs/pdf/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/skills/writing-docs/pptx/LICENSE.txt +30 -30
- package/skills/writing-docs/pptx/SKILL.md +483 -483
- package/skills/writing-docs/pptx/html2pptx.md +624 -624
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/pptx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/pptx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/pptx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/pptx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/pptx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/pptx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/pptx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/pptx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/pptx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/pptx/ooxml.md +426 -426
- package/skills/writing-docs/pptx/scripts/html2pptx.js +978 -978
- package/skills/writing-docs/pptx/scripts/inventory.py +1020 -1020
- package/skills/writing-docs/pptx/scripts/rearrange.py +231 -231
- package/skills/writing-docs/pptx/scripts/replace.py +385 -385
- package/skills/writing-docs/pptx/scripts/thumbnail.py +450 -450
- package/skills/writing-docs/slides/LICENSE.txt +201 -201
- package/skills/writing-docs/slides/SKILL.md +71 -71
- package/skills/writing-docs/slides/agents/openai.yaml +6 -6
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/code.js +104 -104
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/image.js +333 -333
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/index.js +33 -33
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/latex.js +51 -51
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout.js +643 -643
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -358
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/svg.js +36 -36
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/text.js +789 -789
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/util.js +24 -24
- package/skills/writing-docs/slides/assets/slides-small.svg +3 -3
- package/skills/writing-docs/slides/references/pptxgenjs-helpers.md +61 -61
- package/skills/writing-docs/slides/scripts/create_montage.py +300 -300
- package/skills/writing-docs/slides/scripts/detect_font.py +873 -873
- package/skills/writing-docs/slides/scripts/ensure_raster_image.py +202 -202
- package/skills/writing-docs/slides/scripts/render_slides.py +273 -273
- package/skills/writing-docs/slides/scripts/slides_test.py +201 -201
- package/skills/writing-docs/template-skill/SKILL.md +26 -26
- package/skills/writing-docs/xlsx/LICENSE.txt +30 -30
- package/skills/writing-docs/xlsx/SKILL.md +288 -288
- package/skills/writing-docs/xlsx/recalc.py +177 -177
- package/src/core/KILO_MASTER.md +448 -448
- package/src/tools/validate-skill.js +421 -421
|
@@ -1,718 +1,718 @@
|
|
|
1
|
-
# Render Blueprint Specification
|
|
2
|
-
|
|
3
|
-
Complete reference for render.yaml Blueprint files. Blueprints define your infrastructure as code for reproducible deployments on Render.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
A Blueprint is a YAML file (typically `render.yaml`) placed in your repository root that describes:
|
|
8
|
-
- Services (web, worker, cron, static, private)
|
|
9
|
-
- Databases (PostgreSQL, Redis)
|
|
10
|
-
- Environment variables and secrets
|
|
11
|
-
- Scaling and resource configuration
|
|
12
|
-
- Project organization
|
|
13
|
-
|
|
14
|
-
## Root-Level Structure
|
|
15
|
-
|
|
16
|
-
```yaml
|
|
17
|
-
# Top-level fields
|
|
18
|
-
services: [] # Array of service definitions
|
|
19
|
-
databases: [] # Array of PostgreSQL databases
|
|
20
|
-
envVarGroups: [] # Reusable environment variable groups (optional)
|
|
21
|
-
projects: [] # Project organization (optional)
|
|
22
|
-
ungrouped: [] # Resources outside projects (optional)
|
|
23
|
-
previews: # Preview environment configuration (optional)
|
|
24
|
-
generation: auto_preview | manual | none
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Service Types
|
|
28
|
-
|
|
29
|
-
### Web Services (`type: web`)
|
|
30
|
-
|
|
31
|
-
HTTP services, APIs, and web applications. Publicly accessible via HTTPS.
|
|
32
|
-
|
|
33
|
-
**Required fields:**
|
|
34
|
-
- `name`: Unique service identifier
|
|
35
|
-
- `type`: Must be `web`
|
|
36
|
-
- `runtime`: Language/environment (see Runtimes section)
|
|
37
|
-
- `buildCommand`: Command to build the application
|
|
38
|
-
- `startCommand`: Command to start the server
|
|
39
|
-
|
|
40
|
-
**Common optional fields:**
|
|
41
|
-
- `plan`: Instance type (default: `free`)
|
|
42
|
-
- `region`: Deployment region (default: `oregon`)
|
|
43
|
-
- `branch`: Git branch to deploy (default: `main`)
|
|
44
|
-
- `autoDeploy`: Auto-deploy on push (default: `true`)
|
|
45
|
-
- `envVars`: Environment variables array
|
|
46
|
-
- `healthCheckPath`: Health check endpoint (default: `/`)
|
|
47
|
-
- `numInstances`: Number of instances (manual scaling)
|
|
48
|
-
- `scaling`: Autoscaling configuration
|
|
49
|
-
|
|
50
|
-
**Example:**
|
|
51
|
-
```yaml
|
|
52
|
-
services:
|
|
53
|
-
- type: web
|
|
54
|
-
name: api-server
|
|
55
|
-
runtime: node
|
|
56
|
-
plan: free
|
|
57
|
-
buildCommand: npm ci
|
|
58
|
-
startCommand: npm start
|
|
59
|
-
branch: main
|
|
60
|
-
autoDeploy: true
|
|
61
|
-
envVars:
|
|
62
|
-
- key: NODE_ENV
|
|
63
|
-
value: production
|
|
64
|
-
- key: PORT
|
|
65
|
-
value: 10000
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Worker Services (`type: worker`)
|
|
69
|
-
|
|
70
|
-
Background job processors, queue consumers. Not publicly accessible.
|
|
71
|
-
|
|
72
|
-
**Required fields:**
|
|
73
|
-
- `name`: Unique service identifier
|
|
74
|
-
- `type`: Must be `worker`
|
|
75
|
-
- `runtime`: Language/environment
|
|
76
|
-
- `buildCommand`: Command to build
|
|
77
|
-
- `startCommand`: Command to start worker process
|
|
78
|
-
|
|
79
|
-
**Key differences from web services:**
|
|
80
|
-
- No public URL
|
|
81
|
-
- No health checks
|
|
82
|
-
- No port binding required
|
|
83
|
-
|
|
84
|
-
**Example:**
|
|
85
|
-
```yaml
|
|
86
|
-
services:
|
|
87
|
-
- type: worker
|
|
88
|
-
name: job-processor
|
|
89
|
-
runtime: python
|
|
90
|
-
plan: free
|
|
91
|
-
buildCommand: pip install -r requirements.txt
|
|
92
|
-
startCommand: celery -A tasks worker --loglevel=info
|
|
93
|
-
envVars:
|
|
94
|
-
- key: REDIS_URL
|
|
95
|
-
fromDatabase:
|
|
96
|
-
name: redis
|
|
97
|
-
property: connectionString
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Cron Jobs (`type: cron`)
|
|
101
|
-
|
|
102
|
-
Scheduled tasks that run on a cron schedule.
|
|
103
|
-
|
|
104
|
-
**Required fields:**
|
|
105
|
-
- `name`: Unique service identifier
|
|
106
|
-
- `type`: Must be `cron`
|
|
107
|
-
- `runtime`: Language/environment
|
|
108
|
-
- `schedule`: Cron expression
|
|
109
|
-
- `buildCommand`: Command to build
|
|
110
|
-
- `startCommand`: Command to execute on schedule
|
|
111
|
-
|
|
112
|
-
**Schedule format:** Standard cron syntax (minute hour day month weekday)
|
|
113
|
-
|
|
114
|
-
**Examples:**
|
|
115
|
-
- `0 0 * * *` - Daily at midnight UTC
|
|
116
|
-
- `*/15 * * * *` - Every 15 minutes
|
|
117
|
-
- `0 9 * * 1` - Every Monday at 9 AM UTC
|
|
118
|
-
|
|
119
|
-
**Example:**
|
|
120
|
-
```yaml
|
|
121
|
-
services:
|
|
122
|
-
- type: cron
|
|
123
|
-
name: daily-backup
|
|
124
|
-
runtime: node
|
|
125
|
-
schedule: "0 2 * * *"
|
|
126
|
-
buildCommand: npm ci
|
|
127
|
-
startCommand: node scripts/backup.js
|
|
128
|
-
envVars:
|
|
129
|
-
- key: DATABASE_URL
|
|
130
|
-
fromDatabase:
|
|
131
|
-
name: postgres
|
|
132
|
-
property: connectionString
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### Static Sites (`type: static` or `type: web` with `runtime: static`)
|
|
136
|
-
|
|
137
|
-
Serve static HTML/CSS/JS files via CDN.
|
|
138
|
-
|
|
139
|
-
**Required fields:**
|
|
140
|
-
- `name`: Unique service identifier
|
|
141
|
-
- `type`: `web`
|
|
142
|
-
- `runtime`: `static`
|
|
143
|
-
- `buildCommand`: Command to build static assets
|
|
144
|
-
- `staticPublishPath`: Path to built files (e.g., `./build`, `./dist`)
|
|
145
|
-
|
|
146
|
-
**Optional configuration:**
|
|
147
|
-
- `routes`: Routing rules for SPAs
|
|
148
|
-
- `headers`: Custom HTTP headers
|
|
149
|
-
- `buildFilter`: Path filters for build triggers
|
|
150
|
-
|
|
151
|
-
**Example:**
|
|
152
|
-
```yaml
|
|
153
|
-
services:
|
|
154
|
-
- type: web
|
|
155
|
-
name: react-app
|
|
156
|
-
runtime: static
|
|
157
|
-
buildCommand: npm ci && npm run build
|
|
158
|
-
staticPublishPath: ./dist
|
|
159
|
-
routes:
|
|
160
|
-
- type: rewrite
|
|
161
|
-
source: /*
|
|
162
|
-
destination: /index.html
|
|
163
|
-
headers:
|
|
164
|
-
- path: /*
|
|
165
|
-
name: Cache-Control
|
|
166
|
-
value: public, max-age=31536000, immutable
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### Private Services (`type: pserv`)
|
|
170
|
-
|
|
171
|
-
Internal services accessible only within your Render account.
|
|
172
|
-
|
|
173
|
-
**Required fields:**
|
|
174
|
-
- `name`: Unique service identifier
|
|
175
|
-
- `type`: Must be `pserv`
|
|
176
|
-
- `runtime`: Language/environment
|
|
177
|
-
- `buildCommand`: Command to build
|
|
178
|
-
- `startCommand`: Command to start
|
|
179
|
-
|
|
180
|
-
**Use cases:**
|
|
181
|
-
- Internal APIs
|
|
182
|
-
- Database proxies
|
|
183
|
-
- Microservices not exposed to internet
|
|
184
|
-
|
|
185
|
-
**Example:**
|
|
186
|
-
```yaml
|
|
187
|
-
services:
|
|
188
|
-
- type: pserv
|
|
189
|
-
name: internal-api
|
|
190
|
-
runtime: go
|
|
191
|
-
plan: free
|
|
192
|
-
buildCommand: go build -o bin/app
|
|
193
|
-
startCommand: ./bin/app
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## Runtimes
|
|
197
|
-
|
|
198
|
-
### Native Runtimes
|
|
199
|
-
|
|
200
|
-
**Node.js (`runtime: node`):**
|
|
201
|
-
- Versions: 14, 16, 18, 20, 21
|
|
202
|
-
- Default version: 20
|
|
203
|
-
- Specify version in `package.json` engines field
|
|
204
|
-
|
|
205
|
-
**Python (`runtime: python`):**
|
|
206
|
-
- Versions: 3.8, 3.9, 3.10, 3.11, 3.12
|
|
207
|
-
- Default version: 3.11
|
|
208
|
-
- Specify version in `runtime.txt` or `Pipfile`
|
|
209
|
-
|
|
210
|
-
**Go (`runtime: go`):**
|
|
211
|
-
- Versions: 1.20, 1.21, 1.22, 1.23
|
|
212
|
-
- Uses go modules
|
|
213
|
-
- Version from `go.mod`
|
|
214
|
-
|
|
215
|
-
**Ruby (`runtime: ruby`):**
|
|
216
|
-
- Versions: 3.0, 3.1, 3.2, 3.3
|
|
217
|
-
- Uses Bundler
|
|
218
|
-
- Version from `.ruby-version` or `Gemfile`
|
|
219
|
-
|
|
220
|
-
**Rust (`runtime: rust`):**
|
|
221
|
-
- Latest stable version
|
|
222
|
-
- Uses Cargo
|
|
223
|
-
|
|
224
|
-
**Elixir (`runtime: elixir`):**
|
|
225
|
-
- Latest stable version
|
|
226
|
-
- Uses Mix
|
|
227
|
-
|
|
228
|
-
### Docker Runtime
|
|
229
|
-
|
|
230
|
-
**Docker (`runtime: docker`):**
|
|
231
|
-
Build from a Dockerfile in your repository.
|
|
232
|
-
|
|
233
|
-
**Additional fields:**
|
|
234
|
-
- `dockerfilePath`: Path to Dockerfile (default: `./Dockerfile`)
|
|
235
|
-
- `dockerContext`: Build context directory (default: `.`)
|
|
236
|
-
|
|
237
|
-
**Example:**
|
|
238
|
-
```yaml
|
|
239
|
-
services:
|
|
240
|
-
- type: web
|
|
241
|
-
name: docker-app
|
|
242
|
-
runtime: docker
|
|
243
|
-
dockerfilePath: ./docker/Dockerfile
|
|
244
|
-
dockerContext: .
|
|
245
|
-
plan: free
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
**Image (`runtime: image`):**
|
|
249
|
-
Deploy pre-built Docker images from a registry.
|
|
250
|
-
|
|
251
|
-
**Additional fields:**
|
|
252
|
-
- `image`: Image URL (e.g., `registry.com/image:tag`)
|
|
253
|
-
- `registryCredential`: Credentials for private registries
|
|
254
|
-
|
|
255
|
-
**Example:**
|
|
256
|
-
```yaml
|
|
257
|
-
services:
|
|
258
|
-
- type: web
|
|
259
|
-
name: prebuilt-app
|
|
260
|
-
runtime: image
|
|
261
|
-
image: myregistry.com/app:v1.2.3
|
|
262
|
-
plan: free
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
## Service Plans
|
|
266
|
-
|
|
267
|
-
Available instance types:
|
|
268
|
-
|
|
269
|
-
| Plan | RAM | CPU | Price |
|
|
270
|
-
|------|-----|-----|-------|
|
|
271
|
-
| `free` | 512 MB | 0.5 | Free (750 hrs/mo) |
|
|
272
|
-
| `starter` | 512 MB | 0.5 | $7/month |
|
|
273
|
-
| `standard` | 2 GB | 1 | $25/month |
|
|
274
|
-
| `pro` | 4 GB | 2 | $85/month |
|
|
275
|
-
| `pro_plus` | 8 GB | 4 | $175/month |
|
|
276
|
-
|
|
277
|
-
**Always default to `plan: free` unless user specifies otherwise.**
|
|
278
|
-
|
|
279
|
-
## Regions
|
|
280
|
-
|
|
281
|
-
Available deployment regions:
|
|
282
|
-
|
|
283
|
-
- `oregon` (US West) - Default
|
|
284
|
-
- `ohio` (US East)
|
|
285
|
-
- `virginia` (US East)
|
|
286
|
-
- `frankfurt` (EU)
|
|
287
|
-
- `singapore` (Asia)
|
|
288
|
-
|
|
289
|
-
**Example:**
|
|
290
|
-
```yaml
|
|
291
|
-
services:
|
|
292
|
-
- type: web
|
|
293
|
-
name: my-app
|
|
294
|
-
runtime: node
|
|
295
|
-
region: frankfurt
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
## Environment Variables
|
|
299
|
-
|
|
300
|
-
Three patterns for defining environment variables:
|
|
301
|
-
|
|
302
|
-
### 1. Hardcoded Values
|
|
303
|
-
|
|
304
|
-
For non-sensitive configuration:
|
|
305
|
-
|
|
306
|
-
```yaml
|
|
307
|
-
envVars:
|
|
308
|
-
- key: NODE_ENV
|
|
309
|
-
value: production
|
|
310
|
-
- key: API_URL
|
|
311
|
-
value: https://api.example.com
|
|
312
|
-
- key: LOG_LEVEL
|
|
313
|
-
value: info
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
### 2. Generated Secrets
|
|
317
|
-
|
|
318
|
-
Render generates a base64-encoded 256-bit random value:
|
|
319
|
-
|
|
320
|
-
```yaml
|
|
321
|
-
envVars:
|
|
322
|
-
- key: SESSION_SECRET
|
|
323
|
-
generateValue: true
|
|
324
|
-
- key: ENCRYPTION_KEY
|
|
325
|
-
generateValue: true
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### 3. User-Provided Secrets
|
|
329
|
-
|
|
330
|
-
Prompt user for values during Blueprint creation:
|
|
331
|
-
|
|
332
|
-
```yaml
|
|
333
|
-
envVars:
|
|
334
|
-
- key: STRIPE_SECRET_KEY
|
|
335
|
-
sync: false
|
|
336
|
-
- key: JWT_SECRET
|
|
337
|
-
sync: false
|
|
338
|
-
- key: API_KEY
|
|
339
|
-
sync: false
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
**The `sync: false` flag means "user will fill this in the Dashboard".**
|
|
343
|
-
|
|
344
|
-
### 4. Database References
|
|
345
|
-
|
|
346
|
-
Link to database connection strings:
|
|
347
|
-
|
|
348
|
-
```yaml
|
|
349
|
-
envVars:
|
|
350
|
-
- key: DATABASE_URL
|
|
351
|
-
fromDatabase:
|
|
352
|
-
name: postgres
|
|
353
|
-
property: connectionString
|
|
354
|
-
- key: REDIS_URL
|
|
355
|
-
fromDatabase:
|
|
356
|
-
name: redis
|
|
357
|
-
property: connectionString
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
**Available properties:**
|
|
361
|
-
- `connectionString`: Full connection URL
|
|
362
|
-
- `host`: Database host
|
|
363
|
-
- `port`: Database port
|
|
364
|
-
- `user`: Database username
|
|
365
|
-
- `password`: Database password
|
|
366
|
-
- `database`: Database name
|
|
367
|
-
- `hostport`: Combined `host:port`
|
|
368
|
-
|
|
369
|
-
### 5. Service References
|
|
370
|
-
|
|
371
|
-
Link to other services:
|
|
372
|
-
|
|
373
|
-
```yaml
|
|
374
|
-
envVars:
|
|
375
|
-
- key: API_URL
|
|
376
|
-
fromService:
|
|
377
|
-
name: api-server
|
|
378
|
-
type: web
|
|
379
|
-
property: host
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### 6. Environment Variable Groups
|
|
383
|
-
|
|
384
|
-
Reusable groups shared across services:
|
|
385
|
-
|
|
386
|
-
```yaml
|
|
387
|
-
envVarGroups:
|
|
388
|
-
- name: shared-config
|
|
389
|
-
envVars:
|
|
390
|
-
- key: LOG_LEVEL
|
|
391
|
-
value: info
|
|
392
|
-
- key: ENVIRONMENT
|
|
393
|
-
value: production
|
|
394
|
-
|
|
395
|
-
services:
|
|
396
|
-
- type: web
|
|
397
|
-
name: web-app
|
|
398
|
-
runtime: node
|
|
399
|
-
envVars:
|
|
400
|
-
- fromGroup: shared-config
|
|
401
|
-
- key: PORT
|
|
402
|
-
value: 10000
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
## Databases
|
|
406
|
-
|
|
407
|
-
### PostgreSQL
|
|
408
|
-
|
|
409
|
-
```yaml
|
|
410
|
-
databases:
|
|
411
|
-
- name: postgres
|
|
412
|
-
databaseName: myapp_prod
|
|
413
|
-
user: myapp_user
|
|
414
|
-
plan: free
|
|
415
|
-
postgresMajorVersion: "15"
|
|
416
|
-
ipAllowList: []
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
**Plans:**
|
|
420
|
-
- `free`: 1 GB storage, 97 MB RAM, 0.1 CPU
|
|
421
|
-
- `basic-256mb`, `basic-512mb`, `basic-1gb`, `basic-4gb`
|
|
422
|
-
- `pro-4gb`, `pro-8gb`, `pro-16gb`, etc.
|
|
423
|
-
- `accelerated-4gb`, `accelerated-8gb`, etc. (SSD-backed)
|
|
424
|
-
|
|
425
|
-
**Key fields:**
|
|
426
|
-
- `name`: Identifier for references
|
|
427
|
-
- `databaseName`: Actual PostgreSQL database name
|
|
428
|
-
- `user`: Database username
|
|
429
|
-
- `postgresMajorVersion`: PostgreSQL version (11-16)
|
|
430
|
-
- `ipAllowList`: Array of CIDR blocks (empty = internal only)
|
|
431
|
-
- `diskSizeGB`: Storage size (paid plans only)
|
|
432
|
-
|
|
433
|
-
**High Availability (paid plans):**
|
|
434
|
-
```yaml
|
|
435
|
-
databases:
|
|
436
|
-
- name: postgres
|
|
437
|
-
databaseName: myapp_prod
|
|
438
|
-
plan: pro-4gb
|
|
439
|
-
highAvailabilityEnabled: true
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
**Read Replicas (paid plans):**
|
|
443
|
-
```yaml
|
|
444
|
-
databases:
|
|
445
|
-
- name: postgres
|
|
446
|
-
databaseName: myapp_prod
|
|
447
|
-
plan: pro-4gb
|
|
448
|
-
readReplicas:
|
|
449
|
-
- name: read-replica-1
|
|
450
|
-
region: ohio
|
|
451
|
-
- name: read-replica-2
|
|
452
|
-
region: frankfurt
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Redis (Key-Value Store)
|
|
456
|
-
|
|
457
|
-
```yaml
|
|
458
|
-
databases:
|
|
459
|
-
- name: redis
|
|
460
|
-
plan: free
|
|
461
|
-
maxmemoryPolicy: allkeys-lru
|
|
462
|
-
ipAllowList: []
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
**Plans:** Same as PostgreSQL
|
|
466
|
-
|
|
467
|
-
**maxmemoryPolicy options:**
|
|
468
|
-
- `allkeys-lru`: Evict least recently used keys
|
|
469
|
-
- `volatile-lru`: Evict LRU keys with TTL
|
|
470
|
-
- `allkeys-random`: Evict random keys
|
|
471
|
-
- `volatile-random`: Evict random keys with TTL
|
|
472
|
-
- `volatile-ttl`: Evict keys with soonest TTL
|
|
473
|
-
- `noeviction`: Return errors when memory full
|
|
474
|
-
|
|
475
|
-
## Scaling
|
|
476
|
-
|
|
477
|
-
### Manual Scaling
|
|
478
|
-
|
|
479
|
-
Fixed number of instances:
|
|
480
|
-
|
|
481
|
-
```yaml
|
|
482
|
-
services:
|
|
483
|
-
- type: web
|
|
484
|
-
name: my-app
|
|
485
|
-
runtime: node
|
|
486
|
-
plan: standard
|
|
487
|
-
numInstances: 3
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
### Autoscaling
|
|
491
|
-
|
|
492
|
-
Dynamic scaling based on CPU/memory (Professional workspace required):
|
|
493
|
-
|
|
494
|
-
```yaml
|
|
495
|
-
services:
|
|
496
|
-
- type: web
|
|
497
|
-
name: my-app
|
|
498
|
-
runtime: node
|
|
499
|
-
plan: standard
|
|
500
|
-
scaling:
|
|
501
|
-
minInstances: 1
|
|
502
|
-
maxInstances: 5
|
|
503
|
-
targetCPUPercent: 60
|
|
504
|
-
targetMemoryPercent: 70
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
**Notes:**
|
|
508
|
-
- Autoscaling disabled in preview environments
|
|
509
|
-
- Preview environments run `minInstances` count
|
|
510
|
-
- Requires Professional or higher workspace
|
|
511
|
-
|
|
512
|
-
## Health Checks
|
|
513
|
-
|
|
514
|
-
Configure health check endpoints:
|
|
515
|
-
|
|
516
|
-
```yaml
|
|
517
|
-
services:
|
|
518
|
-
- type: web
|
|
519
|
-
name: my-app
|
|
520
|
-
runtime: node
|
|
521
|
-
healthCheckPath: /health
|
|
522
|
-
```
|
|
523
|
-
|
|
524
|
-
**Default:** `/` (root path)
|
|
525
|
-
|
|
526
|
-
**Recommended:** Add a dedicated `/health` endpoint that returns `200 OK`.
|
|
527
|
-
|
|
528
|
-
## Build Filters
|
|
529
|
-
|
|
530
|
-
Control when builds are triggered based on changed files:
|
|
531
|
-
|
|
532
|
-
```yaml
|
|
533
|
-
services:
|
|
534
|
-
- type: web
|
|
535
|
-
name: frontend
|
|
536
|
-
runtime: static
|
|
537
|
-
buildFilter:
|
|
538
|
-
paths:
|
|
539
|
-
- frontend/**
|
|
540
|
-
ignoredPaths:
|
|
541
|
-
- frontend/README.md
|
|
542
|
-
- frontend/**/*.test.js
|
|
543
|
-
```
|
|
544
|
-
|
|
545
|
-
**Behavior:**
|
|
546
|
-
- If `paths` specified: Build only when files in those paths change
|
|
547
|
-
- If `ignoredPaths` specified: Don't build when only ignored files change
|
|
548
|
-
|
|
549
|
-
## Projects and Environments
|
|
550
|
-
|
|
551
|
-
Organize services into projects with multiple environments:
|
|
552
|
-
|
|
553
|
-
```yaml
|
|
554
|
-
projects:
|
|
555
|
-
- name: my-application
|
|
556
|
-
environments:
|
|
557
|
-
- name: production
|
|
558
|
-
services:
|
|
559
|
-
- type: web
|
|
560
|
-
name: prod-api
|
|
561
|
-
runtime: node
|
|
562
|
-
plan: pro
|
|
563
|
-
buildCommand: npm ci
|
|
564
|
-
startCommand: npm start
|
|
565
|
-
databases:
|
|
566
|
-
- name: prod-postgres
|
|
567
|
-
plan: pro-4gb
|
|
568
|
-
networking:
|
|
569
|
-
isolation: enabled
|
|
570
|
-
permissions:
|
|
571
|
-
protection: enabled
|
|
572
|
-
|
|
573
|
-
- name: staging
|
|
574
|
-
services:
|
|
575
|
-
- type: web
|
|
576
|
-
name: staging-api
|
|
577
|
-
runtime: node
|
|
578
|
-
plan: starter
|
|
579
|
-
buildCommand: npm ci
|
|
580
|
-
startCommand: npm start
|
|
581
|
-
databases:
|
|
582
|
-
- name: staging-postgres
|
|
583
|
-
plan: free
|
|
584
|
-
```
|
|
585
|
-
|
|
586
|
-
**Environment features:**
|
|
587
|
-
- `networking.isolation`: Enable network isolation between environments
|
|
588
|
-
- `permissions.protection`: Require approval for environment changes
|
|
589
|
-
|
|
590
|
-
## Preview Environments
|
|
591
|
-
|
|
592
|
-
Configure automatic preview environments for pull requests:
|
|
593
|
-
|
|
594
|
-
```yaml
|
|
595
|
-
previews:
|
|
596
|
-
generation: auto_preview # auto_preview | manual | none
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
**Options:**
|
|
600
|
-
- `auto_preview`: Create preview environment for each PR automatically
|
|
601
|
-
- `manual`: User manually triggers preview creation
|
|
602
|
-
- `none`: Disable preview environments
|
|
603
|
-
|
|
604
|
-
## Complete Example
|
|
605
|
-
|
|
606
|
-
Full-featured Blueprint with multiple services and databases:
|
|
607
|
-
|
|
608
|
-
```yaml
|
|
609
|
-
services:
|
|
610
|
-
# Web service
|
|
611
|
-
- type: web
|
|
612
|
-
name: web-app
|
|
613
|
-
runtime: node
|
|
614
|
-
plan: free
|
|
615
|
-
region: oregon
|
|
616
|
-
buildCommand: npm ci && npm run build
|
|
617
|
-
startCommand: npm start
|
|
618
|
-
branch: main
|
|
619
|
-
autoDeploy: true
|
|
620
|
-
healthCheckPath: /health
|
|
621
|
-
envVars:
|
|
622
|
-
- key: NODE_ENV
|
|
623
|
-
value: production
|
|
624
|
-
- key: DATABASE_URL
|
|
625
|
-
fromDatabase:
|
|
626
|
-
name: postgres
|
|
627
|
-
property: connectionString
|
|
628
|
-
- key: REDIS_URL
|
|
629
|
-
fromDatabase:
|
|
630
|
-
name: redis
|
|
631
|
-
property: connectionString
|
|
632
|
-
- key: JWT_SECRET
|
|
633
|
-
sync: false
|
|
634
|
-
|
|
635
|
-
# Background worker
|
|
636
|
-
- type: worker
|
|
637
|
-
name: queue-worker
|
|
638
|
-
runtime: node
|
|
639
|
-
plan: free
|
|
640
|
-
buildCommand: npm ci
|
|
641
|
-
startCommand: node worker.js
|
|
642
|
-
envVars:
|
|
643
|
-
- key: REDIS_URL
|
|
644
|
-
fromDatabase:
|
|
645
|
-
name: redis
|
|
646
|
-
property: connectionString
|
|
647
|
-
|
|
648
|
-
# Cron job
|
|
649
|
-
- type: cron
|
|
650
|
-
name: daily-cleanup
|
|
651
|
-
runtime: node
|
|
652
|
-
schedule: "0 3 * * *"
|
|
653
|
-
buildCommand: npm ci
|
|
654
|
-
startCommand: node scripts/cleanup.js
|
|
655
|
-
envVars:
|
|
656
|
-
- key: DATABASE_URL
|
|
657
|
-
fromDatabase:
|
|
658
|
-
name: postgres
|
|
659
|
-
property: connectionString
|
|
660
|
-
|
|
661
|
-
# Static frontend
|
|
662
|
-
- type: web
|
|
663
|
-
name: frontend
|
|
664
|
-
runtime: static
|
|
665
|
-
buildCommand: npm ci && npm run build
|
|
666
|
-
staticPublishPath: ./dist
|
|
667
|
-
routes:
|
|
668
|
-
- type: rewrite
|
|
669
|
-
source: /*
|
|
670
|
-
destination: /index.html
|
|
671
|
-
|
|
672
|
-
databases:
|
|
673
|
-
- name: postgres
|
|
674
|
-
databaseName: app_production
|
|
675
|
-
user: app_user
|
|
676
|
-
plan: free
|
|
677
|
-
postgresMajorVersion: "15"
|
|
678
|
-
ipAllowList: []
|
|
679
|
-
|
|
680
|
-
- name: redis
|
|
681
|
-
plan: free
|
|
682
|
-
maxmemoryPolicy: allkeys-lru
|
|
683
|
-
ipAllowList: []
|
|
684
|
-
```
|
|
685
|
-
|
|
686
|
-
## Validation
|
|
687
|
-
|
|
688
|
-
Validate your Blueprint before deploying (when CLI command is available):
|
|
689
|
-
|
|
690
|
-
```bash
|
|
691
|
-
render blueprint validate
|
|
692
|
-
```
|
|
693
|
-
|
|
694
|
-
**Common validation errors:**
|
|
695
|
-
- Missing required fields
|
|
696
|
-
- Invalid runtime values
|
|
697
|
-
- Incorrect environment variable references
|
|
698
|
-
- Invalid cron expressions
|
|
699
|
-
- Invalid YAML syntax
|
|
700
|
-
|
|
701
|
-
## Best Practices
|
|
702
|
-
|
|
703
|
-
1. **Always use `plan: free` by default** - Let users upgrade if needed
|
|
704
|
-
2. **Mark all secrets with `sync: false`** - Never hardcode sensitive values
|
|
705
|
-
3. **Use `fromDatabase` for database URLs** - Automatic internal connection strings
|
|
706
|
-
4. **Add health check endpoints** - Faster deployment detection
|
|
707
|
-
5. **Use non-interactive build commands** - Prevents build hangs
|
|
708
|
-
6. **Bind to `0.0.0.0:$PORT`** - Required for web services
|
|
709
|
-
7. **Use environment variable groups** - Share config across services
|
|
710
|
-
8. **Enable autoDeploy: true** - Deploy automatically on push
|
|
711
|
-
9. **Set appropriate regions** - Choose closest to your users
|
|
712
|
-
10. **Use build filters** - Optimize build triggers in monorepos
|
|
713
|
-
|
|
714
|
-
## Additional Resources
|
|
715
|
-
|
|
716
|
-
- Official Blueprint Specification: https://render.com/docs/blueprint-spec
|
|
717
|
-
- Render CLI Documentation: https://render.com/docs/cli
|
|
718
|
-
- Environment Variables Guide: https://render.com/docs/environment-variables
|
|
1
|
+
# Render Blueprint Specification
|
|
2
|
+
|
|
3
|
+
Complete reference for render.yaml Blueprint files. Blueprints define your infrastructure as code for reproducible deployments on Render.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
A Blueprint is a YAML file (typically `render.yaml`) placed in your repository root that describes:
|
|
8
|
+
- Services (web, worker, cron, static, private)
|
|
9
|
+
- Databases (PostgreSQL, Redis)
|
|
10
|
+
- Environment variables and secrets
|
|
11
|
+
- Scaling and resource configuration
|
|
12
|
+
- Project organization
|
|
13
|
+
|
|
14
|
+
## Root-Level Structure
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
# Top-level fields
|
|
18
|
+
services: [] # Array of service definitions
|
|
19
|
+
databases: [] # Array of PostgreSQL databases
|
|
20
|
+
envVarGroups: [] # Reusable environment variable groups (optional)
|
|
21
|
+
projects: [] # Project organization (optional)
|
|
22
|
+
ungrouped: [] # Resources outside projects (optional)
|
|
23
|
+
previews: # Preview environment configuration (optional)
|
|
24
|
+
generation: auto_preview | manual | none
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Service Types
|
|
28
|
+
|
|
29
|
+
### Web Services (`type: web`)
|
|
30
|
+
|
|
31
|
+
HTTP services, APIs, and web applications. Publicly accessible via HTTPS.
|
|
32
|
+
|
|
33
|
+
**Required fields:**
|
|
34
|
+
- `name`: Unique service identifier
|
|
35
|
+
- `type`: Must be `web`
|
|
36
|
+
- `runtime`: Language/environment (see Runtimes section)
|
|
37
|
+
- `buildCommand`: Command to build the application
|
|
38
|
+
- `startCommand`: Command to start the server
|
|
39
|
+
|
|
40
|
+
**Common optional fields:**
|
|
41
|
+
- `plan`: Instance type (default: `free`)
|
|
42
|
+
- `region`: Deployment region (default: `oregon`)
|
|
43
|
+
- `branch`: Git branch to deploy (default: `main`)
|
|
44
|
+
- `autoDeploy`: Auto-deploy on push (default: `true`)
|
|
45
|
+
- `envVars`: Environment variables array
|
|
46
|
+
- `healthCheckPath`: Health check endpoint (default: `/`)
|
|
47
|
+
- `numInstances`: Number of instances (manual scaling)
|
|
48
|
+
- `scaling`: Autoscaling configuration
|
|
49
|
+
|
|
50
|
+
**Example:**
|
|
51
|
+
```yaml
|
|
52
|
+
services:
|
|
53
|
+
- type: web
|
|
54
|
+
name: api-server
|
|
55
|
+
runtime: node
|
|
56
|
+
plan: free
|
|
57
|
+
buildCommand: npm ci
|
|
58
|
+
startCommand: npm start
|
|
59
|
+
branch: main
|
|
60
|
+
autoDeploy: true
|
|
61
|
+
envVars:
|
|
62
|
+
- key: NODE_ENV
|
|
63
|
+
value: production
|
|
64
|
+
- key: PORT
|
|
65
|
+
value: 10000
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Worker Services (`type: worker`)
|
|
69
|
+
|
|
70
|
+
Background job processors, queue consumers. Not publicly accessible.
|
|
71
|
+
|
|
72
|
+
**Required fields:**
|
|
73
|
+
- `name`: Unique service identifier
|
|
74
|
+
- `type`: Must be `worker`
|
|
75
|
+
- `runtime`: Language/environment
|
|
76
|
+
- `buildCommand`: Command to build
|
|
77
|
+
- `startCommand`: Command to start worker process
|
|
78
|
+
|
|
79
|
+
**Key differences from web services:**
|
|
80
|
+
- No public URL
|
|
81
|
+
- No health checks
|
|
82
|
+
- No port binding required
|
|
83
|
+
|
|
84
|
+
**Example:**
|
|
85
|
+
```yaml
|
|
86
|
+
services:
|
|
87
|
+
- type: worker
|
|
88
|
+
name: job-processor
|
|
89
|
+
runtime: python
|
|
90
|
+
plan: free
|
|
91
|
+
buildCommand: pip install -r requirements.txt
|
|
92
|
+
startCommand: celery -A tasks worker --loglevel=info
|
|
93
|
+
envVars:
|
|
94
|
+
- key: REDIS_URL
|
|
95
|
+
fromDatabase:
|
|
96
|
+
name: redis
|
|
97
|
+
property: connectionString
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Cron Jobs (`type: cron`)
|
|
101
|
+
|
|
102
|
+
Scheduled tasks that run on a cron schedule.
|
|
103
|
+
|
|
104
|
+
**Required fields:**
|
|
105
|
+
- `name`: Unique service identifier
|
|
106
|
+
- `type`: Must be `cron`
|
|
107
|
+
- `runtime`: Language/environment
|
|
108
|
+
- `schedule`: Cron expression
|
|
109
|
+
- `buildCommand`: Command to build
|
|
110
|
+
- `startCommand`: Command to execute on schedule
|
|
111
|
+
|
|
112
|
+
**Schedule format:** Standard cron syntax (minute hour day month weekday)
|
|
113
|
+
|
|
114
|
+
**Examples:**
|
|
115
|
+
- `0 0 * * *` - Daily at midnight UTC
|
|
116
|
+
- `*/15 * * * *` - Every 15 minutes
|
|
117
|
+
- `0 9 * * 1` - Every Monday at 9 AM UTC
|
|
118
|
+
|
|
119
|
+
**Example:**
|
|
120
|
+
```yaml
|
|
121
|
+
services:
|
|
122
|
+
- type: cron
|
|
123
|
+
name: daily-backup
|
|
124
|
+
runtime: node
|
|
125
|
+
schedule: "0 2 * * *"
|
|
126
|
+
buildCommand: npm ci
|
|
127
|
+
startCommand: node scripts/backup.js
|
|
128
|
+
envVars:
|
|
129
|
+
- key: DATABASE_URL
|
|
130
|
+
fromDatabase:
|
|
131
|
+
name: postgres
|
|
132
|
+
property: connectionString
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Static Sites (`type: static` or `type: web` with `runtime: static`)
|
|
136
|
+
|
|
137
|
+
Serve static HTML/CSS/JS files via CDN.
|
|
138
|
+
|
|
139
|
+
**Required fields:**
|
|
140
|
+
- `name`: Unique service identifier
|
|
141
|
+
- `type`: `web`
|
|
142
|
+
- `runtime`: `static`
|
|
143
|
+
- `buildCommand`: Command to build static assets
|
|
144
|
+
- `staticPublishPath`: Path to built files (e.g., `./build`, `./dist`)
|
|
145
|
+
|
|
146
|
+
**Optional configuration:**
|
|
147
|
+
- `routes`: Routing rules for SPAs
|
|
148
|
+
- `headers`: Custom HTTP headers
|
|
149
|
+
- `buildFilter`: Path filters for build triggers
|
|
150
|
+
|
|
151
|
+
**Example:**
|
|
152
|
+
```yaml
|
|
153
|
+
services:
|
|
154
|
+
- type: web
|
|
155
|
+
name: react-app
|
|
156
|
+
runtime: static
|
|
157
|
+
buildCommand: npm ci && npm run build
|
|
158
|
+
staticPublishPath: ./dist
|
|
159
|
+
routes:
|
|
160
|
+
- type: rewrite
|
|
161
|
+
source: /*
|
|
162
|
+
destination: /index.html
|
|
163
|
+
headers:
|
|
164
|
+
- path: /*
|
|
165
|
+
name: Cache-Control
|
|
166
|
+
value: public, max-age=31536000, immutable
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Private Services (`type: pserv`)
|
|
170
|
+
|
|
171
|
+
Internal services accessible only within your Render account.
|
|
172
|
+
|
|
173
|
+
**Required fields:**
|
|
174
|
+
- `name`: Unique service identifier
|
|
175
|
+
- `type`: Must be `pserv`
|
|
176
|
+
- `runtime`: Language/environment
|
|
177
|
+
- `buildCommand`: Command to build
|
|
178
|
+
- `startCommand`: Command to start
|
|
179
|
+
|
|
180
|
+
**Use cases:**
|
|
181
|
+
- Internal APIs
|
|
182
|
+
- Database proxies
|
|
183
|
+
- Microservices not exposed to internet
|
|
184
|
+
|
|
185
|
+
**Example:**
|
|
186
|
+
```yaml
|
|
187
|
+
services:
|
|
188
|
+
- type: pserv
|
|
189
|
+
name: internal-api
|
|
190
|
+
runtime: go
|
|
191
|
+
plan: free
|
|
192
|
+
buildCommand: go build -o bin/app
|
|
193
|
+
startCommand: ./bin/app
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Runtimes
|
|
197
|
+
|
|
198
|
+
### Native Runtimes
|
|
199
|
+
|
|
200
|
+
**Node.js (`runtime: node`):**
|
|
201
|
+
- Versions: 14, 16, 18, 20, 21
|
|
202
|
+
- Default version: 20
|
|
203
|
+
- Specify version in `package.json` engines field
|
|
204
|
+
|
|
205
|
+
**Python (`runtime: python`):**
|
|
206
|
+
- Versions: 3.8, 3.9, 3.10, 3.11, 3.12
|
|
207
|
+
- Default version: 3.11
|
|
208
|
+
- Specify version in `runtime.txt` or `Pipfile`
|
|
209
|
+
|
|
210
|
+
**Go (`runtime: go`):**
|
|
211
|
+
- Versions: 1.20, 1.21, 1.22, 1.23
|
|
212
|
+
- Uses go modules
|
|
213
|
+
- Version from `go.mod`
|
|
214
|
+
|
|
215
|
+
**Ruby (`runtime: ruby`):**
|
|
216
|
+
- Versions: 3.0, 3.1, 3.2, 3.3
|
|
217
|
+
- Uses Bundler
|
|
218
|
+
- Version from `.ruby-version` or `Gemfile`
|
|
219
|
+
|
|
220
|
+
**Rust (`runtime: rust`):**
|
|
221
|
+
- Latest stable version
|
|
222
|
+
- Uses Cargo
|
|
223
|
+
|
|
224
|
+
**Elixir (`runtime: elixir`):**
|
|
225
|
+
- Latest stable version
|
|
226
|
+
- Uses Mix
|
|
227
|
+
|
|
228
|
+
### Docker Runtime
|
|
229
|
+
|
|
230
|
+
**Docker (`runtime: docker`):**
|
|
231
|
+
Build from a Dockerfile in your repository.
|
|
232
|
+
|
|
233
|
+
**Additional fields:**
|
|
234
|
+
- `dockerfilePath`: Path to Dockerfile (default: `./Dockerfile`)
|
|
235
|
+
- `dockerContext`: Build context directory (default: `.`)
|
|
236
|
+
|
|
237
|
+
**Example:**
|
|
238
|
+
```yaml
|
|
239
|
+
services:
|
|
240
|
+
- type: web
|
|
241
|
+
name: docker-app
|
|
242
|
+
runtime: docker
|
|
243
|
+
dockerfilePath: ./docker/Dockerfile
|
|
244
|
+
dockerContext: .
|
|
245
|
+
plan: free
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Image (`runtime: image`):**
|
|
249
|
+
Deploy pre-built Docker images from a registry.
|
|
250
|
+
|
|
251
|
+
**Additional fields:**
|
|
252
|
+
- `image`: Image URL (e.g., `registry.com/image:tag`)
|
|
253
|
+
- `registryCredential`: Credentials for private registries
|
|
254
|
+
|
|
255
|
+
**Example:**
|
|
256
|
+
```yaml
|
|
257
|
+
services:
|
|
258
|
+
- type: web
|
|
259
|
+
name: prebuilt-app
|
|
260
|
+
runtime: image
|
|
261
|
+
image: myregistry.com/app:v1.2.3
|
|
262
|
+
plan: free
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Service Plans
|
|
266
|
+
|
|
267
|
+
Available instance types:
|
|
268
|
+
|
|
269
|
+
| Plan | RAM | CPU | Price |
|
|
270
|
+
|------|-----|-----|-------|
|
|
271
|
+
| `free` | 512 MB | 0.5 | Free (750 hrs/mo) |
|
|
272
|
+
| `starter` | 512 MB | 0.5 | $7/month |
|
|
273
|
+
| `standard` | 2 GB | 1 | $25/month |
|
|
274
|
+
| `pro` | 4 GB | 2 | $85/month |
|
|
275
|
+
| `pro_plus` | 8 GB | 4 | $175/month |
|
|
276
|
+
|
|
277
|
+
**Always default to `plan: free` unless user specifies otherwise.**
|
|
278
|
+
|
|
279
|
+
## Regions
|
|
280
|
+
|
|
281
|
+
Available deployment regions:
|
|
282
|
+
|
|
283
|
+
- `oregon` (US West) - Default
|
|
284
|
+
- `ohio` (US East)
|
|
285
|
+
- `virginia` (US East)
|
|
286
|
+
- `frankfurt` (EU)
|
|
287
|
+
- `singapore` (Asia)
|
|
288
|
+
|
|
289
|
+
**Example:**
|
|
290
|
+
```yaml
|
|
291
|
+
services:
|
|
292
|
+
- type: web
|
|
293
|
+
name: my-app
|
|
294
|
+
runtime: node
|
|
295
|
+
region: frankfurt
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Environment Variables
|
|
299
|
+
|
|
300
|
+
Three patterns for defining environment variables:
|
|
301
|
+
|
|
302
|
+
### 1. Hardcoded Values
|
|
303
|
+
|
|
304
|
+
For non-sensitive configuration:
|
|
305
|
+
|
|
306
|
+
```yaml
|
|
307
|
+
envVars:
|
|
308
|
+
- key: NODE_ENV
|
|
309
|
+
value: production
|
|
310
|
+
- key: API_URL
|
|
311
|
+
value: https://api.example.com
|
|
312
|
+
- key: LOG_LEVEL
|
|
313
|
+
value: info
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### 2. Generated Secrets
|
|
317
|
+
|
|
318
|
+
Render generates a base64-encoded 256-bit random value:
|
|
319
|
+
|
|
320
|
+
```yaml
|
|
321
|
+
envVars:
|
|
322
|
+
- key: SESSION_SECRET
|
|
323
|
+
generateValue: true
|
|
324
|
+
- key: ENCRYPTION_KEY
|
|
325
|
+
generateValue: true
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### 3. User-Provided Secrets
|
|
329
|
+
|
|
330
|
+
Prompt user for values during Blueprint creation:
|
|
331
|
+
|
|
332
|
+
```yaml
|
|
333
|
+
envVars:
|
|
334
|
+
- key: STRIPE_SECRET_KEY
|
|
335
|
+
sync: false
|
|
336
|
+
- key: JWT_SECRET
|
|
337
|
+
sync: false
|
|
338
|
+
- key: API_KEY
|
|
339
|
+
sync: false
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**The `sync: false` flag means "user will fill this in the Dashboard".**
|
|
343
|
+
|
|
344
|
+
### 4. Database References
|
|
345
|
+
|
|
346
|
+
Link to database connection strings:
|
|
347
|
+
|
|
348
|
+
```yaml
|
|
349
|
+
envVars:
|
|
350
|
+
- key: DATABASE_URL
|
|
351
|
+
fromDatabase:
|
|
352
|
+
name: postgres
|
|
353
|
+
property: connectionString
|
|
354
|
+
- key: REDIS_URL
|
|
355
|
+
fromDatabase:
|
|
356
|
+
name: redis
|
|
357
|
+
property: connectionString
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Available properties:**
|
|
361
|
+
- `connectionString`: Full connection URL
|
|
362
|
+
- `host`: Database host
|
|
363
|
+
- `port`: Database port
|
|
364
|
+
- `user`: Database username
|
|
365
|
+
- `password`: Database password
|
|
366
|
+
- `database`: Database name
|
|
367
|
+
- `hostport`: Combined `host:port`
|
|
368
|
+
|
|
369
|
+
### 5. Service References
|
|
370
|
+
|
|
371
|
+
Link to other services:
|
|
372
|
+
|
|
373
|
+
```yaml
|
|
374
|
+
envVars:
|
|
375
|
+
- key: API_URL
|
|
376
|
+
fromService:
|
|
377
|
+
name: api-server
|
|
378
|
+
type: web
|
|
379
|
+
property: host
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### 6. Environment Variable Groups
|
|
383
|
+
|
|
384
|
+
Reusable groups shared across services:
|
|
385
|
+
|
|
386
|
+
```yaml
|
|
387
|
+
envVarGroups:
|
|
388
|
+
- name: shared-config
|
|
389
|
+
envVars:
|
|
390
|
+
- key: LOG_LEVEL
|
|
391
|
+
value: info
|
|
392
|
+
- key: ENVIRONMENT
|
|
393
|
+
value: production
|
|
394
|
+
|
|
395
|
+
services:
|
|
396
|
+
- type: web
|
|
397
|
+
name: web-app
|
|
398
|
+
runtime: node
|
|
399
|
+
envVars:
|
|
400
|
+
- fromGroup: shared-config
|
|
401
|
+
- key: PORT
|
|
402
|
+
value: 10000
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
## Databases
|
|
406
|
+
|
|
407
|
+
### PostgreSQL
|
|
408
|
+
|
|
409
|
+
```yaml
|
|
410
|
+
databases:
|
|
411
|
+
- name: postgres
|
|
412
|
+
databaseName: myapp_prod
|
|
413
|
+
user: myapp_user
|
|
414
|
+
plan: free
|
|
415
|
+
postgresMajorVersion: "15"
|
|
416
|
+
ipAllowList: []
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Plans:**
|
|
420
|
+
- `free`: 1 GB storage, 97 MB RAM, 0.1 CPU
|
|
421
|
+
- `basic-256mb`, `basic-512mb`, `basic-1gb`, `basic-4gb`
|
|
422
|
+
- `pro-4gb`, `pro-8gb`, `pro-16gb`, etc.
|
|
423
|
+
- `accelerated-4gb`, `accelerated-8gb`, etc. (SSD-backed)
|
|
424
|
+
|
|
425
|
+
**Key fields:**
|
|
426
|
+
- `name`: Identifier for references
|
|
427
|
+
- `databaseName`: Actual PostgreSQL database name
|
|
428
|
+
- `user`: Database username
|
|
429
|
+
- `postgresMajorVersion`: PostgreSQL version (11-16)
|
|
430
|
+
- `ipAllowList`: Array of CIDR blocks (empty = internal only)
|
|
431
|
+
- `diskSizeGB`: Storage size (paid plans only)
|
|
432
|
+
|
|
433
|
+
**High Availability (paid plans):**
|
|
434
|
+
```yaml
|
|
435
|
+
databases:
|
|
436
|
+
- name: postgres
|
|
437
|
+
databaseName: myapp_prod
|
|
438
|
+
plan: pro-4gb
|
|
439
|
+
highAvailabilityEnabled: true
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**Read Replicas (paid plans):**
|
|
443
|
+
```yaml
|
|
444
|
+
databases:
|
|
445
|
+
- name: postgres
|
|
446
|
+
databaseName: myapp_prod
|
|
447
|
+
plan: pro-4gb
|
|
448
|
+
readReplicas:
|
|
449
|
+
- name: read-replica-1
|
|
450
|
+
region: ohio
|
|
451
|
+
- name: read-replica-2
|
|
452
|
+
region: frankfurt
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Redis (Key-Value Store)
|
|
456
|
+
|
|
457
|
+
```yaml
|
|
458
|
+
databases:
|
|
459
|
+
- name: redis
|
|
460
|
+
plan: free
|
|
461
|
+
maxmemoryPolicy: allkeys-lru
|
|
462
|
+
ipAllowList: []
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
**Plans:** Same as PostgreSQL
|
|
466
|
+
|
|
467
|
+
**maxmemoryPolicy options:**
|
|
468
|
+
- `allkeys-lru`: Evict least recently used keys
|
|
469
|
+
- `volatile-lru`: Evict LRU keys with TTL
|
|
470
|
+
- `allkeys-random`: Evict random keys
|
|
471
|
+
- `volatile-random`: Evict random keys with TTL
|
|
472
|
+
- `volatile-ttl`: Evict keys with soonest TTL
|
|
473
|
+
- `noeviction`: Return errors when memory full
|
|
474
|
+
|
|
475
|
+
## Scaling
|
|
476
|
+
|
|
477
|
+
### Manual Scaling
|
|
478
|
+
|
|
479
|
+
Fixed number of instances:
|
|
480
|
+
|
|
481
|
+
```yaml
|
|
482
|
+
services:
|
|
483
|
+
- type: web
|
|
484
|
+
name: my-app
|
|
485
|
+
runtime: node
|
|
486
|
+
plan: standard
|
|
487
|
+
numInstances: 3
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Autoscaling
|
|
491
|
+
|
|
492
|
+
Dynamic scaling based on CPU/memory (Professional workspace required):
|
|
493
|
+
|
|
494
|
+
```yaml
|
|
495
|
+
services:
|
|
496
|
+
- type: web
|
|
497
|
+
name: my-app
|
|
498
|
+
runtime: node
|
|
499
|
+
plan: standard
|
|
500
|
+
scaling:
|
|
501
|
+
minInstances: 1
|
|
502
|
+
maxInstances: 5
|
|
503
|
+
targetCPUPercent: 60
|
|
504
|
+
targetMemoryPercent: 70
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
**Notes:**
|
|
508
|
+
- Autoscaling disabled in preview environments
|
|
509
|
+
- Preview environments run `minInstances` count
|
|
510
|
+
- Requires Professional or higher workspace
|
|
511
|
+
|
|
512
|
+
## Health Checks
|
|
513
|
+
|
|
514
|
+
Configure health check endpoints:
|
|
515
|
+
|
|
516
|
+
```yaml
|
|
517
|
+
services:
|
|
518
|
+
- type: web
|
|
519
|
+
name: my-app
|
|
520
|
+
runtime: node
|
|
521
|
+
healthCheckPath: /health
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
**Default:** `/` (root path)
|
|
525
|
+
|
|
526
|
+
**Recommended:** Add a dedicated `/health` endpoint that returns `200 OK`.
|
|
527
|
+
|
|
528
|
+
## Build Filters
|
|
529
|
+
|
|
530
|
+
Control when builds are triggered based on changed files:
|
|
531
|
+
|
|
532
|
+
```yaml
|
|
533
|
+
services:
|
|
534
|
+
- type: web
|
|
535
|
+
name: frontend
|
|
536
|
+
runtime: static
|
|
537
|
+
buildFilter:
|
|
538
|
+
paths:
|
|
539
|
+
- frontend/**
|
|
540
|
+
ignoredPaths:
|
|
541
|
+
- frontend/README.md
|
|
542
|
+
- frontend/**/*.test.js
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
**Behavior:**
|
|
546
|
+
- If `paths` specified: Build only when files in those paths change
|
|
547
|
+
- If `ignoredPaths` specified: Don't build when only ignored files change
|
|
548
|
+
|
|
549
|
+
## Projects and Environments
|
|
550
|
+
|
|
551
|
+
Organize services into projects with multiple environments:
|
|
552
|
+
|
|
553
|
+
```yaml
|
|
554
|
+
projects:
|
|
555
|
+
- name: my-application
|
|
556
|
+
environments:
|
|
557
|
+
- name: production
|
|
558
|
+
services:
|
|
559
|
+
- type: web
|
|
560
|
+
name: prod-api
|
|
561
|
+
runtime: node
|
|
562
|
+
plan: pro
|
|
563
|
+
buildCommand: npm ci
|
|
564
|
+
startCommand: npm start
|
|
565
|
+
databases:
|
|
566
|
+
- name: prod-postgres
|
|
567
|
+
plan: pro-4gb
|
|
568
|
+
networking:
|
|
569
|
+
isolation: enabled
|
|
570
|
+
permissions:
|
|
571
|
+
protection: enabled
|
|
572
|
+
|
|
573
|
+
- name: staging
|
|
574
|
+
services:
|
|
575
|
+
- type: web
|
|
576
|
+
name: staging-api
|
|
577
|
+
runtime: node
|
|
578
|
+
plan: starter
|
|
579
|
+
buildCommand: npm ci
|
|
580
|
+
startCommand: npm start
|
|
581
|
+
databases:
|
|
582
|
+
- name: staging-postgres
|
|
583
|
+
plan: free
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
**Environment features:**
|
|
587
|
+
- `networking.isolation`: Enable network isolation between environments
|
|
588
|
+
- `permissions.protection`: Require approval for environment changes
|
|
589
|
+
|
|
590
|
+
## Preview Environments
|
|
591
|
+
|
|
592
|
+
Configure automatic preview environments for pull requests:
|
|
593
|
+
|
|
594
|
+
```yaml
|
|
595
|
+
previews:
|
|
596
|
+
generation: auto_preview # auto_preview | manual | none
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
**Options:**
|
|
600
|
+
- `auto_preview`: Create preview environment for each PR automatically
|
|
601
|
+
- `manual`: User manually triggers preview creation
|
|
602
|
+
- `none`: Disable preview environments
|
|
603
|
+
|
|
604
|
+
## Complete Example
|
|
605
|
+
|
|
606
|
+
Full-featured Blueprint with multiple services and databases:
|
|
607
|
+
|
|
608
|
+
```yaml
|
|
609
|
+
services:
|
|
610
|
+
# Web service
|
|
611
|
+
- type: web
|
|
612
|
+
name: web-app
|
|
613
|
+
runtime: node
|
|
614
|
+
plan: free
|
|
615
|
+
region: oregon
|
|
616
|
+
buildCommand: npm ci && npm run build
|
|
617
|
+
startCommand: npm start
|
|
618
|
+
branch: main
|
|
619
|
+
autoDeploy: true
|
|
620
|
+
healthCheckPath: /health
|
|
621
|
+
envVars:
|
|
622
|
+
- key: NODE_ENV
|
|
623
|
+
value: production
|
|
624
|
+
- key: DATABASE_URL
|
|
625
|
+
fromDatabase:
|
|
626
|
+
name: postgres
|
|
627
|
+
property: connectionString
|
|
628
|
+
- key: REDIS_URL
|
|
629
|
+
fromDatabase:
|
|
630
|
+
name: redis
|
|
631
|
+
property: connectionString
|
|
632
|
+
- key: JWT_SECRET
|
|
633
|
+
sync: false
|
|
634
|
+
|
|
635
|
+
# Background worker
|
|
636
|
+
- type: worker
|
|
637
|
+
name: queue-worker
|
|
638
|
+
runtime: node
|
|
639
|
+
plan: free
|
|
640
|
+
buildCommand: npm ci
|
|
641
|
+
startCommand: node worker.js
|
|
642
|
+
envVars:
|
|
643
|
+
- key: REDIS_URL
|
|
644
|
+
fromDatabase:
|
|
645
|
+
name: redis
|
|
646
|
+
property: connectionString
|
|
647
|
+
|
|
648
|
+
# Cron job
|
|
649
|
+
- type: cron
|
|
650
|
+
name: daily-cleanup
|
|
651
|
+
runtime: node
|
|
652
|
+
schedule: "0 3 * * *"
|
|
653
|
+
buildCommand: npm ci
|
|
654
|
+
startCommand: node scripts/cleanup.js
|
|
655
|
+
envVars:
|
|
656
|
+
- key: DATABASE_URL
|
|
657
|
+
fromDatabase:
|
|
658
|
+
name: postgres
|
|
659
|
+
property: connectionString
|
|
660
|
+
|
|
661
|
+
# Static frontend
|
|
662
|
+
- type: web
|
|
663
|
+
name: frontend
|
|
664
|
+
runtime: static
|
|
665
|
+
buildCommand: npm ci && npm run build
|
|
666
|
+
staticPublishPath: ./dist
|
|
667
|
+
routes:
|
|
668
|
+
- type: rewrite
|
|
669
|
+
source: /*
|
|
670
|
+
destination: /index.html
|
|
671
|
+
|
|
672
|
+
databases:
|
|
673
|
+
- name: postgres
|
|
674
|
+
databaseName: app_production
|
|
675
|
+
user: app_user
|
|
676
|
+
plan: free
|
|
677
|
+
postgresMajorVersion: "15"
|
|
678
|
+
ipAllowList: []
|
|
679
|
+
|
|
680
|
+
- name: redis
|
|
681
|
+
plan: free
|
|
682
|
+
maxmemoryPolicy: allkeys-lru
|
|
683
|
+
ipAllowList: []
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
## Validation
|
|
687
|
+
|
|
688
|
+
Validate your Blueprint before deploying (when CLI command is available):
|
|
689
|
+
|
|
690
|
+
```bash
|
|
691
|
+
render blueprint validate
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
**Common validation errors:**
|
|
695
|
+
- Missing required fields
|
|
696
|
+
- Invalid runtime values
|
|
697
|
+
- Incorrect environment variable references
|
|
698
|
+
- Invalid cron expressions
|
|
699
|
+
- Invalid YAML syntax
|
|
700
|
+
|
|
701
|
+
## Best Practices
|
|
702
|
+
|
|
703
|
+
1. **Always use `plan: free` by default** - Let users upgrade if needed
|
|
704
|
+
2. **Mark all secrets with `sync: false`** - Never hardcode sensitive values
|
|
705
|
+
3. **Use `fromDatabase` for database URLs** - Automatic internal connection strings
|
|
706
|
+
4. **Add health check endpoints** - Faster deployment detection
|
|
707
|
+
5. **Use non-interactive build commands** - Prevents build hangs
|
|
708
|
+
6. **Bind to `0.0.0.0:$PORT`** - Required for web services
|
|
709
|
+
7. **Use environment variable groups** - Share config across services
|
|
710
|
+
8. **Enable autoDeploy: true** - Deploy automatically on push
|
|
711
|
+
9. **Set appropriate regions** - Choose closest to your users
|
|
712
|
+
10. **Use build filters** - Optimize build triggers in monorepos
|
|
713
|
+
|
|
714
|
+
## Additional Resources
|
|
715
|
+
|
|
716
|
+
- Official Blueprint Specification: https://render.com/docs/blueprint-spec
|
|
717
|
+
- Render CLI Documentation: https://render.com/docs/cli
|
|
718
|
+
- Environment Variables Guide: https://render.com/docs/environment-variables
|