Apache Camel routes, rebuilt in Rust: one native binary, ~1 ms startup, ~10 MB RAM, amd64/arm64
741

Apache Camel routes, rebuilt in Rust. If you know Apache Camel, you already know Cameleer: the same YAML DSL, endpoint URIs, Enterprise Integration Patterns and Simple expressions, in a single native binary.
--mcp, or --mcp-stdio for Claude Desktop): schema checks, approvals, run-once, timeouts and audit on every call; official MCP conformance 39/39 and 26/26 (MCP)Website: https://cameleer.ing/ · Source: https://github.com/pmsudhi/cameleer
Save a route as hello-api.camel.yaml:
- rest:
path: /orders
get:
- path: /{id}
to: direct:getOrder
- route:
from:
uri: direct:getOrder
steps:
- setBody:
simple: '{"id": "${header.id}", "status": "shipped"}'
Run it and call it:
docker run --rm -p 8080:8080 -v "$PWD:/routes:ro" pmsudhi/cameleer run /routes/hello-api.camel.yaml
curl localhost:8080/orders/42 # {"id": "42", "status": "shipped"}
Any route written for Apache Camel's YAML DSL runs the same way.
Each of these runs end to end in the project's test suite. Each file's header lists the environment variables it needs.
| route | what it does |
|---|---|
| ai-ticket-triage.camel.yaml | Kafka in. An LLM (OpenAI, Ollama, vLLM, Azure OpenAI) classifies each ticket, and urgent ones go to their own topic. |
| alerts-to-slack.camel.yaml | An HTTP webhook takes monitoring alerts and posts the critical ones to Slack. |
| files-to-s3.camel.yaml | Watches a folder and uploads each new CSV file to S3. |
| rest-api.camel.yaml | JSON REST API with validation, a content-based router and error handling. |
docker run --rm -e KAFKA_BROKERS=kafka:9092 -e OPENAI_API_KEY \
-v "$PWD:/routes:ro" pmsudhi/cameleer run /routes/ai-ticket-triage.camel.yaml
| tag | meaning |
|---|---|
latest | the latest release |
0.5.1, 0.5 | a release, and the latest patch of a minor version |
edge | a manual build from main |
sha-<commit> | the image of one commit |
The same image is published to ghcr.io/pmsudhi/cameleer. Every push carries an SBOM, build provenance and a GitHub attestation: gh attestation verify oci://ghcr.io/pmsudhi/cameleer:latest --owner pmsudhi.
| Entrypoint | cameleer (the CLI; run, run --mcp, version, get, tool, --help) |
| Working directory | /routes: mount your route files here, read-only is fine |
| Port | 8080 (REST DSL and platform-http; camel.server.port) |
| User | 65532 (nonroot); any --user works |
| Environment | {{env:NAME:default}} in routes; CAMEL_* and application.properties for configuration; --prop key=value on the command line |
| Filesystem | Works with --read-only; no status or log files are written (CAMEL_LOCAL_STATUS=false), logs go to stdout |
| Stop | SIGTERM stops the routes gracefully |
| Health | with --prop camel.server.healthCheckEnabled=true: /q/health/live and /q/health/ready on port 8080 |
Kubernetes, Docker Compose and Cloud Run setups are in the deployment guide.
This image includes every component. To build one with only the component families your routes
use, clone the repository and pass them as FEATURES:
docker build --build-arg FEATURES=cloud,jq -t my-cameleer .
A feature list replaces the default, so name every family you use (templates, jq, xpath,
http2 and validate are features too). The build features guide
lists them and what each adds.
The same engine is on crates.io: cargo install cameleer-main gives you the CLI, and cameleer-core and the component crates let you embed it in your own Rust program.
Apache License 2.0. The license and NOTICE are in the image under /usr/share/doc/cameleer/.
Cameleer is an independent project. It is not affiliated with or endorsed by the Apache Software Foundation. Apache, Apache Camel and Camel are trademarks of the ASF.
Content type
Image
Digest
sha256:85f5642ba…
Size
20.3 MB
Last updated
1 day ago
docker pull pmsudhi/cameleer