module NoirTechs

Defined in:

techs/catalog/asp/classic.cr
techs/techs.cr

Constant Summary

AI_CONTEXT_GUARD_SUPPORTED_TECHS = TECHS.compact_map do |key, value| context = value[:context]? if context.is_a?(Hash) else next end if context[:guards]? key.to_s end end
AMBIGUOUS_ALIAS_WINNERS = {"abseil" => "cpp_cli", "argparse" => "python_cli", "getopt" => "cpp_cli", "optionparser" => "ruby_cli", "getopts" => "js_cli", "http" => "crystal_http", "std/http" => "crystal_http", "httpserver" => "dart_http", "commons-cli" => "groovy_cli", "jcommander" => "groovy_cli", "picocli" => "java_cli", "spring" => "java_spring", "clap" => "rust_cli", "play" => "scala_play", "play-framework" => "scala_play"}

Aliases claimed by more than one tech — genuine cross-language library-name ambiguity (argparse is C++, Lua and Python; spring is Java and Kotlin). Without a pin, .similar_to_tech's fallback scan hands the name to whichever tech TECHS happens to reach first, i.e. the catalog's insertion order decides a user-visible answer.

That is not a theoretical hazard: the split into per-language catalog files reordered insertion, and the three aliases whose winner it would have silently changed had to be pinned after the fact.

Every ambiguous alias belongs here. The table is consulted before the order-dependent scan, so a pinned alias resolves the same way whatever order TECHS is built in — which is what makes the catalog's ordering a free implementation detail rather than a behavioural contract. Thirteen aliases were still resolving by luck; they are pinned below to the tech they already resolved to, so this is not a behaviour change. spec/unit_test/techs/alias_resolution_spec.cr fails if a new ambiguous alias appears without a pin, which turns "somebody has to notice" into "somebody has to decide".

An alias that is also a tech key (kong) needs no pin: the exact-key pass runs first and only one key can match it.

Keys must be lowercase (the lookup downcases its input).

CALLEE_SUPPORTED_TECHS = TECHS.compact_map do |key, value| context = value[:context]? if context.is_a?(Hash) else next end if context[:callee]? key.to_s end end

