docs/migrate/page.md
{% answer %} You don't have to migrate everything at once. The recommended path is: pick one new microservice, build it in GoFr, get a feel for the framework, then migrate older services as you touch them. GoFr deploys alongside your existing Gin / Fiber / Echo / Express / Flask / Spring Boot services with no special infrastructure. {% /answer %}
{% callout title="Migrating with an AI assistant?" %} Hand https://gofr.dev/AGENTS.md to your coding assistant (Claude Code, Cursor, Codex, Aider). It contains the framework conventions, routing/binding/datasource patterns, and per-framework cheat-sheets so the assistant can translate handlers without you re-explaining GoFr. {% /callout %}
net/http semantics, datasource and observability differences..env files, your OpenTelemetry collector endpoint, your Prometheus scrape config, and your log format.func(*gofr.Context) (any, error) replaces framework-specific types..env (12-factor).c.SQL, c.Redis, c.Mongo, etc., instead of injected clients you manage.{% faq %}
{% faq-item question="Can I migrate one route at a time?" %} Within a service: not easily, since GoFr owns the HTTP server. Across services: yes — keep your existing services running and migrate them one at a time. {% /faq-item %}
{% faq-item question="Does my existing OpenTelemetry collector / Prometheus / log aggregator still work?" %} Yes. GoFr exports OTLP traces and Prometheus metrics; structured logs go to stdout in JSON. {% /faq-item %}
{% /faq %}