= Support for Apache Karaf

Apache Camel Karaf is for running Camel in the
http://karaf.apache.org[Apache Karaf] OSGi container.

It includes:

* Camel features descriptor allowing to install Camel in Karaf.
* Camel Karaf commands allowing you to view, start, stop, get info, about the
Camel contexts and routes running in the Karaf instance.


== Install Camel in Karaf

Assuming that you have a running Karaf instance, you can register the
Camel features descriptor:

[source,sh]
----
karaf@root> feature:repo-add camel 3.18.1
----

where 3.18.1 is the Camel version

Now, we have all Camel features available:

To install Camel, just install the `camel` feature:

[source,sh]
----
karaf@root> feature:install camel
----

You have to install the Camel features depending of your requirements.

If, in your route, you use an endpoint like `stream:out`, you have to
install the `camel-stream` feature:

[source,sh]
----
karaf@root> feature:install camel-stream
----

And so on, for example if you use the sql, and http components:

[source,sh]
----
karaf@root> feature:install camel-sql camel-http
----

== Camel Karaf commands

When you install the camel feature, new Camel Karaf commands become available
automatically.

For example to list all running Camel contexts:
[source,sh]
----
karaf@root> camel:context-list
----

You can see all the Camel commands by typing `camel:` and then pressing TAB key.

TIP: use kbd:[TAB] key for completion on the Camel context name.
