# Caddyfile syntax highlighting
# Reference: https://caddyserver.com/docs/caddyfile
context default
wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.
# Snippet definitions - match the opening parenthesis and name
keyword linestart (*) brightmagenta
# Named routes
keyword linestart &(*) brightmagenta
# Site addresses and labels (at start of line, not indented)
keyword linestart http:// brightmagenta
keyword linestart https:// brightmagenta
keyword linestart localhost brightmagenta
# Block delimiters
keyword { yellow
keyword } yellow
# Separators and operators
keyword , brightcyan
keyword = brightcyan
# All types of placeholders with dots and underscores
keyword {http.*} brightred
keyword {system.*} brightred
keyword {client_ip} brightred
keyword {uri} brightred
keyword {path} brightred
keyword {query} brightred
keyword {host} brightred
keyword {method} brightred
keyword {scheme} brightred
keyword {remote} brightred
keyword {file} brightred
keyword {dir} brightred
keyword {\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.\]} brightred
# Environment variables
keyword {$*} brightred
keyword {%*%} brightred
# Boolean values
keyword whole true brightgreen
keyword whole false brightgreen
keyword whole on brightgreen
keyword whole off brightgreen
# HTTP methods
keyword whole GET brightgreen
keyword whole POST brightgreen
keyword whole PUT brightgreen
keyword whole DELETE brightgreen
keyword whole PATCH brightgreen
keyword whole HEAD brightgreen
keyword whole OPTIONS brightgreen
# Common protocols
keyword whole http brightblue
keyword whole https brightblue
# Standard HTTP Directives (Caddy v1)
keyword whole basicauth yellow
keyword whole bind yellow
keyword whole browse yellow
keyword whole errors yellow
keyword whole expvar yellow
keyword whole ext yellow
keyword whole fastcgi yellow
keyword whole gzip yellow
keyword whole header yellow
keyword whole import yellow
keyword whole index yellow
keyword whole internal yellow
keyword whole limits yellow
keyword whole log yellow
keyword whole markdown yellow
keyword whole mime yellow
keyword whole on yellow
keyword whole pprof yellow
keyword whole proxy yellow
keyword whole push yellow
keyword whole redir yellow
keyword whole request_id yellow
keyword whole rewrite yellow
keyword whole root yellow
keyword whole status yellow
keyword whole templates yellow
keyword whole timeouts yellow
keyword whole tls yellow
keyword whole websocket yellow
# Caddy v2 directives
keyword whole file_server yellow
keyword whole reverse_proxy yellow
keyword whole respond yellow
keyword whole route yellow
keyword whole handle yellow
keyword whole handle_path yellow
keyword whole handle_errors yellow
keyword whole encode yellow
keyword whole php_fastcgi yellow
keyword whole uri yellow
keyword whole try_files yellow
keyword whole vars yellow
keyword whole request_body yellow
keyword whole abort yellow
keyword whole acme_server yellow
keyword whole basic_auth yellow
keyword whole forward_auth yellow
keyword whole fs yellow
keyword whole intercept yellow
keyword whole invoke yellow
keyword whole log_append yellow
keyword whole log_skip yellow
keyword whole log_name yellow
keyword whole map yellow
keyword whole method yellow
keyword whole metrics yellow
keyword whole push yellow
keyword whole request_header yellow
keyword whole tracing yellow
# Popular plugin directives
keyword whole cache yellow
keyword whole cors yellow
keyword whole jwt yellow
keyword whole ratelimit yellow
keyword whole realip yellow
keyword whole filter yellow
keyword whole git yellow
keyword whole prometheus yellow
keyword whole ipfilter yellow
keyword whole forwardproxy yellow
keyword whole login yellow
keyword whole authz yellow
keyword whole minify yellow
keyword whole expires yellow
keyword whole locale yellow
keyword whole webdav yellow
keyword whole awslambda yellow
keyword whole awses yellow
# Common subdirectives and options (with underscores)
keyword whole to brightcyan
keyword whole transparent brightcyan
keyword whole upstream brightcyan
keyword whole policy brightcyan
keyword whole health_check brightcyan
keyword whole header_upstream brightcyan
keyword whole header_downstream brightcyan
keyword whole header_up brightcyan
keyword whole header_down brightcyan
keyword whole websocket brightcyan
keyword whole preset brightcyan
keyword whole except brightcyan
keyword whole only brightcyan
keyword whole not brightcyan
keyword whole match brightcyan
keyword whole matcher brightcyan
keyword whole strip_prefix brightcyan
keyword whole strip_suffix brightcyan
keyword whole lb_policy brightcyan
keyword whole lb_try_duration brightcyan
keyword whole lb_try_interval brightcyan
# AWS Lambda specific subdirectives
keyword whole aws_access brightcyan
keyword whole aws_secret brightcyan
keyword whole aws_region brightcyan
keyword whole function_name brightcyan
keyword whole aws_endpoint brightcyan
keyword whole qualifier brightcyan
keyword whole include_body brightcyan
keyword whole timeout brightcyan
# TLS options
keyword whole self_signed brightcyan
keyword whole dns brightcyan
keyword whole ca brightcyan
keyword whole protocols brightcyan
keyword whole ciphers brightcyan
keyword whole curves brightcyan
keyword whole alpn brightcyan
keyword whole must_staple brightcyan
keyword whole key_type brightcyan
keyword whole load brightcyan
keyword whole clients brightcyan
keyword whole client_auth brightcyan
# Global options (top-level block)
keyword whole debug brightcyan
keyword whole http_port brightcyan
keyword whole https_port brightcyan
keyword whole default_bind brightcyan
keyword whole order brightcyan
keyword whole storage brightcyan
keyword whole storage_clean_interval brightcyan
keyword whole admin brightcyan
keyword whole persist_config brightcyan
keyword whole grace_period brightcyan
keyword whole shutdown_delay brightcyan
keyword whole metrics brightcyan
keyword whole auto_https brightcyan
keyword whole email brightcyan
keyword whole default_sni brightcyan
keyword whole fallback_sni brightcyan
keyword whole local_certs brightcyan
keyword whole skip_install_trust brightcyan
keyword whole acme_ca brightcyan
keyword whole acme_ca_root brightcyan
keyword whole acme_eab brightcyan
keyword whole acme_dns brightcyan
keyword whole dns brightcyan
keyword whole ech brightcyan
keyword whole on_demand_tls brightcyan
keyword whole cert_issuer brightcyan
keyword whole renew_interval brightcyan
keyword whole cert_lifetime brightcyan
keyword whole ocsp_interval brightcyan
keyword whole ocsp_stapling brightcyan
keyword whole preferred_chains brightcyan
keyword whole servers brightcyan
keyword whole filesystem brightcyan
keyword whole pki brightcyan
keyword whole events brightcyan
keyword whole keepalive_interval brightcyan
keyword whole client_ip_headers brightcyan
keyword whole trusted_proxies brightcyan
keyword whole trusted_proxies_strict brightcyan
keyword whole log_credentials brightcyan
keyword whole strict_sni_host brightcyan
keyword whole enable_full_duplex brightcyan
keyword whole max_header_size brightcyan
# Matchers
keyword whole path brightcyan
keyword whole path_regexp brightcyan
keyword whole method brightcyan
keyword whole query brightcyan
keyword whole header_regexp brightcyan
keyword whole protocol brightcyan
keyword whole expression brightcyan
keyword whole file brightcyan
keyword whole remote_ip brightcyan
keyword whole host brightcyan
keyword whole client_ip brightcyan
keyword whole vars brightcyan
keyword whole vars_regexp brightcyan
keyword whole not brightcyan
# Named matcher token
keyword @\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_\] brightmagenta
# Arguments that start with + or - (like +header or -header)
keyword +\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_\] white
keyword -\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_\] white
# Numbers (ports, status codes, sizes)
keyword whole :\{0123456789\}\[0123456789\] brightgreen
keyword whole \{0123456789\}\[0123456789\]k brightgreen
keyword whole \{0123456789\}\[0123456789\]m brightgreen
keyword whole \{0123456789\}\[0123456789\]g brightgreen
keyword whole \{0123456789\}\[0123456789\]s brightgreen
keyword whole \{0123456789\}\[0123456789\]ms brightgreen
keyword whole \{0123456789\}\[0123456789\]h brightgreen
# Comments
context # \n brown
spellcheck
# String literals with quotes
context " " green
keyword \\" brightgreen
keyword {*} brightred
# Backtick-quoted strings
context ` ` green
keyword \\` brightgreen
keyword {*} brightred
# Heredocs (common markers)
context whole <<\[\s\]\[-\]\[\s\]CSS CSS green
context whole <<\[\s\]\[-\]\[\s\]HTML HTML green
context whole <<\[\s\]\[-\]\[\s\]JSON JSON green
context whole <<\[\s\]\[-\]\[\s\]JAVASCRIPT JAVASCRIPT green
context whole <<\[\s\]\[-\]\[\s\]JS JS green
context whole <<\[\s\]\[-\]\[\s\]XML XML green