mholt/caddy-l4

Caddyfile does not recognize `layer4` global option

celsiusnarhwal opened this issue · 8 comments

I feel like I have to be missing something fundamental, but I cannot get this plugin to work with the Caddyfile at all. Copying and pasting the most basic configuration example in the README:

{
    layer4 {
        127.0.0.1:5000 {
            route {
                echo
            }
        }
    }
}

causes caddy start to yield the following output:

2024/08/04 18:06:53.752	INFO	using adjacent Caddyfile
Error: adapting config using caddyfile: Caddyfile:2: unrecognized global option: layer4
Error: caddy process exited with error: exit status 1

My Caddyfile in its entirety is comprised solely of the above example; it has no other content. The corresponding JSON configuration provided in the README works fine.

I know very little of Go, but as far as I can understand from the code, layer4 does in fact go in the global options block.

Environment Details

Operating system: macOS Sonoma 14.5 (arm64)
Output of caddy version: v2.8.4 h1:q3pe0wpBj1OcHFZ3n/1nl4V4bxBrYoSoab7rL9BMYNk=

Output of caddy list-modules
admin.api.load
admin.api.metrics
admin.api.pki
admin.api.reverse_proxy
caddy.adapters.caddyfile
caddy.config_loaders.http
caddy.filesystems
caddy.listeners.http_redirect
caddy.listeners.proxy_protocol
caddy.listeners.tls
caddy.logging.encoders.append
caddy.logging.encoders.console
caddy.logging.encoders.filter
caddy.logging.encoders.filter.cookie
caddy.logging.encoders.filter.delete
caddy.logging.encoders.filter.hash
caddy.logging.encoders.filter.ip_mask
caddy.logging.encoders.filter.query
caddy.logging.encoders.filter.regexp
caddy.logging.encoders.filter.rename
caddy.logging.encoders.filter.replace
caddy.logging.encoders.json
caddy.logging.writers.discard
caddy.logging.writers.file
caddy.logging.writers.net
caddy.logging.writers.stderr
caddy.logging.writers.stdout
caddy.storage.file_system
events
http
http.authentication.hashes.bcrypt
http.authentication.providers.http_basic
http.encoders.gzip
http.encoders.zstd
http.handlers.acme_server
http.handlers.authentication
http.handlers.copy_response
http.handlers.copy_response_headers
http.handlers.encode
http.handlers.error
http.handlers.file_server
http.handlers.headers
http.handlers.intercept
http.handlers.invoke
http.handlers.log_append
http.handlers.map
http.handlers.metrics
http.handlers.push
http.handlers.request_body
http.handlers.reverse_proxy
http.handlers.rewrite
http.handlers.static_response
http.handlers.subroute
http.handlers.templates
http.handlers.tracing
http.handlers.vars
http.ip_sources.static
http.matchers.client_ip
http.matchers.expression
http.matchers.file
http.matchers.header
http.matchers.header_regexp
http.matchers.host
http.matchers.method
http.matchers.not
http.matchers.path
http.matchers.path_regexp
http.matchers.protocol
http.matchers.query
http.matchers.remote_ip
http.matchers.vars
http.matchers.vars_regexp
http.precompressed.br
http.precompressed.gzip
http.precompressed.zstd
http.reverse_proxy.selection_policies.client_ip_hash
http.reverse_proxy.selection_policies.cookie
http.reverse_proxy.selection_policies.first
http.reverse_proxy.selection_policies.header
http.reverse_proxy.selection_policies.ip_hash
http.reverse_proxy.selection_policies.least_conn
http.reverse_proxy.selection_policies.query
http.reverse_proxy.selection_policies.random
http.reverse_proxy.selection_policies.random_choose
http.reverse_proxy.selection_policies.round_robin
http.reverse_proxy.selection_policies.uri_hash
http.reverse_proxy.selection_policies.weighted_round_robin
http.reverse_proxy.transport.fastcgi
http.reverse_proxy.transport.http
http.reverse_proxy.upstreams.a
http.reverse_proxy.upstreams.multi
http.reverse_proxy.upstreams.srv
pki
tls
tls.ca_pool.source.file
tls.ca_pool.source.http
tls.ca_pool.source.inline
tls.ca_pool.source.pki_intermediate
tls.ca_pool.source.pki_root
tls.ca_pool.source.storage
tls.certificates.automate
tls.certificates.load_files
tls.certificates.load_folders
tls.certificates.load_pem
tls.certificates.load_storage
tls.client_auth.verifier.leaf
tls.get_certificate.http
tls.get_certificate.tailscale
tls.handshake_match.local_ip
tls.handshake_match.remote_ip
tls.handshake_match.sni
tls.issuance.acme
tls.issuance.internal
tls.issuance.zerossl
tls.leaf_cert_loader.file
tls.leaf_cert_loader.folder
tls.leaf_cert_loader.pem
tls.leaf_cert_loader.storage
tls.permission.http
tls.stek.distributed
tls.stek.standard

  Standard modules: 121

