zuplo 6.67.32 → 6.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. package/README.md +9 -0
  2. package/docs/_index.md +44 -0
  3. package/docs/ai-gateway/apps.mdx +28 -0
  4. package/docs/ai-gateway/custom-providers.mdx +54 -0
  5. package/docs/ai-gateway/getting-started.mdx +224 -0
  6. package/docs/ai-gateway/guardrails.mdx +65 -0
  7. package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
  8. package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
  9. package/docs/ai-gateway/integrations/codex.mdx +78 -0
  10. package/docs/ai-gateway/integrations/goose.mdx +104 -0
  11. package/docs/ai-gateway/integrations/langchain.mdx +66 -0
  12. package/docs/ai-gateway/integrations/openai.mdx +99 -0
  13. package/docs/ai-gateway/introduction.mdx +85 -0
  14. package/docs/ai-gateway/managing-apps.mdx +46 -0
  15. package/docs/ai-gateway/managing-providers.mdx +66 -0
  16. package/docs/ai-gateway/managing-teams.mdx +63 -0
  17. package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
  18. package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
  19. package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
  20. package/docs/ai-gateway/providers.mdx +32 -0
  21. package/docs/ai-gateway/teams.mdx +38 -0
  22. package/docs/ai-gateway/universal-api.mdx +43 -0
  23. package/docs/ai-gateway/usage-limits.mdx +89 -0
  24. package/docs/api-management/introduction.md +127 -0
  25. package/docs/articles/accounts/audit-logs.mdx +227 -0
  26. package/docs/articles/accounts/billing.mdx +25 -0
  27. package/docs/articles/accounts/default-api-key.mdx +30 -0
  28. package/docs/articles/accounts/delete-account.mdx +36 -0
  29. package/docs/articles/accounts/enterprise-sso.mdx +116 -0
  30. package/docs/articles/accounts/managing-account-members.mdx +45 -0
  31. package/docs/articles/accounts/managing-project-members.mdx +37 -0
  32. package/docs/articles/accounts/members-and-roles.mdx +21 -0
  33. package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
  34. package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
  35. package/docs/articles/add-api-to-backstage.mdx +216 -0
  36. package/docs/articles/advanced-path-matching.mdx +139 -0
  37. package/docs/articles/api-key-administration.mdx +47 -0
  38. package/docs/articles/api-key-api.mdx +220 -0
  39. package/docs/articles/api-key-authentication.mdx +195 -0
  40. package/docs/articles/api-key-buckets.mdx +61 -0
  41. package/docs/articles/api-key-end-users.mdx +52 -0
  42. package/docs/articles/api-key-leak-detection.mdx +75 -0
  43. package/docs/articles/api-key-management.mdx +100 -0
  44. package/docs/articles/api-key-react-component.mdx +90 -0
  45. package/docs/articles/api-key-service-limits.mdx +14 -0
  46. package/docs/articles/archiving-requests-to-storage.mdx +119 -0
  47. package/docs/articles/branch-based-deployments.mdx +184 -0
  48. package/docs/articles/bypass-policy-for-testing.mdx +117 -0
  49. package/docs/articles/check-ip-address.mdx +17 -0
  50. package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
  51. package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
  52. package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
  53. package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
  54. package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
  55. package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
  56. package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
  57. package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
  58. package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
  59. package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
  60. package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
  61. package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
  62. package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
  63. package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
  64. package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
  65. package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
  66. package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
  67. package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
  68. package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
  69. package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
  70. package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
  71. package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
  72. package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
  73. package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
  74. package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
  75. package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
  76. package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
  77. package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
  78. package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
  79. package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
  80. package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
  81. package/docs/articles/composite-policy-reference.mdx +284 -0
  82. package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
  83. package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
  84. package/docs/articles/convert-urls-to-openapi.mdx +62 -0
  85. package/docs/articles/cors.mdx +447 -0
  86. package/docs/articles/custom-audit-log-policy.mdx +95 -0
  87. package/docs/articles/custom-ci-cd-azure.mdx +81 -0
  88. package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
  89. package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
  90. package/docs/articles/custom-ci-cd-github.mdx +99 -0
  91. package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
  92. package/docs/articles/custom-ci-cd.mdx +82 -0
  93. package/docs/articles/custom-code-patterns.md +418 -0
  94. package/docs/articles/custom-domains.mdx +258 -0
  95. package/docs/articles/custom-logging-example.mdx +139 -0
  96. package/docs/articles/ddos-protection.mdx +138 -0
  97. package/docs/articles/development-options.mdx +49 -0
  98. package/docs/articles/environment-variables.mdx +134 -0
  99. package/docs/articles/environments.mdx +143 -0
  100. package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
  101. package/docs/articles/github-deployment-testing.mdx +101 -0
  102. package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
  103. package/docs/articles/graphql-security.mdx +180 -0
  104. package/docs/articles/handling-form-data.mdx +61 -0
  105. package/docs/articles/health-checks.mdx +109 -0
  106. package/docs/articles/hosting-options.mdx +70 -0
  107. package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
  108. package/docs/articles/limits.mdx +98 -0
  109. package/docs/articles/local-development-debugging.mdx +44 -0
  110. package/docs/articles/local-development-env-variables.mdx +23 -0
  111. package/docs/articles/local-development-installing-packages.mdx +23 -0
  112. package/docs/articles/local-development-routes-designer.mdx +27 -0
  113. package/docs/articles/local-development-services.mdx +40 -0
  114. package/docs/articles/local-development-troubleshooting.mdx +56 -0
  115. package/docs/articles/local-development.mdx +81 -0
  116. package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
  117. package/docs/articles/log-plugin-datadog.mdx +84 -0
  118. package/docs/articles/log-plugin-dynatrace.mdx +75 -0
  119. package/docs/articles/log-plugin-gcp.mdx +75 -0
  120. package/docs/articles/log-plugin-loki.mdx +136 -0
  121. package/docs/articles/log-plugin-new-relic.mdx +84 -0
  122. package/docs/articles/log-plugin-splunk.mdx +104 -0
  123. package/docs/articles/log-plugin-sumo.mdx +73 -0
  124. package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
  125. package/docs/articles/log-request-response-data.mdx +398 -0
  126. package/docs/articles/logging.mdx +115 -0
  127. package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
  128. package/docs/articles/mcp-quickstart.mdx +135 -0
  129. package/docs/articles/metrics-plugins.mdx +371 -0
  130. package/docs/articles/migrate-from-apigee.md +408 -0
  131. package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
  132. package/docs/articles/migrate-from-azure-apim.md +292 -0
  133. package/docs/articles/migrate-from-kong.md +300 -0
  134. package/docs/articles/migration-overview.md +81 -0
  135. package/docs/articles/monetization/api-access.mdx +69 -0
  136. package/docs/articles/monetization/billing-models.md +520 -0
  137. package/docs/articles/monetization/developer-portal.md +167 -0
  138. package/docs/articles/monetization/features.mdx +98 -0
  139. package/docs/articles/monetization/index.mdx +113 -0
  140. package/docs/articles/monetization/meters.mdx +135 -0
  141. package/docs/articles/monetization/monetization-policy.md +314 -0
  142. package/docs/articles/monetization/plan-examples.mdx +366 -0
  143. package/docs/articles/monetization/plans.mdx +266 -0
  144. package/docs/articles/monetization/pricing-models.mdx +225 -0
  145. package/docs/articles/monetization/private-plans.md +154 -0
  146. package/docs/articles/monetization/quickstart.md +355 -0
  147. package/docs/articles/monetization/rate-cards.mdx +171 -0
  148. package/docs/articles/monetization/stripe-integration.md +195 -0
  149. package/docs/articles/monetization/subscription-lifecycle.md +298 -0
  150. package/docs/articles/monetization/tax-collection.md +166 -0
  151. package/docs/articles/monetization/troubleshooting.md +272 -0
  152. package/docs/articles/monetization-custom.mdx +71 -0
  153. package/docs/articles/monetization-integrations.mdx +104 -0
  154. package/docs/articles/monitoring-your-gateway.mdx +53 -0
  155. package/docs/articles/monorepo-deployment.mdx +350 -0
  156. package/docs/articles/multiple-auth-policies.mdx +81 -0
  157. package/docs/articles/non-standard-ports.mdx +30 -0
  158. package/docs/articles/oauth-authentication.mdx +54 -0
  159. package/docs/articles/openapi-server-urls.mdx +60 -0
  160. package/docs/articles/openapi.mdx +130 -0
  161. package/docs/articles/opentelemetry.mdx +250 -0
  162. package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
  163. package/docs/articles/performance-testing.mdx +304 -0
  164. package/docs/articles/plugin-akamai-api-security.mdx +76 -0
  165. package/docs/articles/plugin-azure-blob.mdx +73 -0
  166. package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
  167. package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
  168. package/docs/articles/policies.mdx +33 -0
  169. package/docs/articles/rename-or-move-project.mdx +39 -0
  170. package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
  171. package/docs/articles/routing.mdx +193 -0
  172. package/docs/articles/s3-signed-url-uploads.mdx +521 -0
  173. package/docs/articles/secure-tunnel.mdx +84 -0
  174. package/docs/articles/securing-backend-mtls.mdx +268 -0
  175. package/docs/articles/securing-your-backend.mdx +148 -0
  176. package/docs/articles/security.mdx +105 -0
  177. package/docs/articles/sharing-code-across-projects.mdx +412 -0
  178. package/docs/articles/source-control-setup-azure.mdx +13 -0
  179. package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
  180. package/docs/articles/source-control-setup-github.mdx +172 -0
  181. package/docs/articles/source-control-setup-gitlab.mdx +12 -0
  182. package/docs/articles/source-control.mdx +80 -0
  183. package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
  184. package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
  185. package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
  186. package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
  187. package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
  188. package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
  189. package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
  190. package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
  191. package/docs/articles/support.mdx +144 -0
  192. package/docs/articles/terraform.mdx +114 -0
  193. package/docs/articles/testing-graphql.mdx +34 -0
  194. package/docs/articles/testing.mdx +522 -0
  195. package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
  196. package/docs/articles/troubleshooting.md +302 -0
  197. package/docs/articles/tsconfig.mdx +105 -0
  198. package/docs/articles/tunnel-setup.mdx +195 -0
  199. package/docs/articles/tunnel-troubleshooting.mdx +50 -0
  200. package/docs/articles/update-zup-in-github-action.mdx +110 -0
  201. package/docs/articles/use-openapi-extension-data.mdx +79 -0
  202. package/docs/articles/users/multifactor-authentication.mdx +64 -0
  203. package/docs/articles/users/profile.mdx +13 -0
  204. package/docs/articles/versioning-on-zuplo.mdx +89 -0
  205. package/docs/articles/waf-ddos-akamai.md +133 -0
  206. package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
  207. package/docs/articles/waf-ddos-fastly.mdx +251 -0
  208. package/docs/articles/waf-ddos.mdx +140 -0
  209. package/docs/articles/zuplo-waf.mdx +156 -0
  210. package/docs/ask.mdx +3 -0
  211. package/docs/cli/authentication.mdx +56 -0
  212. package/docs/cli/connectivity.mdx +38 -0
  213. package/docs/cli/create-zuplo-api.mdx +80 -0
  214. package/docs/cli/delete.mdx +79 -0
  215. package/docs/cli/deploy.mdx +156 -0
  216. package/docs/cli/deploy.partial.mdx +46 -0
  217. package/docs/cli/dev.mdx +115 -0
  218. package/docs/cli/docs.mdx +66 -0
  219. package/docs/cli/editor.mdx +50 -0
  220. package/docs/cli/global-options.mdx +19 -0
  221. package/docs/cli/init.mdx +74 -0
  222. package/docs/cli/link.mdx +74 -0
  223. package/docs/cli/list.mdx +55 -0
  224. package/docs/cli/mtls-certificate-create.mdx +94 -0
  225. package/docs/cli/mtls-certificate-delete.mdx +55 -0
  226. package/docs/cli/mtls-certificate-describe.mdx +55 -0
  227. package/docs/cli/mtls-certificate-disable.mdx +55 -0
  228. package/docs/cli/mtls-certificate-list.mdx +47 -0
  229. package/docs/cli/mtls-certificate-update.mdx +72 -0
  230. package/docs/cli/openapi-convert.mdx +111 -0
  231. package/docs/cli/openapi-merge.mdx +138 -0
  232. package/docs/cli/openapi-merge.partial.mdx +29 -0
  233. package/docs/cli/openapi-overlay.mdx +123 -0
  234. package/docs/cli/overview.mdx +78 -0
  235. package/docs/cli/project-create.mdx +43 -0
  236. package/docs/cli/source-migrate.mdx +18 -0
  237. package/docs/cli/source-upgrade.mdx +41 -0
  238. package/docs/cli/test.mdx +70 -0
  239. package/docs/cli/test.partial.mdx +7 -0
  240. package/docs/cli/tunnel-create.mdx +53 -0
  241. package/docs/cli/tunnel-create.partial.mdx +9 -0
  242. package/docs/cli/tunnel-delete.mdx +35 -0
  243. package/docs/cli/tunnel-delete.partial.mdx +9 -0
  244. package/docs/cli/tunnel-describe.mdx +45 -0
  245. package/docs/cli/tunnel-describe.partial.mdx +5 -0
  246. package/docs/cli/tunnel-list.mdx +35 -0
  247. package/docs/cli/tunnel-list.partial.mdx +9 -0
  248. package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
  249. package/docs/cli/tunnel-rotate-token.mdx +39 -0
  250. package/docs/cli/tunnel-services-describe.mdx +45 -0
  251. package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
  252. package/docs/cli/tunnel-services-update.mdx +48 -0
  253. package/docs/cli/variable-create.mdx +91 -0
  254. package/docs/cli/variable-create.partial.mdx +5 -0
  255. package/docs/cli/variable-update.mdx +75 -0
  256. package/docs/cli/variable-update.partial.mdx +5 -0
  257. package/docs/concepts/api-keys.md +146 -0
  258. package/docs/concepts/authentication.mdx +109 -0
  259. package/docs/concepts/how-zuplo-works.mdx +120 -0
  260. package/docs/concepts/project-structure.mdx +174 -0
  261. package/docs/concepts/rate-limiting.md +246 -0
  262. package/docs/concepts/request-lifecycle.mdx +56 -0
  263. package/docs/concepts/source-control-and-deployment.mdx +229 -0
  264. package/docs/conferences/conference-prize-terms.mdx +80 -0
  265. package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
  266. package/docs/dedicated/akamai/architecture.mdx +280 -0
  267. package/docs/dedicated/akamai/caching.mdx +212 -0
  268. package/docs/dedicated/akamai/cdn.mdx +156 -0
  269. package/docs/dedicated/architecture.mdx +208 -0
  270. package/docs/dedicated/custom-domains.mdx +31 -0
  271. package/docs/dedicated/federated-gateways.mdx +80 -0
  272. package/docs/dedicated/networking.mdx +69 -0
  273. package/docs/dedicated/overview.mdx +80 -0
  274. package/docs/dedicated/source-control.mdx +63 -0
  275. package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
  276. package/docs/dev-portal/introduction.mdx +65 -0
  277. package/docs/dev-portal/local-development.mdx +72 -0
  278. package/docs/dev-portal/migration.mdx +526 -0
  279. package/docs/dev-portal/node-modules.mdx +45 -0
  280. package/docs/dev-portal/updating.mdx +28 -0
  281. package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
  282. package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
  283. package/docs/dev-portal/zudoku/components/button.mdx +132 -0
  284. package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
  285. package/docs/dev-portal/zudoku/components/card.mdx +104 -0
  286. package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
  287. package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
  288. package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
  289. package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
  290. package/docs/dev-portal/zudoku/components/head.mdx +199 -0
  291. package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
  292. package/docs/dev-portal/zudoku/components/input.mdx +96 -0
  293. package/docs/dev-portal/zudoku/components/label.mdx +86 -0
  294. package/docs/dev-portal/zudoku/components/link.mdx +242 -0
  295. package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
  296. package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
  297. package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
  298. package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
  299. package/docs/dev-portal/zudoku/components/select.mdx +176 -0
  300. package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
  301. package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
  302. package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
  303. package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
  304. package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
  305. package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
  306. package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
  307. package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
  308. package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
  309. package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
  310. package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
  311. package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
  312. package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
  313. package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
  314. package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
  315. package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
  316. package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
  317. package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
  318. package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
  319. package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
  320. package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
  321. package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
  322. package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
  323. package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
  324. package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
  325. package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
  326. package/docs/dev-portal/zudoku/configuration/search.md +169 -0
  327. package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
  328. package/docs/dev-portal/zudoku/configuration/site.md +124 -0
  329. package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
  330. package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
  331. package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
  332. package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
  333. package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
  334. package/docs/dev-portal/zudoku/extending/events.md +124 -0
  335. package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
  336. package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
  337. package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
  338. package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
  339. package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
  340. package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
  341. package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
  342. package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
  343. package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
  344. package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
  345. package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
  346. package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
  347. package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
  348. package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
  349. package/docs/dev-portal/zudoku/plugins.md +5 -0
  350. package/docs/dev-portal/zudoku/writing.mdx +72 -0
  351. package/docs/errors/bad-request.mdx +39 -0
  352. package/docs/errors/build-error.mdx +45 -0
  353. package/docs/errors/fatal-project-error.mdx +39 -0
  354. package/docs/errors/gateway-timeout.mdx +33 -0
  355. package/docs/errors/get-head-body-error.mdx +41 -0
  356. package/docs/errors/main-mod-error.mdx +40 -0
  357. package/docs/errors/no-project-set.mdx +41 -0
  358. package/docs/errors/not-found.mdx +43 -0
  359. package/docs/errors/rate-limit-exceeded.mdx +31 -0
  360. package/docs/errors/schema-validation-failed.mdx +51 -0
  361. package/docs/errors/system-configuration-error.mdx +44 -0
  362. package/docs/errors/unauthorized.mdx +50 -0
  363. package/docs/errors/unknown-error.mdx +42 -0
  364. package/docs/errors.mdx +14 -0
  365. package/docs/guides/canary-routing-for-employees.mdx +385 -0
  366. package/docs/guides/geolocation-backend-routing.mdx +404 -0
  367. package/docs/guides/modify-openapi-paths.mdx +371 -0
  368. package/docs/guides/openapi-overlays.mdx +492 -0
  369. package/docs/guides/overview.mdx +12 -0
  370. package/docs/guides/user-based-backend-routing.mdx +437 -0
  371. package/docs/handlers/aws-lambda.mdx +201 -0
  372. package/docs/handlers/custom-handler.mdx +112 -0
  373. package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
  374. package/docs/handlers/mcp-server.mdx +730 -0
  375. package/docs/handlers/openapi.mdx +78 -0
  376. package/docs/handlers/redirect.mdx +115 -0
  377. package/docs/handlers/system-handlers.mdx +41 -0
  378. package/docs/handlers/url-forward.mdx +204 -0
  379. package/docs/handlers/url-rewrite.mdx +224 -0
  380. package/docs/handlers/websocket-handler.mdx +154 -0
  381. package/docs/home.mdx +6 -0
  382. package/docs/managed-edge/overview.md +78 -0
  383. package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
  384. package/docs/mcp-server/custom-tools.mdx +487 -0
  385. package/docs/mcp-server/graphql.mdx +241 -0
  386. package/docs/mcp-server/introduction.mdx +122 -0
  387. package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
  388. package/docs/mcp-server/prompts.mdx +283 -0
  389. package/docs/mcp-server/resources.mdx +288 -0
  390. package/docs/mcp-server/testing.mdx +53 -0
  391. package/docs/mcp-server/tools.mdx +306 -0
  392. package/docs/policies/_index.md +92 -0
  393. package/docs/policies/ab-test-inbound/intro.md +8 -0
  394. package/docs/policies/ab-test-inbound/policy.ts +14 -0
  395. package/docs/policies/ab-test-inbound/schema.json +27 -0
  396. package/docs/policies/ab-test-outbound/intro.md +8 -0
  397. package/docs/policies/ab-test-outbound/policy.ts +26 -0
  398. package/docs/policies/ab-test-outbound/schema.json +27 -0
  399. package/docs/policies/acl-policy-inbound/intro.md +5 -0
  400. package/docs/policies/acl-policy-inbound/policy.ts +32 -0
  401. package/docs/policies/acl-policy-inbound/schema.json +52 -0
  402. package/docs/policies/akamai-ai-firewall/schema.json +98 -0
  403. package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
  404. package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
  405. package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
  406. package/docs/policies/api-key-inbound/doc.md +77 -0
  407. package/docs/policies/api-key-inbound/intro.md +30 -0
  408. package/docs/policies/api-key-inbound/schema.json +84 -0
  409. package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
  410. package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
  411. package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
  412. package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
  413. package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
  414. package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
  415. package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
  416. package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
  417. package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
  418. package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
  419. package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
  420. package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
  421. package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
  422. package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
  423. package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
  424. package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
  425. package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
  426. package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
  427. package/docs/policies/audit-log-inbound/doc.md +78 -0
  428. package/docs/policies/audit-log-inbound/intro.md +10 -0
  429. package/docs/policies/audit-log-inbound/schema.json +81 -0
  430. package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
  431. package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
  432. package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
  433. package/docs/policies/authzen-inbound/doc.md +24 -0
  434. package/docs/policies/authzen-inbound/intro.md +31 -0
  435. package/docs/policies/authzen-inbound/schema.json +126 -0
  436. package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
  437. package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
  438. package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
  439. package/docs/policies/basic-auth-inbound/intro.md +9 -0
  440. package/docs/policies/basic-auth-inbound/schema.json +99 -0
  441. package/docs/policies/bot-detection-inbound/intro.md +4 -0
  442. package/docs/policies/bot-detection-inbound/schema.json +56 -0
  443. package/docs/policies/brownout-inbound/doc.md +55 -0
  444. package/docs/policies/brownout-inbound/intro.md +12 -0
  445. package/docs/policies/brownout-inbound/schema.json +115 -0
  446. package/docs/policies/caching-inbound/doc.md +209 -0
  447. package/docs/policies/caching-inbound/intro.md +23 -0
  448. package/docs/policies/caching-inbound/schema.json +98 -0
  449. package/docs/policies/change-method-inbound/schema.json +56 -0
  450. package/docs/policies/clear-headers-inbound/schema.json +59 -0
  451. package/docs/policies/clear-headers-outbound/schema.json +59 -0
  452. package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
  453. package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
  454. package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
  455. package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
  456. package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
  457. package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
  458. package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
  459. package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
  460. package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
  461. package/docs/policies/composite-inbound/doc.md +69 -0
  462. package/docs/policies/composite-inbound/intro.md +15 -0
  463. package/docs/policies/composite-inbound/schema.json +59 -0
  464. package/docs/policies/composite-outbound/intro.md +6 -0
  465. package/docs/policies/composite-outbound/schema.json +59 -0
  466. package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
  467. package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
  468. package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
  469. package/docs/policies/custom-code-inbound/doc.md +267 -0
  470. package/docs/policies/custom-code-inbound/intro.md +2 -0
  471. package/docs/policies/custom-code-inbound/schema.json +48 -0
  472. package/docs/policies/custom-code-outbound/doc.md +235 -0
  473. package/docs/policies/custom-code-outbound/intro.md +2 -0
  474. package/docs/policies/custom-code-outbound/schema.json +43 -0
  475. package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
  476. package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
  477. package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
  478. package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
  479. package/docs/policies/geo-filter-inbound/doc.md +33 -0
  480. package/docs/policies/geo-filter-inbound/schema.json +108 -0
  481. package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
  482. package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
  483. package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
  484. package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
  485. package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
  486. package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
  487. package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
  488. package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
  489. package/docs/policies/hmac-auth-inbound/doc.md +30 -0
  490. package/docs/policies/hmac-auth-inbound/intro.md +10 -0
  491. package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
  492. package/docs/policies/hmac-auth-inbound/schema.json +53 -0
  493. package/docs/policies/http-deprecation-outbound/doc.md +73 -0
  494. package/docs/policies/http-deprecation-outbound/schema.json +83 -0
  495. package/docs/policies/ip-restriction-inbound/intro.md +8 -0
  496. package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
  497. package/docs/policies/ip-restriction-inbound/schema.json +58 -0
  498. package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
  499. package/docs/policies/ldap-auth-inbound/schema.json +56 -0
  500. package/docs/policies/mock-api-inbound/schema.json +72 -0
  501. package/docs/policies/moesif-inbound/doc.md +44 -0
  502. package/docs/policies/moesif-inbound/intro.md +6 -0
  503. package/docs/policies/moesif-inbound/schema.json +68 -0
  504. package/docs/policies/monetization-inbound/doc.md +87 -0
  505. package/docs/policies/monetization-inbound/intro.md +6 -0
  506. package/docs/policies/monetization-inbound/schema.json +102 -0
  507. package/docs/policies/mtls-auth-inbound/intro.md +6 -0
  508. package/docs/policies/mtls-auth-inbound/schema.json +68 -0
  509. package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
  510. package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
  511. package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
  512. package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
  513. package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
  514. package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
  515. package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
  516. package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
  517. package/docs/policies/openfga-authz-inbound/doc.md +207 -0
  518. package/docs/policies/openfga-authz-inbound/intro.md +17 -0
  519. package/docs/policies/openfga-authz-inbound/schema.json +191 -0
  520. package/docs/policies/openmeter-inbound/doc.md +163 -0
  521. package/docs/policies/openmeter-inbound/intro.md +18 -0
  522. package/docs/policies/openmeter-inbound/schema.json +183 -0
  523. package/docs/policies/prompt-injection-outbound/doc.md +106 -0
  524. package/docs/policies/prompt-injection-outbound/intro.md +4 -0
  525. package/docs/policies/prompt-injection-outbound/schema.json +74 -0
  526. package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
  527. package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
  528. package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
  529. package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
  530. package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
  531. package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
  532. package/docs/policies/quota-inbound/doc.md +235 -0
  533. package/docs/policies/quota-inbound/intro.md +7 -0
  534. package/docs/policies/quota-inbound/schema.json +133 -0
  535. package/docs/policies/rate-limit-inbound/doc.md +78 -0
  536. package/docs/policies/rate-limit-inbound/intro.md +30 -0
  537. package/docs/policies/rate-limit-inbound/schema.json +134 -0
  538. package/docs/policies/rbac-policy-inbound/intro.md +3 -0
  539. package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
  540. package/docs/policies/rbac-policy-inbound/schema.json +52 -0
  541. package/docs/policies/readme-metrics-inbound/doc.md +1 -0
  542. package/docs/policies/readme-metrics-inbound/intro.md +3 -0
  543. package/docs/policies/readme-metrics-inbound/schema.json +84 -0
  544. package/docs/policies/remove-headers-inbound/schema.json +59 -0
  545. package/docs/policies/remove-headers-outbound/schema.json +59 -0
  546. package/docs/policies/remove-query-params-inbound/schema.json +59 -0
  547. package/docs/policies/replace-string-outbound/schema.json +69 -0
  548. package/docs/policies/request-size-limit-inbound/schema.json +60 -0
  549. package/docs/policies/request-validation-inbound/doc.md +72 -0
  550. package/docs/policies/request-validation-inbound/intro.md +24 -0
  551. package/docs/policies/request-validation-inbound/schema.json +98 -0
  552. package/docs/policies/require-origin-inbound/intro.md +12 -0
  553. package/docs/policies/require-origin-inbound/schema.json +65 -0
  554. package/docs/policies/secret-masking-outbound/doc.md +41 -0
  555. package/docs/policies/secret-masking-outbound/intro.md +13 -0
  556. package/docs/policies/secret-masking-outbound/schema.json +65 -0
  557. package/docs/policies/semantic-cache-inbound/doc.md +63 -0
  558. package/docs/policies/semantic-cache-inbound/intro.md +4 -0
  559. package/docs/policies/semantic-cache-inbound/schema.json +179 -0
  560. package/docs/policies/set-body-inbound/intro.md +7 -0
  561. package/docs/policies/set-body-inbound/schema.json +56 -0
  562. package/docs/policies/set-headers-inbound/doc.md +41 -0
  563. package/docs/policies/set-headers-inbound/intro.md +2 -0
  564. package/docs/policies/set-headers-inbound/schema.json +83 -0
  565. package/docs/policies/set-headers-outbound/schema.json +83 -0
  566. package/docs/policies/set-query-params-inbound/schema.json +83 -0
  567. package/docs/policies/set-status-outbound/schema.json +62 -0
  568. package/docs/policies/sleep-inbound/schema.json +56 -0
  569. package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
  570. package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
  571. package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
  572. package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
  573. package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
  574. package/docs/policies/transform-body-inbound/intro.md +8 -0
  575. package/docs/policies/transform-body-inbound/policy.ts +16 -0
  576. package/docs/policies/transform-body-inbound/schema.json +27 -0
  577. package/docs/policies/transform-body-outbound/intro.md +8 -0
  578. package/docs/policies/transform-body-outbound/policy.ts +19 -0
  579. package/docs/policies/transform-body-outbound/schema.json +27 -0
  580. package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
  581. package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
  582. package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
  583. package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
  584. package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
  585. package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
  586. package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
  587. package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
  588. package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
  589. package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
  590. package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
  591. package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
  592. package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
  593. package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
  594. package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
  595. package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
  596. package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
  597. package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
  598. package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
  599. package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
  600. package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
  601. package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
  602. package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
  603. package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
  604. package/docs/policies/xml-to-json-outbound/doc.md +71 -0
  605. package/docs/policies/xml-to-json-outbound/intro.md +4 -0
  606. package/docs/policies/xml-to-json-outbound/schema.json +117 -0
  607. package/docs/programmable-api/audit-log.mdx +74 -0
  608. package/docs/programmable-api/background-dispatcher.mdx +124 -0
  609. package/docs/programmable-api/background-loader.mdx +104 -0
  610. package/docs/programmable-api/cache.mdx +186 -0
  611. package/docs/programmable-api/compatibility-dates.mdx +201 -0
  612. package/docs/programmable-api/console-logging.mdx +48 -0
  613. package/docs/programmable-api/context-data.mdx +127 -0
  614. package/docs/programmable-api/custom-cors-policy.mdx +64 -0
  615. package/docs/programmable-api/environment.mdx +328 -0
  616. package/docs/programmable-api/hooks.mdx +569 -0
  617. package/docs/programmable-api/http-problems.mdx +385 -0
  618. package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
  619. package/docs/programmable-api/logger.mdx +223 -0
  620. package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
  621. package/docs/programmable-api/node-modules.mdx +67 -0
  622. package/docs/programmable-api/not-found-handler.mdx +47 -0
  623. package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
  624. package/docs/programmable-api/overview.mdx +213 -0
  625. package/docs/programmable-api/problem-response-formatter.mdx +183 -0
  626. package/docs/programmable-api/request-user.mdx +289 -0
  627. package/docs/programmable-api/reusing-code.mdx +26 -0
  628. package/docs/programmable-api/route-raw.mdx +55 -0
  629. package/docs/programmable-api/runtime-behaviors.mdx +25 -0
  630. package/docs/programmable-api/runtime-errors.mdx +246 -0
  631. package/docs/programmable-api/runtime-extensions.mdx +340 -0
  632. package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
  633. package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
  634. package/docs/programmable-api/web-crypto-apis.mdx +219 -0
  635. package/docs/programmable-api/web-standard-apis.mdx +109 -0
  636. package/docs/programmable-api/zone-cache.mdx +131 -0
  637. package/docs/programmable-api/zp-body-removed.mdx +32 -0
  638. package/docs/programmable-api/zuplo-context.mdx +414 -0
  639. package/docs/programmable-api/zuplo-id-token.mdx +90 -0
  640. package/docs/programmable-api/zuplo-json.mdx +91 -0
  641. package/docs/programmable-api/zuplo-request.mdx +200 -0
  642. package/docs/sample-apis.mdx +78 -0
  643. package/docs/self-hosted/overview.md +60 -0
  644. package/package.json +6 -5
