Self-hosted service
apache/camel avatar
apache/camel

Apache Camel: routes in YAML, Java or XML, and the runtime choice that follows

Apache Camel is an open source integration framework with 350+ connectors. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone. Apache License 2.0.

6,409 stars5,180 forksJavaApache-2.0

At a glance

What is it?
Apache Camel is an integration framework built on Enterprise Integration Patterns, with 350+ connectors and three runtimes. The interesting decision is not whether to use it, but which runtime and which DSL you commit to.
Who is it for?
Adopt Camel if you have many heterogeneous endpoints (Kafka, JDBC, REST, cloud services) and want one routing model instead of hand-written glue per system. Do not adopt it for a single point-to-point call between two services, where a plain HTTP client and a scheduler are less machinery.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • apache/camel6,409 ★ · +90
Star history
Repository2026-09-132026-11-13
apache/camel6.3k6.4k

90 Stars in the last 61 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The problem Camel solves is endpoint sprawl, not messaging

Camel is aimed at teams that keep adding connections between systems and end up maintaining a folder of bespoke clients. The README frames it as an integration framework with 350+ connectors for databases, APIs, message brokers and cloud services, and the component list names Kafka, REST, JDBC, AWS, Azure, GCP and Salesforce. That is the shape of the problem: not one protocol, but a dozen, each with its own client library, retry semantics and failure behaviour. Camel's answer is to describe the movement of a message as a route and let the framework own the connection details. The audience is Java shops, because the primary language is Java, and the routes are written against Camel's API. It is also a reasonable fit for teams that want integration logic to be reviewable as configuration rather than as a service class, which is what the YAML DSL buys you. The project has been in production since 2007 according to the README, which matters less as a quality signal than as an indication that the API surface has had time to settle.

A route is a from, a sequence of steps, and a to

The mechanism is visible in the two equivalent examples the README gives. A YAML route declares from with a uri of kafka:incoming-orders, then steps: unmarshal with json, then to with a uri of sql:INSERT INTO orders. The Java version is the same three calls chained: from, unmarshal().json(), to("sql:..."). The URI scheme selects the component, and the rest of the URI is component-specific configuration. That is the whole architecture in miniature. Messages flow from a consumer endpoint through a processor chain to a producer endpoint, and the Enterprise Integration Patterns linked from the README (splitter, aggregator, content-based router, and the rest) are the vocabulary for the middle of that chain. The SQL example also shows how message data reaches the endpoint: the values are bound with :#${header.id} and :#${body}, so the route body and headers are the payload contract between components. This is why the DSL choice is mostly cosmetic. YAML, Java and XML produce the same route model, and the README presents the same route in YAML and Java so teams can pick what fits. The trade-off is real though: YAML is easier to review and to generate from a visual designer, while Java gives you the compiler, refactoring tools and the ability to write custom processors inline without a separate artifact.

Getting a route running, and what the CLI actually does

The fastest path in the README is two commands: camel init hello.yaml creates a route file, and camel run hello.yaml executes it. That is the Camel CLI, documented separately as camel-jbang, and it is positioned for running, developing, testing and tracing routes from the command line. For an existing Spring Boot application the README gives a Maven dependency instead: groupId org.apache.camel.springboot, artifactId camel-spring-boot-starter. Note that this is the runtime-specific starter, not a core artifact, which is the pattern across the project: you depend on the runtime integration plus the components you use. The README lists Camel Quarkus as the cloud-native option with fast startup, low memory and native compilation, and Camel CLI as the command-line option, with Camel K for Kubernetes, Camel Karaf for OSGi and Camel Kafka Connector for Kafka Connect listed as other runtimes. Two things the README does not give you: a version number for the starter, and the component artifact names for the connectors in the example. You will need the components page for those. The MCP server is a separate setup step, documented under camel-jbang-mcp, and it feeds the Camel catalog to assistants such as Claude Code, GitHub Copilot, Cursor and Gemini CLI.

The runtime decision is the decision that is hard to reverse

Choosing between Spring Boot, Quarkus and the CLI is not a stylistic preference, because each one changes how the application is packaged and started. The README describes Quarkus as offering native compilation and lower memory; Spring Boot is described only as Camel on Spring Boot with starters for the 350+ connectors. If your deployment is a container image with a JVM and memory is not the binding constraint, Spring Boot is the lower-friction path because it reuses whatever Spring configuration and observability you already run. For native binaries, compare both runtimes: Camel Spring Boot also documents GraalVM native support, with limited out-of-the-box component coverage and possible runtime hints. Test the exact route and components before choosing. The CLI is a different category again: it is a development and operations tool, useful for tracing and for running a route file without a build, and the README does not present it as a production deployment target in the same way as the other two. Pick the runtime early. Migrating a route between them is not a rewrite of the route logic, but it is a rewrite of the surrounding build, configuration and packaging.

Where Camel is the wrong tool