caddy.listeners.layer4
layer4
layer4.handlers.echo
layer4.handlers.proxy
layer4.handlers.proxy_protocol
layer4.handlers.socks5
layer4.handlers.subroute
layer4.handlers.tee
layer4.handlers.throttle
layer4.handlers.tls
layer4.matchers.http
layer4.matchers.ip
layer4.matchers.local_ip
layer4.matchers.not
layer4.matchers.postgres
layer4.matchers.proxy_protocol
layer4.matchers.socks4
layer4.matchers.socks5
layer4.matchers.ssh
layer4.matchers.tls
layer4.matchers.xmpp
layer4.proxy.selection_policies.first
layer4.proxy.selection_policies.ip_hash
layer4.proxy.selection_policies.least_conn
layer4.proxy.selection_policies.random
layer4.proxy.selection_policies.random_choose
layer4.proxy.selection_policies.round_robin
tls.handshake_match.alpn

  Non-standard modules: 28

  Unknown modules: 0

Can you run caddy build-info, we'll need to see which version of layer4 you have. Make sure you have the latest (try building again now).

Below is the output of caddy build-info both before and after downloading a new build of Caddy from the downloads page (with the github.com/mholt/caddy-l4 plugin included, of course).

Before
go	go1.22.3
path	caddy
mod	caddy	(devel)	
dep	filippo.io/edwards25519	v1.1.0	h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
dep	github.com/BurntSushi/toml	v1.3.2	h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
dep	github.com/Masterminds/goutils	v1.1.1	h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
dep	github.com/Masterminds/semver/v3	v3.2.1	h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
dep	github.com/Masterminds/sprig/v3	v3.2.3	h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
dep	github.com/alecthomas/chroma/v2	v2.13.0	h1:VP72+99Fb2zEcYM0MeaWJmV+xQvz5v5cxRHd+ooU1lI=
dep	github.com/antlr4-go/antlr/v4	v4.13.0	h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
dep	github.com/aryann/difflib	v0.0.0-20210328193216-ff5ff6dc229b	h1:uUXgbcPDK3KpW29o4iy7GtuappbWT0l5NaMo9H9pJDw=
dep	github.com/beorn7/perks	v1.0.1	h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
dep	github.com/caddyserver/caddy/v2	v2.8.4	h1:q3pe0wpBj1OcHFZ3n/1nl4V4bxBrYoSoab7rL9BMYNk=
dep	github.com/caddyserver/certmagic	v0.21.3	h1:pqRRry3yuB4CWBVq9+cUqu+Y6E2z8TswbhNx1AZeYm0=
dep	github.com/caddyserver/zerossl	v0.1.3	h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA=
dep	github.com/cenkalti/backoff/v4	v4.2.1	h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
dep	github.com/cespare/xxhash/v2	v2.2.0	h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
dep	github.com/chzyer/readline	v1.5.1	h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
dep	github.com/cpuguy83/go-md2man/v2	v2.0.3	h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
dep	github.com/dlclark/regexp2	v1.11.0	h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
dep	github.com/dustin/go-humanize	v1.0.1	h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
dep	github.com/felixge/httpsnoop	v1.0.4	h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
dep	github.com/fxamacker/cbor/v2	v2.6.0	h1:sU6J2usfADwWlYDAFhZBQ6TnLFBHxgesMrQfQgk1tWA=
dep	github.com/go-chi/chi/v5	v5.0.12	h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
dep	github.com/go-jose/go-jose/v3	v3.0.3	h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
dep	github.com/go-kit/kit	v0.13.0	h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU=
dep	github.com/go-kit/log	v0.2.1	h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
dep	github.com/go-logfmt/logfmt	v0.6.0	h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
dep	github.com/go-logr/logr	v1.4.1	h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
dep	github.com/go-logr/stdr	v1.2.2	h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
dep	github.com/go-sql-driver/mysql	v1.7.1	h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
dep	github.com/google/cel-go	v0.20.1	h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
dep	github.com/google/certificate-transparency-go	v1.1.8-0.20240110162603-74a5dd331745	h1:heyoXNxkRT155x4jTAiSv5BVSVkueifPUm+Q8LUXMRo=
dep	github.com/google/go-tpm	v0.9.0	h1:sQF6YqWMi+SCXpsmS3fd21oPy/vSddwZry4JnmltHVk=
dep	github.com/google/go-tspi	v0.3.0	h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus=
dep	github.com/google/uuid	v1.6.0	h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
dep	github.com/grpc-ecosystem/grpc-gateway/v2	v2.18.0	h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
dep	github.com/huandu/xstrings	v1.4.0	h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
dep	github.com/imdario/mergo	v0.3.16	h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
dep	github.com/jackc/chunkreader/v2	v2.0.1	h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
dep	github.com/jackc/pgconn	v1.14.3	h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w=
dep	github.com/jackc/pgio	v1.0.0	h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
dep	github.com/jackc/pgpassfile	v1.0.0	h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
dep	github.com/jackc/pgproto3/v2	v2.3.3	h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
dep	github.com/jackc/pgservicefile	v0.0.0-20221227161230-091c0ba34f0a	h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
dep	github.com/jackc/pgtype	v1.14.0	h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw=
dep	github.com/jackc/pgx/v4	v4.18.3	h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA=
dep	github.com/klauspost/compress	v1.17.8	h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
dep	github.com/klauspost/cpuid/v2	v2.2.7	h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
dep	github.com/libdns/libdns	v0.2.2	h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s=
dep	github.com/manifoldco/promptui	v0.9.0	h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
dep	github.com/mastercactapus/proxyprotocol	v0.0.4	h1:qSY75IZF30ZqIU9iW1ip3I7gTnm8wRAnGWqPxCBVgq0=
dep	github.com/mattn/go-colorable	v0.1.13	h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
dep	github.com/mattn/go-isatty	v0.0.20	h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
dep	github.com/mgutz/ansi	v0.0.0-20200706080929-d51e80ef957d	h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
dep	github.com/mholt/acmez/v2	v2.0.1	h1:3/3N0u1pLjMK4sNEAFSI+bcvzbPhRpY383sy1kLHJ6k=
dep	github.com/mholt/caddy-l4	v0.0.0-20240604210608-ce9789f602eb	h1:E3ZZty8760v20ONz3Sop8aOxQ3kcz/krP26ZCWvqn1I=
dep	github.com/miekg/dns	v1.1.59	h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs=
dep	github.com/mitchellh/copystructure	v1.2.0	h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
dep	github.com/mitchellh/go-ps	v1.0.0	h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
dep	github.com/mitchellh/reflectwalk	v1.0.2	h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
dep	github.com/pires/go-proxyproto	v0.7.0	h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs=
dep	github.com/pkg/errors	v0.9.1	h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
dep	github.com/prometheus/client_golang	v1.19.1	h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
dep	github.com/prometheus/client_model	v0.5.0	h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
dep	github.com/prometheus/common	v0.48.0	h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
dep	github.com/prometheus/procfs	v0.12.0	h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
dep	github.com/quic-go/qpack	v0.4.0	h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
dep	github.com/quic-go/quic-go	v0.44.0	h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0=
dep	github.com/rs/xid	v1.5.0	h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
dep	github.com/russross/blackfriday/v2	v2.1.0	h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
dep	github.com/shopspring/decimal	v1.3.1	h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
dep	github.com/shurcooL/sanitized_anchor_name	v1.0.0	h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
dep	github.com/sirupsen/logrus	v1.9.3	h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
dep	github.com/slackhq/nebula	v1.7.2	h1:Rko1Mlksz/nC0c919xjGpB8uOSrTJ5e6KPgZx+lVfYw=
dep	github.com/smallstep/certificates	v0.26.1	h1:FIUliEBcExSfJJDhRFA/s8aZgMIFuorexnRSKQd884o=
dep	github.com/smallstep/go-attestation	v0.4.4-0.20240109183208-413678f90935	h1:kjYvkvS/Wdy0PVRDUAA0gGJIVSEZYhiAJtfwYgOYoGA=
dep	github.com/smallstep/nosql	v0.6.1	h1:X8IBZFTRIp1gmuf23ne/jlD/BWKJtDQbtatxEn7Et1Y=
dep	github.com/smallstep/pkcs7	v0.0.0-20231024181729-3b98ecc1ca81	h1:B6cED3iLJTgxpdh4tuqByDjRRKan2EvtnOfHr2zHJVg=
dep	github.com/smallstep/scep	v0.0.0-20231024192529-aee96d7ad34d	h1:06LUHn4Ia2X6syjIaCMNaXXDNdU+1N/oOHynJbWgpXw=
dep	github.com/smallstep/truststore	v0.13.0	h1:90if9htAOblavbMeWlqNLnO9bsjjgVv2hQeQJCi/py4=
dep	github.com/spf13/cast	v1.5.1	h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
dep	github.com/spf13/cobra	v1.8.0	h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
dep	github.com/spf13/pflag	v1.0.5	h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
dep	github.com/stoewer/go-strcase	v1.3.0	h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
dep	github.com/tailscale/tscert	v0.0.0-20240517230440-bbccfbf48933	h1:pV0H+XIvFoP7pl1MRtyPXh5hqoxB5I7snOtTHgrn6HU=
dep	github.com/things-go/go-socks5	v0.0.5	h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8=
dep	github.com/urfave/cli	v1.22.14	h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk=
dep	github.com/x448/float16	v0.8.4	h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
dep	github.com/yuin/goldmark	v1.7.1	h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U=
dep	github.com/yuin/goldmark-highlighting/v2	v2.0.0-20230729083705-37449abec8cc	h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
dep	github.com/zeebo/blake3	v0.2.3	h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg=
dep	go.etcd.io/bbolt	v1.3.9	h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
dep	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp	v0.49.0	h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
dep	go.opentelemetry.io/contrib/propagators/autoprop	v0.42.0	h1:s2RzYOAqHVgG23q8fPWYChobUoZM6rJZ98EnylJr66w=
dep	go.opentelemetry.io/contrib/propagators/aws	v1.17.0	h1:IX8d7l2uRw61BlmZBOTQFaK+y22j6vytMVTs9wFrO+c=
dep	go.opentelemetry.io/contrib/propagators/b3	v1.17.0	h1:ImOVvHnku8jijXqkwCSyYKRDt2YrnGXD4BbhcpfbfJo=
dep	go.opentelemetry.io/contrib/propagators/jaeger	v1.17.0	h1:Zbpbmwav32Ea5jSotpmkWEl3a6Xvd4tw/3xxGO1i05Y=
dep	go.opentelemetry.io/contrib/propagators/ot	v1.17.0	h1:ufo2Vsz8l76eI47jFjuVyjyB3Ae2DmfiCV/o6Vc8ii0=
dep	go.opentelemetry.io/otel	v1.24.0	h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
dep	go.opentelemetry.io/otel/exporters/otlp/otlptrace	v1.21.0	h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw=
dep	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc	v1.21.0	h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk=
dep	go.opentelemetry.io/otel/metric	v1.24.0	h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
dep	go.opentelemetry.io/otel/sdk	v1.21.0	h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=
dep	go.opentelemetry.io/otel/trace	v1.24.0	h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
dep	go.opentelemetry.io/proto/otlp	v1.0.0	h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
dep	go.step.sm/cli-utils	v0.9.0	h1:55jYcsQbnArNqepZyAwcato6Zy2MoZDRkWW+jF+aPfQ=
dep	go.step.sm/crypto	v0.45.0	h1:Z0WYAaaOYrJmKP9sJkPW+6wy3pgN3Ija8ek/D4serjc=
dep	go.step.sm/linkedca	v0.20.1	h1:bHDn1+UG1NgRrERkWbbCiAIvv4lD5NOFaswPDTyO5vU=
dep	go.uber.org/automaxprocs	v1.5.3	h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
dep	go.uber.org/multierr	v1.11.0	h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
dep	go.uber.org/zap	v1.27.0	h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
dep	go.uber.org/zap/exp	v0.2.0	h1:FtGenNNeCATRB3CmB/yEUnjEFeJWpB/pMcy7e2bKPYs=
dep	golang.org/x/crypto	v0.23.0	h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
dep	golang.org/x/crypto/x509roots/fallback	v0.0.0-20240507223354-67b13616a595	h1:TgSqweA595vD0Zt86JzLv3Pb/syKg8gd5KMGGbJPYFw=
dep	golang.org/x/exp	v0.0.0-20240506185415-9bf2ced13842	h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
dep	golang.org/x/net	v0.25.0	h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
dep	golang.org/x/sync	v0.7.0	h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
dep	golang.org/x/sys	v0.20.0	h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
dep	golang.org/x/term	v0.20.0	h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
dep	golang.org/x/text	v0.15.0	h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
dep	golang.org/x/time	v0.5.0	h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
dep	google.golang.org/genproto/googleapis/api	v0.0.0-20240506185236-b8a5c65736ae	h1:AH34z6WAGVNkllnKs5raNq3yRq93VnjBG6rpfub/jYk=
dep	google.golang.org/genproto/googleapis/rpc	v0.0.0-20240429193739-8cf5692501f6	h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE=
dep	google.golang.org/grpc	v1.63.2	h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
dep	google.golang.org/protobuf	v1.34.1	h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
dep	gopkg.in/natefinch/lumberjack.v2	v2.2.1	h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
dep	gopkg.in/yaml.v3	v3.0.1	h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
dep	howett.net/plist	v1.0.0	h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
build	-buildmode=exe
build	-compiler=gc
build	-tags=nobadger
build	-trimpath=true
build	CGO_ENABLED=0
build	GOARCH=arm64
build	GOOS=darwin
After
go	go1.22.3
path	caddy
mod	caddy	(devel)	
dep	filippo.io/edwards25519	v1.1.0	h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
dep	github.com/BurntSushi/toml	v1.3.2	h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
dep	github.com/Masterminds/goutils	v1.1.1	h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
dep	github.com/Masterminds/semver/v3	v3.2.1	h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
dep	github.com/Masterminds/sprig/v3	v3.2.3	h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
dep	github.com/alecthomas/chroma/v2	v2.13.0	h1:VP72+99Fb2zEcYM0MeaWJmV+xQvz5v5cxRHd+ooU1lI=
dep	github.com/antlr4-go/antlr/v4	v4.13.0	h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
dep	github.com/aryann/difflib	v0.0.0-20210328193216-ff5ff6dc229b	h1:uUXgbcPDK3KpW29o4iy7GtuappbWT0l5NaMo9H9pJDw=
dep	github.com/beorn7/perks	v1.0.1	h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
dep	github.com/caddyserver/caddy/v2	v2.8.4	h1:q3pe0wpBj1OcHFZ3n/1nl4V4bxBrYoSoab7rL9BMYNk=
dep	github.com/caddyserver/certmagic	v0.21.3	h1:pqRRry3yuB4CWBVq9+cUqu+Y6E2z8TswbhNx1AZeYm0=
dep	github.com/caddyserver/zerossl	v0.1.3	h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA=
dep	github.com/cenkalti/backoff/v4	v4.2.1	h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
dep	github.com/cespare/xxhash/v2	v2.2.0	h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
dep	github.com/chzyer/readline	v1.5.1	h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
dep	github.com/cpuguy83/go-md2man/v2	v2.0.3	h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
dep	github.com/dlclark/regexp2	v1.11.0	h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
dep	github.com/dustin/go-humanize	v1.0.1	h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
dep	github.com/felixge/httpsnoop	v1.0.4	h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
dep	github.com/fxamacker/cbor/v2	v2.6.0	h1:sU6J2usfADwWlYDAFhZBQ6TnLFBHxgesMrQfQgk1tWA=
dep	github.com/go-chi/chi/v5	v5.0.12	h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
dep	github.com/go-jose/go-jose/v3	v3.0.3	h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
dep	github.com/go-kit/kit	v0.13.0	h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU=
dep	github.com/go-kit/log	v0.2.1	h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
dep	github.com/go-logfmt/logfmt	v0.6.0	h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
dep	github.com/go-logr/logr	v1.4.1	h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
dep	github.com/go-logr/stdr	v1.2.2	h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
dep	github.com/go-sql-driver/mysql	v1.7.1	h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
dep	github.com/google/cel-go	v0.20.1	h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
dep	github.com/google/certificate-transparency-go	v1.1.8-0.20240110162603-74a5dd331745	h1:heyoXNxkRT155x4jTAiSv5BVSVkueifPUm+Q8LUXMRo=
dep	github.com/google/go-tpm	v0.9.0	h1:sQF6YqWMi+SCXpsmS3fd21oPy/vSddwZry4JnmltHVk=
dep	github.com/google/go-tspi	v0.3.0	h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus=
dep	github.com/google/uuid	v1.6.0	h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
dep	github.com/grpc-ecosystem/grpc-gateway/v2	v2.18.0	h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk=
dep	github.com/huandu/xstrings	v1.4.0	h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
dep	github.com/imdario/mergo	v0.3.16	h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
dep	github.com/jackc/chunkreader/v2	v2.0.1	h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
dep	github.com/jackc/pgconn	v1.14.3	h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w=
dep	github.com/jackc/pgio	v1.0.0	h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
dep	github.com/jackc/pgpassfile	v1.0.0	h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
dep	github.com/jackc/pgproto3/v2	v2.3.3	h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
dep	github.com/jackc/pgservicefile	v0.0.0-20221227161230-091c0ba34f0a	h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
dep	github.com/jackc/pgtype	v1.14.0	h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw=
dep	github.com/jackc/pgx/v4	v4.18.3	h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA=
dep	github.com/klauspost/compress	v1.17.8	h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
dep	github.com/klauspost/cpuid/v2	v2.2.7	h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
dep	github.com/libdns/libdns	v0.2.2	h1:O6ws7bAfRPaBsgAYt8MDe2HcNBGC29hkZ9MX2eUSX3s=
dep	github.com/manifoldco/promptui	v0.9.0	h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
dep	github.com/mastercactapus/proxyprotocol	v0.0.4	h1:qSY75IZF30ZqIU9iW1ip3I7gTnm8wRAnGWqPxCBVgq0=
dep	github.com/mattn/go-colorable	v0.1.13	h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
dep	github.com/mattn/go-isatty	v0.0.20	h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
dep	github.com/mgutz/ansi	v0.0.0-20200706080929-d51e80ef957d	h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
dep	github.com/mholt/acmez/v2	v2.0.1	h1:3/3N0u1pLjMK4sNEAFSI+bcvzbPhRpY383sy1kLHJ6k=
dep	github.com/mholt/caddy-l4	v0.0.0-20240604210608-ce9789f602eb	h1:E3ZZty8760v20ONz3Sop8aOxQ3kcz/krP26ZCWvqn1I=
dep	github.com/miekg/dns	v1.1.59	h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs=
dep	github.com/mitchellh/copystructure	v1.2.0	h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
dep	github.com/mitchellh/go-ps	v1.0.0	h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
dep	github.com/mitchellh/reflectwalk	v1.0.2	h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
dep	github.com/pires/go-proxyproto	v0.7.0	h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs=
dep	github.com/pkg/errors	v0.9.1	h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
dep	github.com/prometheus/client_golang	v1.19.1	h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
dep	github.com/prometheus/client_model	v0.5.0	h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
dep	github.com/prometheus/common	v0.48.0	h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
dep	github.com/prometheus/procfs	v0.12.0	h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
dep	github.com/quic-go/qpack	v0.4.0	h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
dep	github.com/quic-go/quic-go	v0.44.0	h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0=
dep	github.com/rs/xid	v1.5.0	h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
dep	github.com/russross/blackfriday/v2	v2.1.0	h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
dep	github.com/shopspring/decimal	v1.3.1	h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
dep	github.com/shurcooL/sanitized_anchor_name	v1.0.0	h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
dep	github.com/sirupsen/logrus	v1.9.3	h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
dep	github.com/slackhq/nebula	v1.7.2	h1:Rko1Mlksz/nC0c919xjGpB8uOSrTJ5e6KPgZx+lVfYw=
dep	github.com/smallstep/certificates	v0.26.1	h1:FIUliEBcExSfJJDhRFA/s8aZgMIFuorexnRSKQd884o=
dep	github.com/smallstep/go-attestation	v0.4.4-0.20240109183208-413678f90935	h1:kjYvkvS/Wdy0PVRDUAA0gGJIVSEZYhiAJtfwYgOYoGA=
dep	github.com/smallstep/nosql	v0.6.1	h1:X8IBZFTRIp1gmuf23ne/jlD/BWKJtDQbtatxEn7Et1Y=
dep	github.com/smallstep/pkcs7	v0.0.0-20231024181729-3b98ecc1ca81	h1:B6cED3iLJTgxpdh4tuqByDjRRKan2EvtnOfHr2zHJVg=
dep	github.com/smallstep/scep	v0.0.0-20231024192529-aee96d7ad34d	h1:06LUHn4Ia2X6syjIaCMNaXXDNdU+1N/oOHynJbWgpXw=
dep	github.com/smallstep/truststore	v0.13.0	h1:90if9htAOblavbMeWlqNLnO9bsjjgVv2hQeQJCi/py4=
dep	github.com/spf13/cast	v1.5.1	h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
dep	github.com/spf13/cobra	v1.8.0	h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
dep	github.com/spf13/pflag	v1.0.5	h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
dep	github.com/stoewer/go-strcase	v1.3.0	h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
dep	github.com/tailscale/tscert	v0.0.0-20240517230440-bbccfbf48933	h1:pV0H+XIvFoP7pl1MRtyPXh5hqoxB5I7snOtTHgrn6HU=
dep	github.com/things-go/go-socks5	v0.0.5	h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8=
dep	github.com/urfave/cli	v1.22.14	h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk=
dep	github.com/x448/float16	v0.8.4	h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
dep	github.com/yuin/goldmark	v1.7.1	h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U=
dep	github.com/yuin/goldmark-highlighting/v2	v2.0.0-20230729083705-37449abec8cc	h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ=
dep	github.com/zeebo/blake3	v0.2.3	h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg=
dep	go.etcd.io/bbolt	v1.3.9	h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
dep	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp	v0.49.0	h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
dep	go.opentelemetry.io/contrib/propagators/autoprop	v0.42.0	h1:s2RzYOAqHVgG23q8fPWYChobUoZM6rJZ98EnylJr66w=
dep	go.opentelemetry.io/contrib/propagators/aws	v1.17.0	h1:IX8d7l2uRw61BlmZBOTQFaK+y22j6vytMVTs9wFrO+c=
dep	go.opentelemetry.io/contrib/propagators/b3	v1.17.0	h1:ImOVvHnku8jijXqkwCSyYKRDt2YrnGXD4BbhcpfbfJo=
dep	go.opentelemetry.io/contrib/propagators/jaeger	v1.17.0	h1:Zbpbmwav32Ea5jSotpmkWEl3a6Xvd4tw/3xxGO1i05Y=
dep	go.opentelemetry.io/contrib/propagators/ot	v1.17.0	h1:ufo2Vsz8l76eI47jFjuVyjyB3Ae2DmfiCV/o6Vc8ii0=
dep	go.opentelemetry.io/otel	v1.24.0	h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
dep	go.opentelemetry.io/otel/exporters/otlp/otlptrace	v1.21.0	h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw=
dep	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc	v1.21.0	h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk=
dep	go.opentelemetry.io/otel/metric	v1.24.0	h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
dep	go.opentelemetry.io/otel/sdk	v1.21.0	h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=
dep	go.opentelemetry.io/otel/trace	v1.24.0	h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
dep	go.opentelemetry.io/proto/otlp	v1.0.0	h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
dep	go.step.sm/cli-utils	v0.9.0	h1:55jYcsQbnArNqepZyAwcato6Zy2MoZDRkWW+jF+aPfQ=
dep	go.step.sm/crypto	v0.45.0	h1:Z0WYAaaOYrJmKP9sJkPW+6wy3pgN3Ija8ek/D4serjc=
dep	go.step.sm/linkedca	v0.20.1	h1:bHDn1+UG1NgRrERkWbbCiAIvv4lD5NOFaswPDTyO5vU=
dep	go.uber.org/automaxprocs	v1.5.3	h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
dep	go.uber.org/multierr	v1.11.0	h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
dep	go.uber.org/zap	v1.27.0	h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
dep	go.uber.org/zap/exp	v0.2.0	h1:FtGenNNeCATRB3CmB/yEUnjEFeJWpB/pMcy7e2bKPYs=
dep	golang.org/x/crypto	v0.23.0	h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
dep	golang.org/x/crypto/x509roots/fallback	v0.0.0-20240507223354-67b13616a595	h1:TgSqweA595vD0Zt86JzLv3Pb/syKg8gd5KMGGbJPYFw=
dep	golang.org/x/exp	v0.0.0-20240506185415-9bf2ced13842	h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
dep	golang.org/x/net	v0.25.0	h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
dep	golang.org/x/sync	v0.7.0	h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
dep	golang.org/x/sys	v0.20.0	h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
dep	golang.org/x/term	v0.20.0	h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
dep	golang.org/x/text	v0.15.0	h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
dep	golang.org/x/time	v0.5.0	h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
dep	google.golang.org/genproto/googleapis/api	v0.0.0-20240506185236-b8a5c65736ae	h1:AH34z6WAGVNkllnKs5raNq3yRq93VnjBG6rpfub/jYk=
dep	google.golang.org/genproto/googleapis/rpc	v0.0.0-20240429193739-8cf5692501f6	h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE=
dep	google.golang.org/grpc	v1.63.2	h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
dep	google.golang.org/protobuf	v1.34.1	h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
dep	gopkg.in/natefinch/lumberjack.v2	v2.2.1	h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
dep	gopkg.in/yaml.v3	v3.0.1	h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
dep	howett.net/plist	v1.0.0	h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
build	-buildmode=exe
build	-compiler=gc
build	-tags=nobadger
build	-trimpath=true
build	CGO_ENABLED=0
build	GOARCH=arm64
build	GOOS=darwin

