xvcl
Extends Fastly VCL with loops, functions, constants, macros, conditionals, and includes via XVCL — a VCL transpiler that compiles .xvcl files into standard VCL.
Skill by fastlyOfficial
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/fastly-xvcl
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, data, writing, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/xvcl
What's inside
- Skill name
xvcl- Description
- Extends Fastly VCL with loops, functions, constants, macros, conditionals, and includes via XVCL — a VCL transpiler that compiles .xvcl files into standard VCL. Use when writing VCL for Fastly, working with .xvcl files, generating repetitive VCL (multiple backends, routing rules, headers) with loops, defining reusable VCL functions with return values, using compile-time constants instead of magic numbers, or writing any Fastly VCL configuration. XVCL syntax is not in training data so this skill is required. Also applies when writing and testing VCL locally (compile with `uvx xvcl`, test with falco), reducing VCL code duplication, splitting large VCL into modular includes, or doing any VCL development task for Fastly — even without explicitly mentioning XVCL.
- License
- MIT
- Instructions
- 277 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Files (11)
- SKILL.md
- backends.md · references/
- caching.md · references/
- crypto.md · references/
- headers.md · references/
- strings.md · references/
- subroutines.md · references/
- tables-acls.md · references/
- testing-vcl.md · references/
- vcl-syntax.md · references/
- xvcl-directives.md · references/
SKILL.md (first lines)
## Trigger and scope
Trigger on: XVCL, .xvcl files, VCL transpiler, VCL metaprogramming, #const/#for/#def/#inline in VCL context, writing a VCL script, writing VCL and running it locally, or any Fastly VCL writing task.
Do NOT trigger for: debugging existing .vcl files without XVCL, Fastly API/CLI ops, Fastly Compute, or Terraform — even if they mention VCL.
If the user explicitly requests plain VCL, keep `.vcl` files and do not introduce XVCL.
Follow explicitly requested tools and test modes instead of the default examples.
# Writing VCL with XVCL
XVCL is a VCL transpiler that adds metaprogramming to Fastly VCL. Write `.xvcl` files, compile to `.vcl`, then test with Falco or deploy to Fastly. All XVCL constructs are resolved at compile time — zero runtime overhead.
## Quick Start
Compilation requires `uvx`, provided by uv; the local checks use Falco.
```bash
# Compile with uvx
uvx xvcl main.xvcl -o main.vcl
# Lint the output
falco lint main.vcl
# Run locally — this is how you "run" VCL on your machine
falco simulate main.vcl
# Listens on localhost:3124 by default
# Then test with: curl http://localhost:3124/
```
Unless the user explicitly requests another test mode, compile and run `falco simulate` for local execution.
Linting alone does not execute the VCL.
## Minimal Working Example
**Backend naming**: Fastly VCL requires backends to use `F_` prefixed names (e.g., `F_origin`, `F_api`). Never use `backend default` — falco will reject it. Always set `req.backend` explicitly in `vcl_recv`.
```xvcl
#const ORIGIN_HOST = "api.example.com"
#const REGIONS = [("us", "us.example.com"), ("eu", "eu.example.com")]
#for name, host in REGIONS
backend F_{{name}} {
.host = "{{host}}";
.port = "443";
.ssl = true;
}
#endfor
sub vcl_recv {
#FASTLY recv
set req.backend = F_us;
return (lookup);
}
sub vcl_deliver {
#FASTLY deliver
set resp.http.X-Served-By = "edge";
return (deliver);
}
```
## XVCL Directives Summary
Read [xvcl-directives.md](references/xvcl-directives.md) for complete syntax and examples of every directive.
### Constants — `#const`
```xvcl
#const NAME = value // type auto-inferred
#const NAME TYPE = value // explicit type
#const TTL INTEGER = 3600
#const ORIGIN = "origin.example.com"
#const ENABLED BOOL = true
#const DOUBLE_TTL = TTL * 2 // expressions supported
#const BACKENDS = ["web1", "web2"] // lists
#const PAIRS = [("api", 8080), ("web", 80)] // tuples
```
Constants are **compile-time only** — they do NOT become VCL variables. Always use `{{NAME}}` to emit their value. A bare constant name in VCL (e.g., `error 200 GREETING;`) passes through as a literal string, producing invalid VCL. Use `error 200 "{{GREETING}}";` instead.
Use in templates: `"{{TTL}}"`, `{{ORIGIN}}`, `backend F_{{name}} { ... }`
### Template Expressions — `{{ }}`
```xvcl
{{CONST_NAME}} // constant substitution
{{PORT * 2}} // arithmetic
{{hex(255)}} // → "0xff"
{{format(42, '05d')}} // → "00042"
{{len(BACKENDS)}} // list length
{{value if condition else other}} // ternary
```
Built-in functions: `range()`, `len()`, `str()`, `int()`, `hex()`, `format()`, `enumerate()`, `min()`, `max()`, `abs()`
### For Loops — `#for` / `#endfor`
```xvcl
#for i in range(5) // 0..4
#for i in range(2, 8) // 2..7
#for item in LIST_CONST // iterate list
#for name, host in TUPLES // tuple unpacking
#for idx, item in enumerate(LIST) // index + value
```
### Tables with Loops
Use `#for` loops to populate VCL `table` declarations for O(1) lookups, instead of generating inline if-chains.
```xvcl
#const REDIRECTS = [
("/blog", "/articles"),
("/about-us", "/about"),
("/products/old-widget", "/products/widget-v2")
]
// O(1) hash-table lookup — the right pattern for data-driven VCL
table redirects STRING {From fastly/fastly-agent-toolkit, MIT.
More from fastly/fastly-agent-toolkit
- 0.757score
fastly
fastlyOfficial
Configures, manages, and debugs the Fastly CDN platform — covering service and backend setup, caching and VCL, security features like DDoS/WAF/NGWAF/rate…
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
falco
fastlyOfficial
Lints, tests, simulates, and formats Fastly VCL code using the falco tool.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastlike
fastlyOfficial
Runs Fastly Compute WASM binaries locally and serves as the authoritative reference for Compute platform internals.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-cli
fastlyOfficial
Executes Fastly CLI commands for managing CDN services, Compute deploys, and edge infrastructure.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-fiddle
fastlyOfficial
Use when testing VCL against real Fastly edge infrastructure, writing assertion-based Fiddle tests, producing shareable fiddle URLs for bug reproductions…
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-ngwaf
fastlyOfficial
Performs an internal audit of Fastly Next-Gen WAF (NGWAF) workspaces to audit that critical templated protection rules are configured and enabled.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-stats
fastlyOfficial
Fastly traffic numbers: cache hit ratio, bandwidth, request counts, status-code and error rates, edge vs origin traffic, real-time requests-per-second, origin…
SkillAFreshness: A★ 36Claude Code +9 - 0.712score
viceroy
fastlyOfficial
Runs Fastly Compute WASM applications locally with Viceroy, specifically for Rust and Component Model projects.
SkillBFreshness: B★ 36Claude Code +9 - 0.706score
fastly-reference-architectures
fastlyOfficial
Curated GitHub repositories demonstrating working reference architectures on the Fastly platform, from single Compute applications to systems combining…
SkillBFreshness: B★ 36Claude Code +9
Signals
- Stars
- 36
- Forks
- 7
- Open issues
- 0
- Last commit (this folder)
- Sep 30, 2026 (28 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/fastly/fastly-agent-toolkit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from fastly
- 0.757score
fastly
fastlyOfficial
Configures, manages, and debugs the Fastly CDN platform — covering service and backend setup, caching and VCL, security features like DDoS/WAF/NGWAF/rate…
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
falco
fastlyOfficial
Lints, tests, simulates, and formats Fastly VCL code using the falco tool.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastlike
fastlyOfficial
Runs Fastly Compute WASM binaries locally and serves as the authoritative reference for Compute platform internals.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-cli
fastlyOfficial
Executes Fastly CLI commands for managing CDN services, Compute deploys, and edge infrastructure.
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-fiddle
fastlyOfficial
Use when testing VCL against real Fastly edge infrastructure, writing assertion-based Fiddle tests, producing shareable fiddle URLs for bug reproductions…
SkillAFreshness: A★ 36Claude Code +9 - 0.757score
fastly-ngwaf
fastlyOfficial
Performs an internal audit of Fastly Next-Gen WAF (NGWAF) workspaces to audit that critical templated protection rules are configured and enabled.
SkillAFreshness: A★ 36Claude Code +9
Cite this page
xvcl skill. Agent Mart. https://agentmart.dev/skills/fastly-xvcl (last updated 2026-10-24)