The honest limitation is that Camel is a framework you adopt, not a library you call. A route file, a runtime starter and a component dependency are three moving parts before anything moves a byte. If your integration is one service calling another over HTTP on a schedule, Camel adds a routing engine, a component catalog and a DSL on top of something a small amount of plain code already does. The second constraint is component variance. The README says 350+ connectors, but a catalog that size cannot be uniform in quality or maintenance, and the documentation does not claim otherwise. Some components wrap mature clients, others wrap vendor APIs that change. You should read the specific component page before designing around it. Third, the multi-DSL story cuts both ways: a team that writes YAML routes and Java processors and XML legacy routes has three syntaxes to review, and the README's three-way example is a demonstration of flexibility, not a recommendation to mix them in one repository. Fourth, the README does not state a support policy or an LTS cadence for releases, so version alignment between Camel core, the runtime starter and each component is something you verify rather than assume.

Spring Integration and Kafka Connect are the comparisons that matter

For a Spring-based shop already using Spring Integration, the difference is where the routing model lives. Spring Integration expresses flows as channels and endpoints wired through the Spring context, so the integration graph is a Spring bean graph and the tooling is Spring tooling. Camel keeps an explicit route abstraction with URIs and EIP processors, and can run outside Spring entirely, including on Quarkus and via the CLI. That portability is the actual distinction. The other comparison is Camel Kafka Connector against plain Kafka Connect. Kafka Connect is scoped to moving data in and out of Kafka with connectors that run inside the Connect worker; Camel Kafka Connector is listed as Camel's runtime for Kafka Connect. If your problem is strictly Kafka-to-Kafka, Connect alone is the smaller system. If the Kafka topic is one hop in a longer path through a database and a REST API, the Camel route is the thing that spans the whole path. The README also points at Kaoto and Karavan as visual designers, which is a different kind of alternative: not a competing runtime, but a way to author the same routes without hand-writing YAML.

Licence, maintenance and what upgrading costs

The project is Apache License 2.0, stated in the README and in LICENSE.txt, and the repository is not archived with a last push of 2026-11-02. Apache-2.0 is a permissive licence with an explicit patent grant, which is the usual reason enterprises accept it without a legal review cycle. This is a description of the licence text, not legal advice; if you redistribute Camel inside a product, read the NOTICE and attribution requirements yourself. On maintenance, a few concrete observations stand out. There are many runtime integrations to keep aligned (Spring Boot, Quarkus, CLI, K, Karaf, Kafka Connector), and the component catalog is large, so the practical upgrade cost is the cost of tracking the components you actually use, not the framework as a whole. The MCP server is one more artifact to keep current if you rely on it for assistant context. The README does not state a release cadence, a support window or a compatibility matrix, so pin your Camel version, pin the matching runtime starter, and check the component pages for the connectors in your routes before you upgrade rather than after.

Editorial conclusion

Adopt Camel if you have many heterogeneous endpoints (Kafka, JDBC, REST, cloud services) and want one routing model instead of hand-written glue per system. Do not adopt it for a single point-to-point call between two services, where a plain HTTP client and a scheduler are less machinery. Before committing, verify three things in your own environment: that the specific component you need exists in the catalog, that your chosen runtime's starter resolves the Camel version you expect, and whether the components and DSL you need support native compilation on your chosen runtime. Both Camel Quarkus and Camel Spring Boot have native paths, with different coverage and configuration.

Frequently asked questions

How do I start an Apache Camel route without Spring Boot?

Use the standalone Camel CLI: `camel init hello.yaml` writes the route file and `camel run hello.yaml` starts it. The runtimes table also offers Camel Quarkus for native compilation and Camel K for Kubernetes.

Which runtimes can host an Apache Camel route?

The runtimes table names Camel Spring Boot, Camel Quarkus, and the Camel CLI. Outside that table sit Camel K for Kubernetes, Camel Karaf for OSGi, and Camel Kafka Connector for Kafka Connect.

Do I have to write Apache Camel routes in XML?

Routes can be written in Java, YAML, or XML. The getting started example shows the same kafka to sql route in YAML and in Java, and no XML route appears in the README, only an XML dependency.

Where do I find Apache Camel versions and report problems?

The repository has no GitHub releases, so versions come from Maven Central under the org.apache.camel group, with Javadoc published for org.apache.camel/camel-api. Issues are tracked in the Apache Jira project CAMEL, with chat on Zulip and a mailing list as well.

How many connectors does Apache Camel provide?

The project states 350+ connectors for databases, APIs, message brokers, and cloud services, naming Kafka, REST, JDBC, AWS, Azure, GCP, and Salesforce. Camel Spring Boot reaches that set through starters, and the catalog also splits out Enterprise Integration Patterns, data formats, and languages.

Official sources

  1. apache/camel on GitHub
  2. Issues
  3. License: Apache-2.0
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/apache-camel.svg)](https://hysenlabs.com/projects/apache-camel)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/apache-camel.svg)](https://hysenlabs.com/projects/apache-camel)

Was this useful?