The newly-downloaded binary yields the same error as the original one.

github.com/mholt/caddy-l4	v0.0.0-20240604210608-ce9789f602eb

Yeah that's an older commit (from June 4th).

You should try building with xcaddy directly instead. The build server (the Download page) might have old versions cached for now.

It works when building with xcaddy. Thanks!

@francislavoie

Sorry to bother you but I have the same problem and it's not working :/

caddyfile

{
    layer4 {
        127.0.0.1:5000 {
            route {
                echo
            }
        }
    }
}

error

docker run --rm -it -v $(pwd)/caddyfile:/etc/caddy/Caddyfile test                                 
2024/08/05 15:42:29.764 INFO    using config from file  {"file": "/etc/caddy/Caddyfile"}
Error: adapting config using caddyfile: parsing caddyfile tokens for 'layer4': getting module named 'layer4.handlers.echo': module not registered: layer4.handlers.echo, at /etc/caddy/Caddyfile:5

build-info

docker run --rm -it -v $(pwd)/caddyfile:/etc/caddy/Caddyfile test caddy build-info | grep l4    
dep     github.com/caddyserver/caddy/v2 v2.8.4  h1:q3pe0wpBj1OcHFZ3n/1nl4V4bxBrYoSoab7rL9BMYNk=
dep     github.com/imdario/mergo        v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
dep     github.com/mholt/caddy-l4       v0.0.0-20240802211152-352413454ba9      h1:2qW01rgYyqv4DybMWvGp7Ppv11ImQ5+opMhNzG9b1X0=
dep     github.com/rs/xid       v1.5.0  h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=

Dockerfile

FROM caddy:2.8.4-builder-alpine AS builder

RUN xcaddy build \
  --with github.com/mholt/caddy-l4/layer4@352413454ba91946a196ba37ee4e3f86f3cd733e

FROM caddy:2.8.4-alpine

COPY --from=builder /usr/bin/caddy /usr/bin/caddy
COPY caddyfile /etc/caddy/Caddyfile

list-modules

docker run --rm -it -v $(pwd)/caddyfile:/etc/caddy/Caddyfile test caddy list-modules | grep layer4
caddy.listeners.layer4
layer4
layer4.matchers.local_ip
layer4.matchers.not
layer4.matchers.remote_ip

Your --with is wrong, remove the /layer4 at the end. It should be just --with github.com/mholt/caddy-l4 without /layer4.

Your --with is wrong, remove the /layer4 at the end. It should be just --with github.com/mholt/caddy-l4 without /layer4.

Perfect...! Thanks... ! :)

I just copied from https://caddyserver.com/docs/modules/layer4

Ah, that's probably a bug in our module doc generator