@@ -0,0 +1,292 @@
1
+ ---
2
+ title: Migrate from Azure API Management to Zuplo
3
+ sidebar_label: Migrate from Azure APIM
4
+ ---
5
+
6
+ This guide walks through migrating from Azure API Management (APIM) to Zuplo. It
7
+ covers the key differences, concept mapping, policy translation, and a
8
+ step-by-step migration process.
9
+
10
+ ## Why teams migrate from Azure APIM
11
+
12
+ Azure API Management is a natural choice for organizations running on Microsoft
13
+ Azure. However, teams frequently encounter friction points that prompt them to
14
+ evaluate alternatives:
15
+
16
+ - **Slow deployments** — Azure APIM deployments can take 15-45 minutes to
17
+ propagate, creating long feedback loops during development. Creating a new
18
+ APIM instance can take 30-60 minutes.
19
+ - **Expensive per-environment pricing** — Each APIM instance (dev, staging,
20
+ production) is billed separately. The Developer tier starts at ~$50/month, but
21
+ the Standard tier needed for production starts at ~$700/month per instance.
22
+ - **Poor GitOps support** — Azure APIM uses ARM templates, Bicep, or Terraform
23
+ for infrastructure-as-code, but the policy definitions are embedded XML that
24
+ does not merge well in version control.
25
+ - **XML policy complexity** — Like Apigee, Azure APIM policies are written in
26
+ XML with C# expressions. The syntax is verbose and error-prone, especially for
27
+ complex transformations.
28
+ - **Azure lock-in** — APIM is tightly integrated with the Azure ecosystem. Using
29
+ it with non-Azure backends or multi-cloud architectures adds friction.
30
+ - **Limited developer portal customization** — The built-in developer portal has
31
+ improved over time but still requires significant effort to customize and
32
+ lacks features like self-serve API key management with built-in billing.
33
+
34
+ :::tip
35
+
36
+ [Imburse Payments](https://zuplo.com/blog/imburse-choose-zuplo-over-azure-api-management),
37
+ a UK fintech, chose Zuplo over Azure API Management to optimize the API
38
+ experience for their customers and improve their engineering team's workflow.
39
+
40
+ :::
41
+
42
+ ## Concept mapping: Azure APIM to Zuplo
43
+
44
+ | Azure APIM concept | Zuplo equivalent |
45
+ | ----------------------- | ------------------------------------------------------------------------ |
46
+ | API | Routes in your [OpenAPI spec](./openapi.md) |
47
+ | Operation | Route (path + method) in OpenAPI spec |
48
+ | Backend | [URL Forward handler](../handlers/url-forward.md) target |
49
+ | Inbound policy (XML) | [Inbound policy](./policies.md) (TypeScript) |
50
+ | Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
51
+ | Named value | [Environment variable](./environment-variables.md) |
52
+ | Subscription key | [API Key Authentication](../policies/api-key-inbound.md) |
53
+ | Product | API key with [metadata](./api-key-management.md) |
54
+ | Service (APIM instance) | [Environment](./environments.md) |
55
+ | Developer portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
56
+ | Application Insights | [Logging integrations](./logging.md) (Datadog, Splunk, etc.) |
57
+ | API revision | Git branch with [branch-based deployment](./branch-based-deployments.md) |
58
+ | Gateway (self-hosted) | [Self-hosted Zuplo](../self-hosted/overview.md) |
59
+
60
+ ## Step-by-step migration
61
+
62
+ ### Step 1: Export your API definition
63
+
64
+ Azure APIM stores API definitions as OpenAPI specs. Export them:
65
+
66
+ **Using the Azure Portal:**
67
+
68
+ 1. Navigate to your APIM instance.
69
+ 2. Select **APIs** from the sidebar.
70
+ 3. Select the API you want to export.
71
+ 4. Click the **...** menu and select **Export**.
72
+ 5. Choose **OpenAPI v3 (JSON)**.
73
+
74
+ **Using the Azure CLI:**
75
+
76
+ ```bash
77
+ az apim api export \
78
+ --resource-group myResourceGroup \
79
+ --service-name myApimService \
80
+ --api-id my-api \
81
+ --export-format openapi-link
82
+ ```
83
+
84
+ ### Step 2: Map Azure APIM policies to Zuplo policies
85
+
86
+ The following table maps common Azure APIM policies to Zuplo equivalents:
87
+
88
+ | Azure APIM policy | Zuplo policy |
89
+ | ---------------------------------- | ------------------------------------------------------------------------- |
90
+ | `check-header` | [Custom Code Policy](../policies/custom-code-inbound.md) checking headers |
91
+ | `set-header` | [Set Headers](../policies/set-headers-inbound.md) |
92
+ | `remove-header` | [Remove Headers](../policies/remove-headers-inbound.md) |
93
+ | `set-body` | [Set Body](../policies/set-body-inbound.md) |
94
+ | `set-query-parameter` | [Set Query Params](../policies/set-query-params-inbound.md) |
95
+ | `rewrite-uri` | [URL Rewrite handler](../handlers/url-rewrite.md) |
96
+ | `rate-limit` / `rate-limit-by-key` | [Rate Limiting](../policies/rate-limit-inbound.md) |
97
+ | `quota` / `quota-by-key` | [Quota](../policies/quota-inbound.md) |
98
+ | `validate-jwt` | [Open ID JWT Authentication](../policies/open-id-jwt-auth-inbound.md) |
99
+ | `authentication-basic` | [Basic Authentication](../policies/basic-auth-inbound.md) |
100
+ | `ip-filter` | [IP Restriction](../policies/ip-restriction-inbound.md) |
101
+ | `cors` | Built-in [CORS configuration](../programmable-api/custom-cors-policy.md) |
102
+ | `json-to-xml` / `xml-to-json` | [XML to JSON](../policies/xml-to-json-outbound.md) or custom code |
103
+ | `find-and-replace` | [Replace String](../policies/replace-string-outbound.md) |
104
+ | `cache-lookup` / `cache-store` | [Caching](../policies/caching-inbound.md) |
105
+ | `mock-response` | [Mock API](../policies/mock-api-inbound.md) |
106
+ | Custom C# expression | [Custom Code Policy](../policies/custom-code-inbound.md) (TypeScript) |
107
+
108
+ ### Step 3: Translate policy configuration
109
+
110
+ Here is an example of translating an Azure APIM rate limit policy to a Zuplo
111
+ rate limit policy.
112
+
113
+ **Azure APIM XML policy:**
114
+
115
+ ```xml
116
+ <policies>
117
+ <inbound>
118
+ <rate-limit-by-key
119
+ calls="100"
120
+ renewal-period="60"
121
+ counter-key="@(context.Subscription.Id)" />
122
+ <set-header name="X-Request-Id" exists-action="skip">
123
+ <value>@(Guid.NewGuid().ToString())</value>
124
+ </set-header>
125
+ </inbound>
126
+ </policies>
127
+ ```
128
+
129
+ **Zuplo policy configuration:**
130
+
131
+ ```json
132
+ {
133
+ "policies": {
134
+ "inbound": [
135
+ {
136
+ "name": "rate-limit-inbound",
137
+ "policyType": "rate-limit-inbound",
138
+ "handler": {
139
+ "export": "RateLimitInboundPolicy",
140
+ "module": "$import(@zuplo/runtime)",
141
+ "options": {
142
+ "rateLimitBy": "user",
143
+ "requestsAllowed": 100,
144
+ "timeWindowMinutes": 1
145
+ }
146
+ }
147
+ },
148
+ {
149
+ "name": "set-request-id",
150
+ "policyType": "set-headers-inbound",
151
+ "handler": {
152
+ "export": "SetHeadersInboundPolicy",
153
+ "module": "$import(@zuplo/runtime)",
154
+ "options": {
155
+ "headers": [
156
+ {
157
+ "name": "X-Request-Id",
158
+ "value": "$function(generateId)",
159
+ "overwrite": false
160
+ }
161
+ ]
162
+ }
163
+ }
164
+ }
165
+ ]
166
+ }
167
+ }
168
+ ```
169
+
170
+ ### Step 4: Translate C# policy expressions to TypeScript
171
+
172
+ Azure APIM allows inline C# expressions in XML policies. Translate these to
173
+ TypeScript custom code policies.
174
+
175
+ **Azure APIM C# expression:**
176
+
177
+ ```xml
178
+ <policies>
179
+ <inbound>
180
+ <set-header name="X-Forwarded-For" exists-action="override">
181
+ <value>@(context.Request.IpAddress)</value>
182
+ </set-header>
183
+ <choose>
184
+ <when condition="@(context.Request.Headers
185
+ .GetValueOrDefault("Authorization","")
186
+ .Length == 0)">
187
+ <return-response>
188
+ <set-status code="401" reason="Unauthorized" />
189
+ <set-body>{"error": "Missing authorization"}</set-body>
190
+ </return-response>
191
+ </when>
192
+ </choose>
193
+ </inbound>
194
+ </policies>
195
+ ```
196
+
197
+ **Equivalent Zuplo TypeScript policy:**
198
+
199
+ ```typescript
200
+ import { ZuploContext, ZuploRequest, HttpProblems } from "@zuplo/runtime";
201
+
202
+ export default async function (
203
+ request: ZuploRequest,
204
+ context: ZuploContext,
205
+ options: never,
206
+ policyName: string,
207
+ ) {
208
+ const authHeader = request.headers.get("authorization");
209
+
210
+ if (!authHeader) {
211
+ return HttpProblems.unauthorized(request, context, {
212
+ detail: "Missing authorization",
213
+ });
214
+ }
215
+
216
+ // Forward the client IP
217
+ const headers = new Headers(request.headers);
218
+ headers.set("X-Forwarded-For", request.headers.get("x-real-ip") ?? "");
219
+
220
+ return new ZuploRequest(request, { headers });
221
+ }
222
+ ```
223
+
224
+ ### Step 5: Migrate subscription keys to Zuplo API keys
225
+
226
+ Azure APIM uses subscription keys tied to products. Migrate to Zuplo's API key
227
+ system:
228
+
229
+ | Azure APIM subscription feature | Zuplo equivalent |
230
+ | ------------------------------- | ----------------------------------------------------------- |
231
+ | Subscription key | [API key](./api-key-management.md) |
232
+ | Product grouping | API key metadata for access control |
233
+ | Subscription approval | API key creation via Portal or API |
234
+ | Key regeneration | Key rotation in the Zuplo Portal or Developer Portal |
235
+ | Usage reporting | Built-in analytics and [logging](./logging.md) integrations |
236
+
237
+ ### Step 6: Migrate named values to environment variables
238
+
239
+ Azure APIM named values become Zuplo
240
+ [environment variables](./environment-variables.md):
241
+
242
+ | Azure APIM named value type | Zuplo equivalent |
243
+ | --------------------------- | --------------------------- |
244
+ | Plain value | Environment variable |
245
+ | Secret value | Secret environment variable |
246
+ | Key Vault reference | Secret environment variable |
247
+
248
+ Access environment variables in route configuration using `$env(VARIABLE_NAME)`
249
+ or in custom code using `context.env.VARIABLE_NAME`.
250
+
251
+ ### Step 7: Deploy and migrate traffic
252
+
253
+ 1. Deploy your Zuplo project by pushing to your connected Git repository.
254
+ 2. Set up a [custom domain](./custom-domains.md) for Zuplo.
255
+ 3. Route a subset of traffic to Zuplo using Azure Front Door, Traffic Manager,
256
+ or DNS-based routing.
257
+ 4. Validate behavior matches your Azure APIM configuration.
258
+ 5. Gradually shift all traffic to Zuplo.
259
+ 6. Decommission your Azure APIM instances.
260
+
261
+ ## Keeping Azure backends with Zuplo
262
+
263
+ You do not need to migrate your backend infrastructure. Zuplo works with any
264
+ HTTP backend, including:
265
+
266
+ - Azure App Service
267
+ - Azure Functions
268
+ - Azure Kubernetes Service (AKS)
269
+ - Azure Container Apps
270
+ - Any Azure service with an HTTP endpoint
271
+
272
+ Use [backend security](./securing-your-backend.md) options to secure the
273
+ connection between Zuplo and your Azure backends.
274
+
275
+ ## Deployment model comparison
276
+
277
+ | Feature | Azure APIM | Zuplo |
278
+ | --------------------- | ---------------------------------- | -------------------------------------------- |
279
+ | Deployment time | 15-45 minutes | Under 20 seconds |
280
+ | New instance creation | 30-60 minutes | Instant |
281
+ | Environment cost | ~$700/month per Standard instance | Free tier available; environments are free |
282
+ | Preview environments | Manual setup required | Automatic per Git branch |
283
+ | Global distribution | Premium tier + multi-region config | Built-in across 300+ edge locations |
284
+ | GitOps workflow | ARM/Bicep + XML policies | OpenAPI + TypeScript, native Git integration |
285
+
286
+ ## Next steps
287
+
288
+ - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
289
+ - [Add rate limiting](./step-2-add-rate-limiting.md)
290
+ - [Add API key authentication](./step-3-add-api-key-auth.md)
291
+ - [Configure your developer portal](../dev-portal/introduction.md)
292
+ - [Set up source control](./source-control.md)
@@ -0,0 +1,300 @@
1
+ ---
2
+ title: Migrate from Kong Gateway to Zuplo
3
+ sidebar_label: Migrate from Kong
4
+ ---
5
+
6
+ This guide walks through migrating from Kong Gateway (Community Edition or
7
+ Enterprise) to Zuplo. Whether you're running Kong OSS on Kubernetes, Kong
8
+ Konnect, or a self-hosted Kong cluster, this guide covers the key differences,
9
+ concept mapping, and step-by-step migration process.
10
+
11
+ ## Why teams migrate from Kong
12
+
13
+ Kong Gateway is a powerful, plugin-driven API gateway built on NGINX and Lua.
14
+ However, teams frequently encounter challenges that drive them to seek
15
+ alternatives:
16
+
17
+ - **Community Edition stagnation** — Kong's open-source Community Edition
18
+ receives fewer updates and lacks critical features like the developer portal,
19
+ RBAC, and advanced rate limiting that are reserved for Enterprise tiers.
20
+ - **Kubernetes complexity** — Running Kong in production requires managing
21
+ Postgres or Cassandra databases, configuring the Kong Ingress Controller, and
22
+ maintaining Kubernetes clusters across environments.
23
+ - **Lua plugin development** — Kong's plugin architecture requires Lua, a niche
24
+ language that few developers know. This limits who on your team can extend the
25
+ gateway and makes AI-assisted code generation less effective.
26
+ - **Cost escalation** — Kong Konnect pricing starts at ~$105/month per gateway
27
+ service plus ~$34/million API requests, with additional charges for analytics,
28
+ portals, and mesh management. Self-hosted Kong requires significant SRE
29
+ investment.
30
+ - **Global scaling challenges** — Scaling Kong globally requires deploying and
31
+ synchronizing clusters across regions manually, each with its own database and
32
+ configuration state.
33
+
34
+ :::tip
35
+
36
+ [Copilot Travel](https://zuplo.com/customers/copilot-travel) switched from Kong
37
+ to Zuplo after nine months, achieving over 50% faster API implementation and
38
+ reducing development time from months to days. Their team eliminated the need
39
+ for a dedicated DevOps engineer to maintain the API gateway.
40
+
41
+ :::
42
+
43
+ ## Concept mapping: Kong to Zuplo
44
+
45
+ | Kong concept | Zuplo equivalent |
46
+ | -------------------------- | ----------------------------------------------------------------------- |
47
+ | Service | Backend URL configured in a [route handler](../handlers/url-forward.md) |
48
+ | Route | Route in your [OpenAPI spec](./openapi.md) |
49
+ | Plugin (Lua) | [Policy](./policies.md) (TypeScript) or built-in policy |
50
+ | Consumer | [API key consumer](./api-key-management.md) |
51
+ | Consumer group | API key metadata with custom rate limit logic |
52
+ | Upstream | [URL forward handler](../handlers/url-forward.md) target |
53
+ | Workspace (Enterprise) | [Environment](./environments.md) |
54
+ | Kong Manager / Konnect UI | [Zuplo Portal](./development-options.md) or local development with Git |
55
+ | DB-less declarative config | [OpenAPI route config](./openapi.md) in Git |
56
+ | Admin API | [Zuplo API](./accounts/zuplo-api-keys.md) or `git push` |
57
+ | Kong Dev Portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
58
+
59
+ ## Step-by-step migration
60
+
61
+ ### Step 1: Export your API definitions
62
+
63
+ If you have OpenAPI specs for your APIs, export them from Kong. If you're using
64
+ Kong's declarative configuration, convert your service and route definitions to
65
+ an OpenAPI spec.
66
+
67
+ **From Kong declarative config (deck):**
68
+
69
+ ```yaml
70
+ # kong.yml - Your existing Kong config
71
+ services:
72
+ - name: my-api
73
+ url: http://backend-service:8080
74
+ routes:
75
+ - name: get-users
76
+ paths:
77
+ - /users
78
+ methods:
79
+ - GET
80
+ - name: create-user
81
+ paths:
82
+ - /users
83
+ methods:
84
+ - POST
85
+ ```
86
+
87
+ **Equivalent OpenAPI spec for Zuplo:**
88
+
89
+ ```json
90
+ {
91
+ "openapi": "3.1.0",
92
+ "info": {
93
+ "title": "My API",
94
+ "version": "1.0.0"
95
+ },
96
+ "paths": {
97
+ "/users": {
98
+ "get": {
99
+ "operationId": "get-users",
100
+ "summary": "Get users",
101
+ "x-zuplo-route": {
102
+ "corsPolicy": "none",
103
+ "handler": {
104
+ "export": "urlForwardHandler",
105
+ "module": "$import(@zuplo/runtime)",
106
+ "options": {
107
+ "baseUrl": "http://backend-service:8080"
108
+ }
109
+ },
110
+ "policies": {
111
+ "inbound": []
112
+ }
113
+ }
114
+ },
115
+ "post": {
116
+ "operationId": "create-user",
117
+ "summary": "Create user",
118
+ "x-zuplo-route": {
119
+ "corsPolicy": "none",
120
+ "handler": {
121
+ "export": "urlForwardHandler",
122
+ "module": "$import(@zuplo/runtime)",
123
+ "options": {
124
+ "baseUrl": "http://backend-service:8080"
125
+ }
126
+ },
127
+ "policies": {
128
+ "inbound": []
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### Step 2: Map Kong plugins to Zuplo policies
138
+
139
+ The following table maps common Kong plugins to their Zuplo policy equivalents:
140
+
141
+ | Kong plugin | Zuplo policy |
142
+ | ------------------------ | ------------------------------------------------------------------------ |
143
+ | `key-auth` | [API Key Authentication](../policies/api-key-inbound.md) |
144
+ | `jwt` | [Open ID JWT Authentication](../policies/open-id-jwt-auth-inbound.md) |
145
+ | `basic-auth` | [Basic Authentication](../policies/basic-auth-inbound.md) |
146
+ | `rate-limiting` | [Rate Limiting](../policies/rate-limit-inbound.md) |
147
+ | `rate-limiting-advanced` | [Complex Rate Limiting](../policies/complex-rate-limit-inbound.md) |
148
+ | `request-transformer` | [Transform Body](../policies/transform-body-inbound.md) |
149
+ | `response-transformer` | [Transform Body Outbound](../policies/transform-body-outbound.md) |
150
+ | `cors` | Built-in [CORS configuration](../programmable-api/custom-cors-policy.md) |
151
+ | `ip-restriction` | [IP Restriction](../policies/ip-restriction-inbound.md) |
152
+ | `request-size-limiting` | [Request Size Limit](../policies/request-size-limit-inbound.md) |
153
+ | `request-validation` | [Request Validation](../policies/request-validation-inbound.md) |
154
+ | `acl` | [ACL Policy](../policies/acl-policy-inbound.md) |
155
+ | Custom Lua plugin | [Custom Code Policy](../policies/custom-code-inbound.md) (TypeScript) |
156
+
157
+ ### Step 3: Translate plugin configuration
158
+
159
+ Here is an example of translating a Kong rate limiting plugin to a Zuplo rate
160
+ limit policy.
161
+
162
+ **Kong plugin configuration:**
163
+
164
+ ```yaml
165
+ plugins:
166
+ - name: rate-limiting
167
+ config:
168
+ minute: 100
169
+ policy: local
170
+ limit_by: consumer
171
+ ```
172
+
173
+ **Zuplo policy configuration:**
174
+
175
+ ```json
176
+ {
177
+ "name": "rate-limit-inbound",
178
+ "policyType": "rate-limit-inbound",
179
+ "handler": {
180
+ "export": "RateLimitInboundPolicy",
181
+ "module": "$import(@zuplo/runtime)",
182
+ "options": {
183
+ "rateLimitBy": "user",
184
+ "requestsAllowed": 100,
185
+ "timeWindowMinutes": 1
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ :::note
192
+
193
+ Zuplo's rate limiter is globally distributed across 300+ edge locations. Unlike
194
+ Kong, which enforces rate limits per-node or per-cluster (requiring Redis
195
+ synchronization), Zuplo enforces limits as a single global zone automatically.
196
+
197
+ :::
198
+
199
+ ### Step 4: Migrate authentication
200
+
201
+ **Kong `key-auth` to Zuplo API Key Authentication:**
202
+
203
+ Kong uses consumers with key credentials stored in its database. In Zuplo, API
204
+ keys are managed through the built-in
205
+ [API key management system](./api-key-management.md), which includes a
206
+ self-serve developer portal for key creation and rotation.
207
+
208
+ 1. Add the `api-key-inbound` policy to your routes.
209
+ 2. Create API key consumers through the Zuplo Portal or API.
210
+ 3. Optionally, enable the [Developer Portal](../dev-portal/introduction.md) for
211
+ self-serve key management.
212
+
213
+ **Kong `jwt` to Zuplo JWT Authentication:**
214
+
215
+ Replace Kong's JWT plugin with one of Zuplo's JWT authentication policies:
216
+
217
+ - [Auth0 JWT](../policies/auth0-jwt-auth-inbound.md)
218
+ - [AWS Cognito JWT](../policies/cognito-jwt-auth-inbound.md)
219
+ - [Firebase JWT](../policies/firebase-jwt-inbound.md)
220
+ - [Open ID JWT](../policies/open-id-jwt-auth-inbound.md) (generic OIDC)
221
+
222
+ ### Step 5: Set up your project and deploy
223
+
224
+ 1. Create a new project in the [Zuplo Portal](https://portal.zuplo.com/signup)
225
+ or using the [Zuplo CLI](../cli/overview.md).
226
+ 2. Import your OpenAPI spec as the route configuration file.
227
+ 3. Add policies to your routes.
228
+ 4. Connect your project to [source control](./source-control.md).
229
+ 5. Push to deploy — Zuplo deploys globally in under 20 seconds.
230
+
231
+ ### Step 6: Migrate traffic
232
+
233
+ Run Zuplo alongside Kong during migration:
234
+
235
+ 1. Point a subset of traffic to Zuplo using DNS or a load balancer.
236
+ 2. Monitor both gateways for correctness and performance.
237
+ 3. Gradually shift more traffic to Zuplo.
238
+ 4. Decommission Kong once all traffic is migrated.
239
+
240
+ ## Custom Lua plugins to TypeScript
241
+
242
+ If you have custom Kong plugins written in Lua, rewrite them as Zuplo
243
+ [custom code policies](../policies/custom-code-inbound.md) in TypeScript.
244
+
245
+ **Kong Lua plugin example:**
246
+
247
+ ```lua
248
+ local MyPlugin = {}
249
+
250
+ function MyPlugin:access(conf)
251
+ local header_value = kong.request.get_header("x-custom-header")
252
+ if not header_value then
253
+ return kong.response.exit(403, { message = "Missing required header" })
254
+ end
255
+ end
256
+
257
+ return MyPlugin
258
+ ```
259
+
260
+ **Equivalent Zuplo TypeScript policy:**
261
+
262
+ ```typescript
263
+ import { ZuploContext, ZuploRequest, HttpProblems } from "@zuplo/runtime";
264
+
265
+ export default async function (
266
+ request: ZuploRequest,
267
+ context: ZuploContext,
268
+ options: never,
269
+ policyName: string,
270
+ ) {
271
+ const headerValue = request.headers.get("x-custom-header");
272
+ if (!headerValue) {
273
+ return HttpProblems.forbidden(request, context, {
274
+ detail: "Missing required header",
275
+ });
276
+ }
277
+ return request;
278
+ }
279
+ ```
280
+
281
+ ## Kong DB-less mode to Zuplo GitOps
282
+
283
+ If you use Kong's DB-less declarative mode, you're already familiar with
284
+ configuration-as-code. Zuplo takes this further with native GitOps:
285
+
286
+ | Kong DB-less | Zuplo GitOps |
287
+ | ----------------------------- | -------------------------------------------------------------------- |
288
+ | Single `kong.yml` file | OpenAPI spec + policy configs in Git |
289
+ | `deck sync` to apply changes | `git push` triggers automatic deployment |
290
+ | Manual environment management | Automatic [branch-based environments](./branch-based-deployments.md) |
291
+ | No PR-based review workflow | PR reviews with preview environments |
292
+ | Manual rollback | `git revert` and push |
293
+
294
+ ## Next steps
295
+
296
+ - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
297
+ - [Add rate limiting](./step-2-add-rate-limiting.md)
298
+ - [Add API key authentication](./step-3-add-api-key-auth.md)
299
+ - [Configure your developer portal](../dev-portal/introduction.md)
300
+ - [Set up source control](./source-control.md)
@@ -0,0 +1,81 @@
1
+ ---
2
+ title: Migrate to Zuplo from Other API Gateways
3
+ sidebar_label: Migration Overview
4
+ ---
5
+
6
+ Moving to Zuplo from another API gateway is straightforward. Zuplo is
7
+ OpenAPI-native, so you can import your existing API definitions and start
8
+ configuring policies in minutes. This section provides migration guides for the
9
+ most common API gateways.
10
+
11
+ ## Why teams migrate to Zuplo
12
+
13
+ Teams migrate to Zuplo from legacy API gateways for several common reasons:
14
+
15
+ - **Reduce operational complexity** — Eliminate self-hosted infrastructure,
16
+ database management, and Kubernetes overhead with a fully managed platform.
17
+ - **Lower total cost of ownership** — Replace expensive enterprise licensing and
18
+ hidden infrastructure costs with transparent, usage-based pricing.
19
+ - **Accelerate development velocity** — Deploy globally in under 20 seconds with
20
+ GitOps workflows, TypeScript policies, and instant preview environments.
21
+ - **Modernize the developer experience** — Replace XML configs, Lua plugins, or
22
+ CloudFormation templates with TypeScript and OpenAPI-native configuration.
23
+ - **Go multi-cloud** — Deploy to 300+ edge locations worldwide without
24
+ single-cloud lock-in.
25
+
26
+ ## Migration guides by platform
27
+
28
+ | Source platform | Common migration triggers |
29
+ | ---------------------------------------------------- | --------------------------------------------------------------------------- |
30
+ | [Kong Gateway](./migrate-from-kong.md) | Community Edition stagnation, Kubernetes complexity, Lua plugin limitations |
31
+ | [Google Apigee](./migrate-from-apigee.md) | Apigee Edge EOL, GCP lock-in, XML policy complexity, high costs |
32
+ | [AWS API Gateway](./migrate-from-aws-api-gateway.md) | AWS lock-in, limited customization, no built-in developer portal |
33
+ | [Azure API Management](./migrate-from-azure-apim.md) | Slow deployments, expensive per-environment pricing, poor GitOps support |
34
+
35
+ ## General migration approach
36
+
37
+ Regardless of your source platform, the migration process follows a similar
38
+ pattern:
39
+
40
+ 1. **Export your API definitions** — Extract OpenAPI specs from your current
41
+ gateway. If you don't have OpenAPI specs, create them from your existing
42
+ route configuration.
43
+ 2. **Import into Zuplo** — Import your OpenAPI spec through the Zuplo Portal or
44
+ by adding the file to your project repository.
45
+ 3. **Map policies** — Translate your existing gateway policies (authentication,
46
+ rate limiting, transformation) to Zuplo's built-in
47
+ [policy library](./policies.md).
48
+ 4. **Configure backend connectivity** — Set up
49
+ [URL forwarding](../handlers/url-forward.md) or
50
+ [URL rewriting](../handlers/url-rewrite.md) to route traffic to your existing
51
+ backends.
52
+ 5. **Test in a preview environment** — Use Zuplo's
53
+ [branch-based deployments](./branch-based-deployments.md) to validate your
54
+ configuration before going live.
55
+ 6. **Migrate traffic incrementally** — Route a subset of traffic through Zuplo
56
+ first, then gradually shift all traffic once you've validated the
57
+ configuration.
58
+
59
+ ## Concept mapping
60
+
61
+ The following table maps common API gateway concepts to their Zuplo equivalents:
62
+
63
+ | Concept | Kong | Apigee | AWS API Gateway | Azure APIM | Zuplo |
64
+ | ---------------- | -------------------- | ------------------- | -------------------- | --------------------- | ------------------------------------------------------ |
65
+ | Route definition | Service + Route | API Proxy | Resource + Method | API + Operation | [OpenAPI route](./openapi.md) |
66
+ | Request policy | Plugin (Lua) | Policy (XML) | Lambda authorizer | Policy (XML) | [Inbound policy](./policies.md) (TypeScript) |
67
+ | Response policy | Plugin (Lua) | PostFlow (XML) | Response mapping | Outbound policy (XML) | [Outbound policy](./policies.md) (TypeScript) |
68
+ | Authentication | Plugin | VerifyAPIKey policy | API key / Authorizer | Subscription key | [API key](./api-key-authentication.md) or JWT policy |
69
+ | Rate limiting | Rate Limiting plugin | SpikeArrest / Quota | Usage plan | rate-limit policy | [Rate limit policy](../policies/rate-limit-inbound.md) |
70
+ | Developer portal | Kong Dev Portal | Drupal portal | N/A (self-build) | Built-in portal | [Developer Portal](../dev-portal/introduction.md) |
71
+ | Environment | Workspace | Environment | Stage | Service | [Environment](./environments.md) |
72
+ | Deployment | Deck / Admin API | API deploy | CloudFormation / SAM | ARM / Bicep | `git push` with [GitOps](./source-control.md) |
73
+
74
+ ## Get migration support
75
+
76
+ Need help planning your migration? Zuplo's team can assist with migration
77
+ planning, policy translation, and architecture review.
78
+
79
+ - [Book a demo](https://zuplo.com/meeting)
80
+ - [Contact support](https://zuplo.com/support)
81
+ - [Join the Discord community](https://discord.gg/W4mQqNnfSq)