Derived from the per-tech :context flags in the catalog files, so a capability can only be declared on an entry that exists — the drift class the tech-registry integrity spec (#2384) exists to catch.

SUPERSEDES = TECHS.compact_map do |key, value| targets = value[:supersedes]? if targets.is_a?(Array) else next end {key.to_s, targets.map(&.to_s)} end.to_h

"When both are detected, X owns the routes and Y is noise" — declared on X's catalog entry as :supersedes => ["y"].

These rules used to be an if chain in filter_redundant_generic_techs, a global function in src/analyzer/analyzer.cr, so adding a framework that shadows another meant editing the catalog, the analyzer, and that function — and none of the four rules had a unit test.

When a rule belongs here

Only when both techs target the same routing DSL, so the two analyzers would extract the same endpoints twice under two different technology tags. Lumen/Laravel, Bandit/Plug, Jetzig/httpz, Drupal/Symfony are all that shape: one framework is literally built on the other, so the broader detector fires on every project of the narrower one.

When a rule does NOT belong here

Never add "the generic stdlib analyzer is redundant when framework X is present". .techs is a flat, repo-wide list with no path granularity, so a framework detected anywhere would suppress the generic analyzer everywhere. In a monorepo that silently drops real attack surface: a standalone net/http admin listener exposing /debug/pprof next to a Gin API, or a standalone Starlette service next to a FastAPI one. Framework-vs-framework rules are safe because both analyzers target the same DSL; framework-vs-stdlib rules are not. Scoping that correctly needs a per-tech path map from the detector (the detect loop does know the file), not a global list.

php_pure and cfml_pure are the worked example of getting this wrong. Both used to be dropped when a framework was present, and both paid for it: a legacy public/upload.php beside a Laravel app vanished from the report, and so did the access="remote" methods on a ColdBox app's proxy components. php_pure now resolves URLs against the document root (#2358) and cfml_pure narrows to components-only mode, so both run alongside the framework analyzer instead of being suppressed. Neither carries :supersedes, deliberately.

:similar already puts Array(String) in the value union, so this key widens nothing — but narrow with is_a?(Array), not is_a?(Hash).

TECHS = {:asp_classic => {:framework => "Classic ASP (VBScript)", :language => "ASP", :similar => ["asp", "classic-asp", "classic_asp", "asp-classic", "asp_classic", "vbscript"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :aspnet_webforms => {:framework => "ASP.NET WebForms", :language => "ASP.NET", :similar => ["webforms", "web-forms", "aspnet-webforms", "aspnet_webforms", "asp.net webforms", "aspx"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :cfml_coldbox => {:framework => "ColdBox", :language => "CFML", :similar => ["coldbox", "cfml-coldbox", "cfml_coldbox", "contentbox"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cfml_fw1 => {:framework => "FW/1", :language => "CFML", :similar => ["fw1", "fw/1", "framework-one", "framework.one", "cfml-fw1", "cfml_fw1"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cfml_pure => {:framework => "ColdFusion (CFML)", :language => "CFML", :similar => ["cfml", "coldfusion", "cfml-pure", "cfml_pure", "lucee", "boxlang"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :cfml_taffy => {:framework => "Taffy", :language => "CFML", :similar => ["taffy", "cfml-taffy", "cfml_taffy", "coldfusion-taffy"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cfml_wheels => {:framework => "Wheels", :language => "CFML", :similar => ["wheels", "cfwheels", "cfml-wheels", "cfml_wheels"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :clojure_cli => {:framework => "CLI (clojure.tools.cli / cli-matic / environ / babashka.cli)", :language => "Clojure", :similar => ["clojure-cli", "clojure_cli", "tools.cli", "cli-matic", "environ", "babashka-cli", "babashka.cli"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :clojure_compojure => {:framework => "Compojure", :language => "Clojure", :similar => ["compojure", "clojure-compojure", "clojure_compojure", "clj-compojure"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :clojure_pedestal => {:framework => "Pedestal", :language => "Clojure", :similar => ["pedestal", "clojure-pedestal", "clojure_pedestal", "clj-pedestal", "io-pedestal"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :clojure_reitit => {:framework => "Reitit", :language => "Clojure", :similar => ["reitit", "clojure-reitit", "clojure_reitit", "clj-reitit", "metosin-reitit"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :clojure_ring => {:framework => "Ring", :language => "Clojure", :similar => ["ring", "clojure-ring", "clojure_ring", "clj-ring"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cpp_cli => {:framework => "CLI (CLI11 / getopt / cxxopts / boost.program_options / gflags / Abseil Flags / argparse)", :language => "C++", :similar => ["cpp-cli", "cpp_cli", "cli11", "getopt", "cxxopts", "program_options", "gflags", "abseil", "absl-flags", "argparse"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cpp_crow => {:framework => "Crow", :language => "C++", :similar => ["crow", "crowcpp", "crow-cpp", "cpp-crow", "cpp_crow", "c++-crow", "c++_crow"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :cpp_drogon => {:framework => "Drogon", :language => "C++", :similar => ["drogon", "cpp-drogon", "cpp_drogon", "c++-drogon", "c++_drogon"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :cpp_httplib => {:framework => "cpp-httplib", :language => "C++", :similar => ["httplib", "cpp-httplib", "cpp_httplib", "c++-httplib", "c++_httplib", "yhirose-httplib"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :cpp_oatpp => {:framework => "oat++", :language => "C++", :similar => ["oatpp", "oat++", "cpp-oatpp", "cpp_oatpp", "c++-oatpp", "c++_oatpp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :crystal_amber => {:framework => "Amber", :language => "Crystal", :similar => ["amber", "crystal-amber", "crystal_amber"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => true}, :context => {:callee => true, :guards => true}}, :crystal_cli => {:framework => "CLI (OptionParser / clim / admiral / commander.cr)", :language => "Crystal", :similar => ["crystal-cli", "crystal_cli", "optionparser", "clim", "admiral"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :crystal_grip => {:framework => "Grip", :language => "Crystal", :similar => ["grip", "crystal-grip", "crystal_grip"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :crystal_http => {:framework => "HTTP::Server", :language => "Crystal", :similar => ["http", "http_server", "crystal-http", "crystal_http", "http/server", "std/http"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :crystal_kemal => {:framework => "Kemal", :language => "Crystal", :similar => ["kemal", "crystal-kemal", "crystal_kemal"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :crystal_lucky => {:framework => "Lucky", :language => "Crystal", :similar => ["lucky", "crystal-lucky", "crystal_lucky"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :crystal_marten => {:framework => "Marten", :language => "Crystal", :similar => ["marten", "crystal-marten", "crystal_marten"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_aspnet_core_mvc => {:framework => "ASP.NET Core MVC", :language => "C#", :similar => ["asp.net core mvc", "asp.net core", "aspnetcore", "cs-aspnet-core-mvc", "cs_aspnet_core_mvc", "c# asp.net core mvc", "c#-asp.net-core-mvc", "c#_aspnet_core_mvc"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_aspnet_mvc => {:framework => "ASP.NET MVC", :language => "C#", :similar => ["asp.net mvc", "cs-aspnet-mvc", "cs_aspnet_mvc", "c# asp.net mvc", "c#-asp.net-mvc", "c#_aspnet_mvc"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_carter => {:framework => "Carter", :language => "C#", :similar => ["carter", "cs-carter", "cs_carter", "c# carter", "c#-carter", "c#_carter"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_cli => {:framework => "CLI (System.CommandLine / CommandLineParser / CliFx / Spectre.Console / McMaster / Cocona)", :language => "C#", :similar => ["cs-cli", "cs_cli", "csharp-cli", "system.commandline", "commandlineparser", "clifx", "spectre.console", "mcmaster", "commandlineutils", "cocona"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :cs_fastendpoints => {:framework => "FastEndpoints", :language => "C#", :similar => ["fastendpoints", "fast-endpoints", "cs-fastendpoints", "cs_fastendpoints", "c# fastendpoints", "c#-fastendpoints", "c#_fastendpoints"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_httplistener => {:framework => "System.Net.HttpListener", :language => "C#", :similar => ["httplistener", "http-listener", "system.net.httplistener", "system-net-httplistener", "cs-httplistener", "cs_httplistener", "c# httplistener", "c#-httplistener", "c#_httplistener"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :cs_aspnet_core_minimal_api => {:framework => "ASP.NET Core Minimal API", :language => "C#", :similar => ["asp.net core minimal api", "asp.net core minimal apis", "minimal api", "minimal apis", "cs-aspnet-core-minimal-api", "cs_aspnet_core_minimal_api", "c# asp.net core minimal api", "c#-aspnet-core-minimal-api", "c#_aspnet_core_minimal_api"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :cs_servicestack => {:framework => "ServiceStack", :language => "C#", :similar => ["servicestack", "service-stack", "cs-servicestack", "cs_servicestack", "c# servicestack", "c#-servicestack", "c#_servicestack"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :cs_signalr => {:framework => "ASP.NET Core SignalR", :language => "C#", :similar => ["signalr", "signal-r", "aspnet-signalr", "cs-signalr", "cs_signalr", "c# signalr", "c#-signalr", "c#_signalr"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => true}}, :dart_alfred => {:framework => "Alfred", :language => "Dart", :similar => ["alfred", "dart_alfred", "dart-alfred"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :dart_angel3 => {:framework => "Angel3", :language => "Dart", :similar => ["angel", "angel3", "dart_angel3", "dart-angel3", "angel_framework", "angel3_framework"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :dart_cli => {:framework => "CLI (args / CommandRunner / dcli)", :language => "Dart", :similar => ["dart-cli", "dart_cli", "args", "dcli", "commandrunner"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :dart_frog => {:framework => "Dart Frog", :language => "Dart", :similar => ["dart_frog", "dart-frog", "dartfrog", "dart frog"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :dart_get_server => {:framework => "GetServer", :language => "Dart", :similar => ["get_server", "getserver", "dart_get_server", "dart-get-server"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :dart_http => {:framework => "dart:io HttpServer", :language => "Dart", :similar => ["dart_http", "dart-http", "dart:io", "dart io", "dart_httpserver", "httpserver"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :dart_serverpod => {:framework => "Serverpod", :language => "Dart", :similar => ["serverpod", "dart_serverpod", "dart-serverpod"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :dart_shelf => {:framework => "Shelf", :language => "Dart", :similar => ["shelf", "dart_shelf", "dart-shelf", "shelf_router", "shelf-router"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :elixir_bandit => {:supersedes => ["elixir_plug"], :framework => "Bandit", :language => "Elixir", :similar => ["bandit", "elixir-bandit", "elixir_bandit"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :elixir_cli => {:framework => "CLI (OptionParser / optimus)", :language => "Elixir", :similar => ["elixir-cli", "elixir_cli", "optionparser", "optimus"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :elixir_phoenix => {:framework => "Phoenix", :language => "Elixir", :similar => ["phoenix", "elixir-phoenix", "elixir_phoenix"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :elixir_plug => {:framework => "Plug", :language => "Elixir", :similar => ["plug", "elixir-plug", "elixir_plug"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :elixir_phoenix_channel => {:framework => "Phoenix Channels", :language => "Elixir", :similar => ["phoenix-channel", "phoenix_channel", "phoenix-channels", "elixir-phoenix-channel", "elixir_phoenix_channel"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => true}}, :erlang_cowboy => {:framework => "Cowboy", :language => "Erlang", :similar => ["cowboy", "erlang-cowboy", "erlang_cowboy", "cowboy_router"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :erlang_elli => {:framework => "Elli", :language => "Erlang", :similar => ["elli", "erlang-elli", "erlang_elli"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}}, :fs_giraffe => {:framework => "Giraffe", :language => "F#", :similar => ["giraffe", "fs-giraffe", "fs_giraffe", "fsharp-giraffe", "fsharp_giraffe", "f#-giraffe", "f#_giraffe"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :gleam_wisp => {:framework => "Wisp", :language => "Gleam", :similar => ["wisp", "gleam-wisp", "gleam_wisp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :go_beego => {:framework => "Beego", :language => "Go", :similar => ["beego", "go-beego", "go_beego"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_chi => {:framework => "Chi", :language => "Go", :similar => ["chi", "go-chi", "go_chi"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_cli => {:framework => "CLI (flag / cobra / urfave / pflag / go-arg / go-flags / kong / kingpin / mitchellh)", :language => "Go", :similar => ["go-cli", "go_cli", "cobra", "urfave", "go-arg", "go-flags", "pflag", "kong", "kingpin", "mitchellh-cli"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :go_connect_rpc => {:framework => "Connect-RPC", :language => "Go", :similar => ["connect", "connect-rpc", "connect_rpc", "connectrpc", "go-connect", "go_connect_rpc"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :go_echo => {:framework => "Echo", :language => "Go", :similar => ["echo", "go-echo", "go_echo"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_fasthttp => {:framework => "fasthttp", :language => "Go", :similar => ["fasthttp", "go-fasthttp", "go_fasthttp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_fiber => {:framework => "Fiber", :language => "Go", :similar => ["fiber", "go-fiber", "go_fiber"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_gf => {:framework => "GoFrame", :language => "Go", :similar => ["gf", "goframe", "go-gf", "go_gf", "gogf/gf"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_gin => {:framework => "Gin", :language => "Go", :similar => ["gin", "go-gin", "go_gin"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_goyave => {:framework => "Goyave", :language => "Go", :similar => ["goyave", "go-goyave", "go_goyave"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_gozero => {:framework => "go-zero", :language => "Go", :similar => ["go-zero", "gozero", "go_gozero"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_restful => {:framework => "go-restful", :language => "Go", :similar => ["go-restful", "go_restful", "restful", "emicklei", "emicklei/go-restful"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_hertz => {:framework => "Hertz", :language => "Go", :similar => ["hertz", "go-hertz", "go_hertz", "cloudwego"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_http => {:framework => "net/http", :language => "Go", :similar => ["http", "net/http", "go-http", "go_http", "stdlib-http", "std/http"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_httprouter => {:framework => "httprouter", :language => "Go", :similar => ["httprouter", "go-httprouter", "go_httprouter", "julienschmidt-httprouter"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :go_huma => {:framework => "Huma", :language => "Go", :similar => ["huma", "go-huma", "go_huma", "danielgtaylor-huma"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :go_iris => {:framework => "Iris", :language => "Go", :similar => ["iris", "go-iris", "go_iris", "kataras"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_kratos => {:framework => "Kratos", :language => "Go", :similar => ["kratos", "go-kratos", "go_kratos"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :go_mux => {:framework => "Gorilla Mux", :language => "Go", :similar => ["mux", "go-mux", "go_mux", "gorilla-mux", "gorilla_mux"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :go_pocketbase => {:framework => "PocketBase", :language => "Go", :similar => ["pocketbase", "go-pocketbase", "go_pocketbase"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :groovy_cli => {:framework => "CLI (CliBuilder / picocli / commons-cli / JCommander)", :language => "Groovy", :similar => ["groovy-cli", "groovy_cli", "clibuilder", "picocli", "commons-cli", "jcommander"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :groovy_grails => {:framework => "Grails", :language => "Groovy", :similar => ["grails", "groovy_grails", "groovy-grails"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :haskell_cli => {:framework => "CLI (optparse-applicative / cmdargs / GetOpt / turtle)", :language => "Haskell", :similar => ["haskell-cli", "haskell_cli", "optparse-applicative", "cmdargs", "turtle"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :haskell_scotty => {:framework => "Scotty", :language => "Haskell", :similar => ["scotty", "haskell-scotty", "haskell_scotty"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :haskell_servant => {:framework => "Servant", :language => "Haskell", :similar => ["servant", "haskell-servant", "haskell_servant"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :haskell_yesod => {:framework => "Yesod", :language => "Haskell", :similar => ["yesod", "haskell-yesod", "haskell_yesod"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_armeria => {:framework => "Armeria", :language => "Java", :similar => ["armeria", "java-armeria", "java_armeria"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :java_cli => {:framework => "CLI (picocli / args4j / JCommander / commons-cli / airline / JOpt Simple)", :language => "Java", :similar => ["java-cli", "java_cli", "picocli", "args4j", "jcommander", "commons-cli", "airline", "jopt-simple", "joptsimple"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :java_dropwizard => {:framework => "Dropwizard", :language => "Java", :similar => ["dropwizard", "java-dropwizard", "java_dropwizard"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_helidon_mp => {:framework => "Helidon MP", :language => "Java", :similar => ["helidon-mp", "helidon_mp", "java-helidon-mp", "java_helidon_mp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_helidon_se => {:framework => "Helidon SE", :language => "Java", :similar => ["helidon", "helidon-se", "helidon_se", "java-helidon-se", "java_helidon_se"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_httpserver => {:framework => "JDK HttpServer", :language => "Java", :similar => ["jdk-httpserver", "java-httpserver", "java_httpserver", "com.sun.net.httpserver", "jdk.httpserver"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_javalin => {:framework => "Javalin", :language => "Java", :similar => ["javalin", "java-javalin", "java_javalin"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_jaxrs => {:framework => "JAX-RS", :language => "Java", :similar => ["jaxrs", "jax-rs", "jakarta-rest", "java-jaxrs", "java_jaxrs"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_jsp => {:framework => "JSP", :language => "Java", :similar => ["jsp", "java-jsp", "java_jsp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}, :static_path => true, :websocket => false}, :context => {:guards => true}}, :java_micronaut => {:framework => "Micronaut", :language => "Java", :similar => ["micronaut", "java-micronaut", "java_micronaut"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_play => {:framework => "Play Framework", :language => "Java", :similar => ["play", "play-framework", "java-play", "java_play"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :java_quarkus => {:framework => "Quarkus", :language => "Java", :similar => ["quarkus", "java-quarkus", "java_quarkus"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_spark => {:framework => "Spark Java", :language => "Java", :similar => ["spark", "spark-java", "java-spark", "java_spark"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_spring => {:framework => "Spring", :language => "Java", :similar => ["spring", "java-spring", "java_spring"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :java_struts2 => {:framework => "Apache Struts 2", :language => "Java", :similar => ["struts", "struts2", "apache-struts", "apache-struts2", "java-struts2", "java_struts2"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :java_vertx => {:framework => "Vert.x", :language => "Java", :similar => ["vertx", "vert.x", "java-vertx", "java_vertx"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :java_wicket => {:framework => "Apache Wicket", :language => "Java", :similar => ["wicket", "apache-wicket", "apache wicket", "java-wicket", "java_wicket"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => true, :websocket => false}, :context => {:callee => true}}, :js_adonisjs => {:framework => "AdonisJS", :language => "JavaScript", :similar => ["adonisjs", "adonis", "js-adonisjs", "js_adonisjs"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_apollo => {:framework => "Apollo Server", :language => "JavaScript", :similar => ["apollo", "apollo-server", "apollo_server", "js-apollo", "@apollo/server"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :js_astro => {:framework => "Astro", :language => "JavaScript", :similar => ["astro", "js-astro", "js_astro"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_cli => {:framework => "CLI (parseArgs / commander / yargs / cac / meow / minimist / citty / arg / command-line-args / getopts)", :language => "JavaScript", :similar => ["js-cli", "js_cli", "commander", "yargs", "cac", "meow", "minimist", "oclif", "clipanion", "sade", "citty", "arg", "command-line-args", "getopts"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :js_elysia => {:framework => "Elysia", :language => "JavaScript", :similar => ["elysia", "js-elysia", "js_elysia", "bun-elysia"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_express => {:framework => "Express", :language => "JavaScript", :similar => ["express", "js-express", "js_express"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_fastify => {:framework => "Fastify", :language => "JavaScript", :similar => ["fastify", "js-fastify"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_feathers => {:framework => "Feathers", :language => "JavaScript", :similar => ["feathers", "feathersjs", "feathers.js", "js-feathers", "js_feathers", "@feathersjs/feathers"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_fresh => {:framework => "Fresh", :language => "JavaScript", :similar => ["fresh", "js-fresh", "js_fresh", "deno-fresh"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_graphql_yoga => {:framework => "GraphQL Yoga", :language => "JavaScript", :similar => ["graphql-yoga", "graphql_yoga", "yoga", "js-graphql-yoga", "@graphql-yoga/node"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => true}}, :js_hapi => {:framework => "Hapi", :language => "JavaScript", :similar => ["hapi", "js-hapi", "js_hapi", "@hapi/hapi"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_hono => {:framework => "Hono", :language => "JavaScript", :similar => ["hono", "js-hono"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_http => {:framework => "Node.js http/https", :language => "JavaScript", :similar => ["js-http", "js_http", "node-http", "node-https", "nodejs-http", "nodejs-https", "node:http", "node:https"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}}, :js_koa => {:framework => "Koa", :language => "JavaScript", :similar => ["koa", "js-koa"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_nestjs => {:framework => "NestJS", :language => "JavaScript", :similar => ["nestjs", "nest", "js-nestjs", "js_nestjs"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_nextjs => {:framework => "Next.js", :language => "JavaScript", :similar => ["nextjs", "next.js", "next", "js-nextjs", "js_nextjs"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_nitro => {:framework => "Nitro", :language => "JavaScript", :similar => ["nitro", "nitrojs", "nitropack", "js-nitro", "js_nitro"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_nuxtjs => {:framework => "NuxtJS", :language => "JavaScript", :similar => ["nuxtjs", "nuxt", "js-nuxtjs", "js_nuxtjs"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_oak => {:framework => "Oak", :language => "JavaScript", :similar => ["oak", "deno-oak", "js-oak", "@oak/oak"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_remix => {:framework => "Remix", :language => "JavaScript", :similar => ["remix", "remix-run", "js-remix", "js_remix"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :js_restify => {:framework => "Restify", :language => "JavaScript", :similar => ["restify", "js-restify"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :js_sails => {:framework => "Sails.js", :language => "JavaScript", :similar => ["sails", "sailsjs", "js-sails"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => false, :guards => false}}, :js_socketio => {:framework => "Socket.IO", :language => "JavaScript", :similar => ["socket.io", "socketio", "socket-io", "js-socketio", "js_socketio"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => true}}, :js_sveltekit => {:framework => "SvelteKit", :language => "JavaScript", :similar => ["sveltekit", "svelte-kit", "js-sveltekit", "js_sveltekit"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :kotlin_cli => {:framework => "CLI (clikt / kotlinx-cli / picocli)", :language => "Kotlin", :similar => ["kotlin-cli", "kotlin_cli", "clikt", "kotlinx-cli", "picocli"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :kotlin_http4k => {:framework => "http4k", :language => "Kotlin", :similar => ["http4k", "kotlin-http4k", "kotlin_http4k"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :kotlin_ktor => {:framework => "Ktor", :language => "Kotlin", :similar => ["ktor", "kotlin-ktor", "kotlin_ktor"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :kotlin_spring => {:framework => "Spring", :language => "Kotlin", :similar => ["spring", "kotlin-spring", "kotlin_spring"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :lua_cli => {:framework => "CLI (argparse / lua_cliargs)", :language => "Lua", :similar => ["lua-cli", "lua_cli", "argparse", "cliargs", "lua_cliargs"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :lua_lapis => {:framework => "Lapis", :language => "Lua", :similar => ["lapis", "lua-lapis", "lua_lapis"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :lua_lor => {:framework => "lor", :language => "Lua", :similar => ["lor", "lua-lor", "lua_lor"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :android => {:format => ["XML"], :similar => ["android", "android-manifest", "androidmanifest", "android_manifest"], :supported => {:endpoint => true, :method => false, :params => {:query => true, :path => true, :body => false, :header => false, :cookie => false}}, :context => {:callee => true, :guards => true}}, :ios => {:format => ["PLIST"], :similar => ["ios", "info-plist", "infoplist", "info_plist", "entitlements"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}, :context => {:callee => true, :guards => true}}, :well_known_applinks => {:format => ["JSON"], :similar => ["well_known_applinks", "assetlinks", "apple-app-site-association", "aasa", "applinks"], :supported => {:endpoint => true, :method => false, :params => {:query => true, :path => false, :body => false, :header => false, :cookie => false}}}, :perl_catalyst => {:framework => "Catalyst", :language => "Perl", :similar => ["catalyst", "perl-catalyst", "perl_catalyst", "catalyst-runtime", "catalyst_runtime"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :perl_cli => {:framework => "CLI (Getopt::Long / Getopt::Std / App::Cmd / Getopt::Long::Descriptive / MooX::Options)", :language => "Perl", :similar => ["perl-cli", "perl_cli", "getopt::long", "getopt::std", "app::cmd", "getopt::long::descriptive", "moox::options"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :perl_dancer2 => {:framework => "Dancer2", :language => "Perl", :similar => ["dancer2", "perl-dancer2", "perl_dancer2"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :perl_mojolicious => {:framework => "Mojolicious", :language => "Perl", :similar => ["mojolicious", "perl-mojolicious", "perl_mojolicious", "mojo"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :php_cakephp => {:framework => "CakePHP", :language => "PHP", :similar => ["cakephp", "php-cakephp", "php_cakephp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_cli => {:framework => "CLI (symfony/console / getopt / artisan / wp-cli / robo)", :language => "PHP", :similar => ["php-cli", "php_cli", "symfony-console", "getopt", "climate", "minicli", "artisan", "illuminate-console", "wp-cli", "robo"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :php_codeigniter => {:framework => "CodeIgniter", :language => "PHP", :similar => ["codeigniter", "codeigniter4", "php-codeigniter", "php_codeigniter"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_drupal => {:supersedes => ["php_symfony"], :framework => "Drupal", :language => "PHP", :similar => ["drupal", "php-drupal", "php_drupal", "drupal/core"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :php_hyperf => {:framework => "Hyperf", :language => "PHP", :similar => ["hyperf", "php-hyperf", "php_hyperf", "hyperf/hyperf"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :php_laminas => {:framework => "Laminas", :language => "PHP", :similar => ["laminas", "zend", "zend-framework", "zendframework", "php-laminas", "php_laminas", "laminas/laminas-mvc", "mezzio", "mezzio/mezzio"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_laravel => {:framework => "Laravel", :language => "PHP", :similar => ["laravel", "php-laravel", "php_laravel"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_lumen => {:supersedes => ["php_laravel"], :framework => "Lumen", :language => "PHP", :similar => ["lumen", "php-lumen", "php_lumen", "laravel/lumen", "laravel-lumen", "lumen-framework"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :php_magento => {:supersedes => ["php_symfony"], :framework => "Magento", :language => "PHP", :similar => ["magento", "magento2", "php-magento", "php_magento", "magento/product-community-edition"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :php_mautic => {:framework => "Mautic", :language => "PHP", :similar => ["mautic", "php-mautic", "php_mautic", "mautic/core-lib"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :php_phalcon => {:framework => "Phalcon", :language => "PHP", :similar => ["phalcon", "cphalcon", "phalcon/cphalcon", "phalcon-framework", "php-phalcon", "php_phalcon", "ext-phalcon"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_pure => {:framework => "Pure", :language => "PHP", :similar => ["php", "php-pure", "php_pure"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_slim => {:framework => "Slim", :language => "PHP", :similar => ["slim", "slimframework", "slim-framework", "php-slim", "php_slim", "slim/slim"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_symfony => {:framework => "Symfony", :language => "PHP", :similar => ["symfony", "php-symfony", "php_symfony"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_thinkphp => {:framework => "ThinkPHP", :language => "PHP", :similar => ["thinkphp", "php-thinkphp", "php_thinkphp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :php_wordpress => {:framework => "WordPress", :language => "PHP", :similar => ["wordpress", "wp", "php-wordpress", "php_wordpress"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :php_yii => {:framework => "Yii2", :language => "PHP", :similar => ["yii", "yii2", "php-yii", "php_yii", "yiisoft", "yiisoft/yii2"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :python_aiohttp => {:framework => "aiohttp", :language => "Python", :similar => ["aiohttp", "python-aiohttp", "python_aiohttp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :python_bottle => {:framework => "Bottle", :language => "Python", :similar => ["bottle", "bottlepy", "python-bottle", "python_bottle"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_cherrypy => {:framework => "CherryPy", :language => "Python", :similar => ["cherrypy", "cherry-py", "python-cherrypy", "python_cherrypy"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_cli => {:framework => "CLI (argparse / click / typer / fire / docopt / getopt / absl / cleo)", :language => "Python", :similar => ["python-cli", "python_cli", "argparse", "click", "typer", "fire", "docopt", "absl", "abseil", "cleo"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :python_django => {:framework => "Django", :language => "Python", :similar => ["django", "python-django", "python_django"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :python_django_ninja => {:framework => "Django Ninja", :language => "Python", :similar => ["django-ninja", "django_ninja", "python-django-ninja", "python_django_ninja", "ninja"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_falcon => {:framework => "Falcon", :language => "Python", :similar => ["falcon", "falconframework", "python-falcon", "python_falcon"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_fastapi => {:framework => "FastAPI", :language => "Python", :similar => ["fastapi", "python-fastapi", "python_fastapi"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :python_flask => {:framework => "Flask", :language => "Python", :similar => ["flask", "python-flask", "python_flask"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :python_http_server => {:framework => "http.server", :language => "Python", :similar => ["http.server", "python-http-server", "python_http_server", "BaseHTTPRequestHandler", "HTTPServer", "SimpleHTTPRequestHandler", "wsgiref.simple_server"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_litestar => {:framework => "Litestar", :language => "Python", :similar => ["litestar", "starlite", "python-litestar", "python_litestar"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :python_masonite => {:framework => "Masonite", :language => "Python", :similar => ["masonite", "python-masonite", "python_masonite"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :python_pyramid => {:framework => "Pyramid", :language => "Python", :similar => ["pyramid", "python-pyramid", "python_pyramid"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_quart => {:framework => "Quart", :language => "Python", :similar => ["quart", "python-quart", "python_quart"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :python_robyn => {:framework => "Robyn", :language => "Python", :similar => ["robyn", "python-robyn", "python_robyn"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => true}, :context => {:callee => true}}, :python_sanic => {:framework => "Sanic", :language => "Python", :similar => ["sanic", "python-sanic", "python_sanic"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :python_starlette => {:framework => "Starlette", :language => "Python", :similar => ["starlette", "python-starlette", "python_starlette"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :python_tornado => {:framework => "Tornado", :language => "Python", :similar => ["tornado", "python-tornado", "python_tornado"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => true}, :context => {:callee => true, :guards => true}}, :r_plumber => {:framework => "Plumber", :language => "R", :similar => ["plumber", "r-plumber", "r_plumber"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_actioncable => {:framework => "Action Cable", :language => "Ruby", :similar => ["actioncable", "action-cable", "action_cable", "rails-actioncable", "ruby-actioncable", "ruby_actioncable"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => true}}, :ruby_cli => {:framework => "CLI (OptionParser / Thor / GLI / Slop / TTY::Option / Optimist / Clamp / dry-cli)", :language => "Ruby", :similar => ["ruby-cli", "ruby_cli", "thor", "optparse", "optionparser", "gli", "slop", "tty-option", "optimist", "clamp", "dry-cli"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :ruby_grape => {:framework => "Grape", :language => "Ruby", :similar => ["grape", "ruby-grape", "ruby_grape"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_hanami => {:framework => "Hanami", :language => "Ruby", :similar => ["hanami", "ruby-hanami", "ruby_hanami"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_padrino => {:supersedes => ["ruby_sinatra"], :framework => "Padrino", :language => "Ruby", :similar => ["padrino", "ruby-padrino", "ruby_padrino", "padrino-core", "padrino-framework"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_rails => {:framework => "Rails", :language => "Ruby", :similar => ["rails", "ruby-rails", "ruby_rails"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_roda => {:framework => "Roda", :language => "Ruby", :similar => ["roda", "ruby-roda", "ruby_roda"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_sinatra => {:framework => "Sinatra", :language => "Ruby", :similar => ["sinatra", "ruby-sinatra", "ruby_sinatra"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :ruby_webrick => {:framework => "WEBrick", :language => "Ruby", :similar => ["webrick", "ruby-webrick", "ruby_webrick", "WEBrick::HTTPServer", "mount_proc", "AbstractServlet"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_actix_web => {:framework => "Actix Web", :language => "Rust", :similar => ["actix-web", "actix_web", "rust-actix-web", "rust_actix_web"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_axum => {:framework => "Axum", :language => "Rust", :similar => ["axum", "rust-axum", "rust_axum"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_cli => {:framework => "CLI (std::env / clap / structopt / argh / getopts)", :language => "Rust", :similar => ["rust-cli", "rust_cli", "clap", "structopt", "argh", "bpaf", "pico-args", "getopts"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :rust_gotham => {:framework => "Gotham", :language => "Rust", :similar => ["gotham", "rust-gotham", "rust_gotham"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_loco => {:framework => "Loco", :language => "Rust", :similar => ["loco", "loco-rs", "rust-loco", "rust_loco"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_poem => {:framework => "Poem", :language => "Rust", :similar => ["poem", "poem-openapi", "rust-poem", "rust_poem"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :rust_rocket => {:framework => "Rocket", :language => "Rust", :similar => ["rocket", "rust-rocket", "rust_rocket"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_rwf => {:framework => "RWF", :language => "Rust", :similar => ["rwf", "rust-rwf", "rust_rwf"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_salvo => {:framework => "Salvo", :language => "Rust", :similar => ["salvo", "salvo-rs", "rust-salvo", "rust_salvo"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :rust_tide => {:framework => "Tide", :language => "Rust", :similar => ["tide", "rust-tide", "rust_tide"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :rust_warp => {:framework => "Warp", :language => "Rust", :similar => ["warp", "rust-warp", "rust_warp"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_akka => {:framework => "Akka HTTP", :language => "Scala", :similar => ["akka", "akka-http", "akka_http", "scala-akka", "scala_akka"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_cli => {:framework => "CLI (scopt / decline / mainargs / scallop / twitter-util)", :language => "Scala", :similar => ["scala-cli", "scala_cli", "scopt", "decline", "mainargs", "scallop", "twitter-util", "util-app"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :scala_http4s => {:framework => "http4s", :language => "Scala", :similar => ["http4s", "scala-http4s", "scala_http4s"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_play => {:framework => "Play Framework", :language => "Scala", :similar => ["play", "play-framework", "scala-play", "scala_play"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_scalatra => {:framework => "Scalatra", :language => "Scala", :similar => ["scalatra", "scala-scalatra", "scala_scalatra"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_tapir => {:framework => "Tapir", :language => "Scala", :similar => ["tapir", "sttp-tapir", "sttp_tapir", "scala-tapir", "scala_tapir"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :scala_zio_http => {:framework => "ZIO HTTP", :language => "Scala", :similar => ["zio", "zio-http", "zio_http", "scala-zio-http", "scala_zio_http"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :apache_httpd => {:format => ["CONF"], :similar => ["apache", "apache httpd", "httpd", "htaccess", "apache2"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :apisix => {:format => ["JSON", "YAML"], :similar => ["apisix", "apache apisix", "apache-apisix", "apache_apisix"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => true, :cookie => false}}}, :appwrite => {:format => ["JSON"], :similar => ["appwrite", "appwrite-config", "appwrite_config", "appwrite.json"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :asyncapi => {:format => ["JSON", "YAML"], :similar => ["asyncapi", "async-api", "async_api"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}}}, :aws_cdk => {:format => ["TS", "JS", "PY"], :similar => ["aws cdk", "aws-cdk-lib", "@aws-cdk", "cdk", "aws_cdk"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :aws_cloudformation => {:format => ["YAML", "JSON"], :similar => ["aws cloudformation", "aws sam", "cloudformation", "sam", "template.yaml", "template.yml", "aws::serverless::function", "aws::apigateway::resource"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :azure_functions => {:format => ["JSON"], :similar => ["azure functions", "azure-functions", "function.json", "azure"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :bruno => {:format => ["BRU"], :similar => ["bruno", "bru"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :burp => {:format => ["XML"], :similar => ["burp", "burpsuite", "burp-suite", "burp_suite", "burp-sitemap"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}}}, :caddy => {:format => ["CADDYFILE", "JSON"], :similar => ["caddy", "caddyfile", "caddy.json"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :caido => {:format => ["JSON"], :similar => ["caido", "caido-export", "caido_export"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => true}}}, :cloudflare_wrangler => {:format => ["TOML", "JSON"], :similar => ["cloudflare", "cloudflare workers", "wrangler", "wrangler.toml", "wrangler.json", "wrangler.jsonc"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :directus => {:format => ["YAML", "JSON"], :similar => ["directus", "directus-snapshot", "directus_snapshot", "directus schema"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}}}, :envoy => {:format => ["JSON", "YAML"], :similar => ["envoy", "envoy-proxy", "envoy_proxy", "istio-envoy"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :graphql_sdl => {:format => ["GRAPHQL_SDL"], :similar => ["graphql_sdl", "graphql-sdl", "graphql_schema", ".graphqls", "graphql", ".graphql"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}}}, :grpc => {:format => ["PROTOBUF"], :similar => ["grpc", "protobuf", "proto", "grpc-gateway"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}}}, :har => {:format => ["JSON"], :similar => ["har"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :hasura => {:format => ["YAML"], :similar => ["hasura", "hasura-metadata", "hasura_metadata", "hasura graphql engine"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => true, :header => false, :cookie => false}}}, :http_file => {:format => ["HTTP", "REST"], :similar => ["http_file", "rest-client", "rest_client", "http-client", "http_client", ".http", ".rest"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :insomnia => {:format => ["JSON", "YAML"], :similar => ["insomnia", "insomnia collection", "insomnia export"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :istio_virtualservice => {:format => ["YAML"], :similar => ["istio", "virtualservice", "networking.istio.io"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :k8s_gateway_api => {:format => ["YAML"], :similar => ["kubernetes gateway api", "k8s gateway api", "httproute", "gateway.networking.k8s.io"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :k8s_ingress => {:format => ["YAML"], :similar => ["kubernetes ingress", "k8s ingress", "kubernetes.io/ingress", "networking.k8s.io/v1"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :kamal => {:format => ["YAML"], :similar => ["kamal", "kamal deploy", "kamal-deploy", "kamal proxy", "deploy.yml"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :kong => {:format => ["YAML"], :similar => ["kong", "kong declarative", "deck", "kong ingress controller", "kic"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :mitmproxy => {:format => ["TNETSTRING"], :similar => ["mitmproxy", "mitm", "mitmdump", "flow", "flows"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :netlify => {:format => ["TXT", "TOML"], :similar => ["netlify", "_redirects", "netlify.toml"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :nginx => {:format => ["CONF"], :similar => ["nginx", "nginx.conf", "sites-enabled", "conf.d"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :oas2 => {:format => ["JSON", "YAML"], :similar => ["oas 2.0", "oas_2_0", "swagger 2.0", "swagger_2_0", "swagger"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :oas3 => {:format => ["JSON", "YAML"], :similar => ["oas 3.0", "oas_3_0"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :odata => {:format => ["XML"], :similar => ["odata", "edmx", "csdl"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}}}, :openrpc => {:format => ["JSON"], :similar => ["openrpc", "open-rpc", "open_rpc", "jsonrpc", "json-rpc", "json_rpc"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}}}, :payload_cms => {:format => ["TS", "JS"], :similar => ["payload", "payloadcms", "payload-cms", "payload_cms", "payload cms"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}}}, :postman => {:format => ["JSON"], :similar => ["postman", "postman collection"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :raml => {:format => ["YAML"], :similar => ["raml"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :serverless_framework => {:format => ["YAML", "JSON"], :similar => ["serverless framework", "serverless.yml", "serverless.yaml", "serverless.json", "aws lambda"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :smithy => {:format => ["SMITHY"], :similar => ["smithy", "smithy-idl"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}}}, :strapi => {:format => ["JSON", "TS", "JS"], :similar => ["strapi", "strapi5", "strapi-cms", "strapi_cms", "strapi v4", "strapi v5"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => false, :cookie => false}}}, :supabase => {:format => ["SQL"], :similar => ["supabase", "postgrest", "supabase-migrations", "supabase_migrations", "pgrst"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => true, :cookie => false}}}, :terraform => {:format => ["TF", "JSON"], :similar => ["terraform", "tf", "hcl", "opentofu", "tofu", "aws_api_gateway", "aws_apigatewayv2", "aws_apigatewayv2_route"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :traefik => {:format => ["YAML", "TOML"], :similar => ["traefik", "traefik dynamic config", "ingressroute"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :typespec => {:format => ["TYPESPEC"], :similar => ["typespec", "tsp", "cadl"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}}}, :vercel => {:format => ["JSON"], :similar => ["vercel", "vercel.json", "now.json"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}}}, :wsdl => {:format => ["XML"], :similar => ["wsdl", "soap"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => true, :cookie => false}}}, :zap_sites_tree => {:format => ["YAML"], :similar => ["zap_sites_tree", "zap-sites-tree", "zap-sitemap", "zap_sitemap", "zaproxy", "owasp-zap"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => true, :header => false, :cookie => false}}}, :swift_cli => {:framework => "CLI (swift-argument-parser / SwiftCLI)", :language => "Swift", :similar => ["swift-cli", "swift_cli", "argumentparser", "swift-argument-parser", "swiftcli"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :swift_hummingbird => {:framework => "Hummingbird", :language => "Swift", :similar => ["hummingbird", "swift-hummingbird", "swift_hummingbird"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :swift_kitura => {:framework => "Kitura", :language => "Swift", :similar => ["kitura", "swift-kitura", "swift_kitura"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :swift_vapor => {:framework => "Vapor", :language => "Swift", :similar => ["vapor", "swift-vapor", "swift_vapor"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ts_loopback => {:framework => "LoopBack", :language => "TypeScript", :similar => ["loopback", "loopback4", "loopback-next", "lb4", "ts-loopback", "ts_loopback"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true, :guards => true}}, :ts_nestjs => {:framework => "NestJS", :language => "TypeScript", :similar => ["typescript-nestjs", "ts-nestjs", "ts_nestjs"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true, :guards => true}}, :ts_tanstack_router => {:framework => "TanStack Router", :language => "TypeScript", :similar => ["tanstack-router", "tanstack_router", "ts-tanstack-router", "ts_tanstack_router", "@tanstack/router", "@tanstack/react-router"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => true, :header => true, :cookie => true}, :static_path => true, :websocket => false}, :context => {:callee => true}}, :ts_trpc => {:framework => "tRPC", :language => "TypeScript", :similar => ["trpc", "ts-trpc", "ts_trpc", "@trpc/server", "@trpc/next"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => false, :body => true, :header => false, :cookie => false}, :static_path => true, :websocket => true}, :context => {:callee => true}}, :zig_cli => {:framework => "CLI (zig-cli / zig-clap / std.process / yazap / zig-args)", :language => "Zig", :similar => ["zig-cli", "zig_cli", "clap", "zig-clap", "yazap", "zig-args"], :supported => {:endpoint => true, :method => false, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}}, :zig_http => {:framework => "std.http.Server", :language => "Zig", :similar => ["zig-http", "zig_http", "std-http-server", "std.http.server"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :zig_httpz => {:framework => "httpz", :language => "Zig", :similar => ["httpz", "http.zig", "http_zig", "zig-httpz", "zig_httpz"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :zig_jetzig => {:supersedes => ["zig_httpz"], :framework => "Jetzig", :language => "Zig", :similar => ["jetzig", "zig-jetzig", "zig_jetzig"], :supported => {:endpoint => true, :method => true, :params => {:query => true, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :zig_tokamak => {:supersedes => ["zig_httpz"], :framework => "Tokamak", :language => "Zig", :similar => ["tokamak", "zig-tokamak", "zig_tokamak"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => true, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}, :zig_zap => {:framework => "Zap", :language => "Zig", :similar => ["zap", "zigzap", "zig-zap", "zig_zap"], :supported => {:endpoint => true, :method => true, :params => {:query => false, :path => false, :body => false, :header => false, :cookie => false}, :static_path => false, :websocket => false}, :context => {:callee => true}}}

Class Method Summary

Class Method Detail

def self.context_supported?(tech : String, feature : String) : Bool #

[View source]
def self.language_tech?(tech : String) : Bool #

[View source]
def self.similar_to_tech(word) #

[View source]
def self.supersedes(tech : String) : Array(String) #

Techs that tech displaces when both are detected. Empty for the 235 entries that displace nothing.


[View source]
def self.techs #

[View source]