Flexible Real-Time Messaging for
Web and Mobile Applications

Add Real-Time Capabilities to Web Apps

Most web technologies are well suited to the Request/Respose pattern but struggle with real-time support and long lived connections.

Carotene complements new or existing applications by providing access to the Publish/Subscribe pattern and managing long lasting connections with Websockets, using long-polling when Websockets are not available.

Easy to use

Using Carotene with the client side JavaScript API is simple. You just need to define the channels in which you want to publish, and the channels you want to subscribe to.
Carotene.publish({
    channel: "mychannel",
    message: "hello world!"
    });
Carotene.subscribe({
     channel: "mychannel",
     onMessage: function(msg) {console.log(msg);}
     });

Access Control

Carotene delegates authentication of real-time users to your backend, so you don't have to implement security mechanisms twice or look for ways to share authentication mechanisms between services.

You can authorize to which channels a user can publish or subscribe to, so that Carotene only allows access to authenticated users, or asks your backend if a user has permission to access a channel.

Learn more about Security in the documentation.

Presence

When a user can have several open connections on different servers of your infrastructure, knowing which users are subscribed to a particular channel at any moment can be a challenging problem to solve.

Carotene provides presence information out of the box.

Learn more about Presence in the documentation.

Horizontally Scalable

If you ever have too much real-time traffic to fit in one server, you can scale horizontally just by firing up more Carotene nodes.

Carotene is built on Erlang, a language designed for distributed, massively scalable soft real-time systems, with requirements on high availability.

Learn more about Scaling Carotene in the documentation.

Plug to Other Services

If desired, Carotene can republish messages received to Redis PubSub or RabbitMq to make the streaming of messages available to other services, such as analytics or monitoring, or launching tasks asynchronously in other machines.

Learn more about republishing to messaging queues in the documentation.

Plays Well with Any Backend

Implementing real-time solutions usually restrict you to write your application in platforms that are event-based or have other mechanisms for dealing with multiple long-lived connections.

Carotene, on the other hand, acts as an adapter for real-time services, allowing your backend to publish, subscribe and manage channels while Carotene manages the connections and the internal messaging.

There is no need to make hard architectural decisions based on transport protocols or messaging patterns.