Book a consultation

Solace Protocols and APIs: MQTT, JMS, AMQP, REST and Kafka on One Broker

Solace API and SDKs: Choosing a Messaging API by Language and Use

Solace API options compared: C, Java, JCSMP, Java RTO, JMS, .NET, Python, Go, JavaScript, Node.js and iOS, plus Spring and Quarkus, and how to choose.

Vladimir Romanov


The Solace API family is a set of native messaging libraries, one or more per language, that connect applications to the Solace Event Broker over SMF, Solace’s own protocol. Solace documents APIs for C, .NET, Go, Java (the Java API, JCSMP and Java RTO), Jakarta Messaging and JMS, JavaScript, Node.js, Python and iOS (Solace Messaging APIs). They expose the broker’s full feature set, which open protocols such as MQTT and AMQP do not, at the price of tying the code to Solace. Spring, Quarkus and management APIs sit around them.

This page lists every API with its language and use case, explains how to choose, and covers the traps. It belongs under Solace protocols and APIs in the Solace cluster. The rename from PubSub+ in May 2025 renamed the APIs too (“Solace PubSub+ Messaging API for…” became “Solace Messaging API for…”), but many package names still say pubsubplus.

Every Solace API, by language and use case

APILanguageSolace’s description, in shortTypical use case
C API (CCSMP)C, C++Highest throughput, lowest latency, lowest CPUTrading-style latency, embedded services, wrappers
.NET APIC# and .NETObject-oriented managed wrapper over the C APIWindows services, .NET MES and line-side apps
JCSMPJavaClassic object-oriented Java API, high throughput, low latencyExisting Java estates and most published samples
Java APIJavaHigh throughput using modern Java features and programming modelsNew Java services
Java RTOJavaLow-latency JNI wrapper over the C APILatency-critical Java where JNI is acceptable
JMS / Jakarta MessagingJavaStandard JMS 1.1 functionality in javax and jakarta namespacesApplication servers, migrations from other JMS brokers
JavaScript APIJavaScriptWeb and mobile web, SMF over WebSocketBrowser dashboards, operator screens
Node.js APIJavaScriptServer-side, event-based programming (npm solclientjs)Node back ends, integration scripts
Python APIPythonCloud and enterprise server applications (PyPI solace-pubsubplus)Data engineering, analytics, AI services
Go APIGoCloud and enterprise server applicationsCloud-native services, tooling
iOS APIObjective-C, SwiftNative wrapper of the C API with iOS lifecycle integrationNative iPhone and iPad apps

Sources: Solace Messaging APIs; package versions as of 9 October 2026: Python solace-pubsubplus 1.11.0 on PyPI, Node.js solclientjs 10.18.3 on npm.

Feature coverage is broad but not identical. Partitioned queues, for example, are supported across JCSMP, JMS, C, Python, Go, .NET, JavaScript, REST, MQTT 5 and AMQP (Solace Community). Solace publishes a feature support matrix per API; check it for the specific features your design depends on.

Frameworks, tools and management APIs

Frameworks. Spring users get Spring Boot starters and the Spring Cloud Stream binder for Solace in the solace-spring-cloud project, so a Spring service can bind to Solace with configuration rather than API calls. A Quarkus extension covers Quarkus, and a MuleSoft connector covers Anypoint. For schemas, Solace’s Schema Registry ships Avro and JSON serialisers, with the Java SERDES released alongside the 10.28.0 Java APIs in August 2025 and a .NET JSON Schema SERDES in July 2026.

Management. SEMP, the Solace Element Management Protocol, is the REST management API (versions 1 and 2) behind the web UI, the CLI and the Terraform provider. The 2026 solace-broker-mcp server exposes 47 SEMP-based tools to AI assistants: 29 read-only and 18 write tools that are off by default.

Developer tools. SdkPerf for load testing, the Try-Me CLI and VS Code extension, Codelabs and getting-started code for every API in SolaceSamples.

Close-up of colourful source code markup on a dark computer screen
Connecting, subscribing and handling an event takes a few lines in any Solace API; the real decisions are delivery mode, acknowledgement and error handling.

The settings that matter more than the API

Choosing the library is the easy part. Three decisions inside the code decide whether a plant can trust it.

Direct or guaranteed delivery. Every Solace API can publish Direct messages, which are fast and at-most-once, or guaranteed messages, which the broker stores and the consumer acknowledges. A live dashboard can live with Direct. A quality hold, a batch record or an order to the ERP cannot. Decide per topic and write the decision down; the guaranteed messaging page explains the mechanics.

When to acknowledge. Acknowledge after the work is done and committed, not when the message arrives. An application that acknowledges first and then crashes has lost the message, and the broker cannot know.

Tracing. The broker generates OpenTelemetry spans natively on receive, enqueue, send, acknowledge and delete, and Solace publishes an OpenTelemetry Collector receiver to forward them to tools such as Jaeger, Datadog or Dynatrace (Solace distributed tracing). Instrumenting the client side as well means a delayed message can be followed from the line gateway to the consuming application, which shortens the “is it the network, the broker or the app?” argument during an incident.

How to choose a Solace API

Choosing a Solace API A decision tree. The first question is whether the code must stay portable across brokers. If yes, use an open protocol client: MQTT, AMQP 1.0 or JMS. If no, choose by runtime. Eight runtime boxes follow: Java, C or C++ with the C API, .NET with the .NET API, Python with the Python API, Go with the Go API, browser with the JavaScript API, Node.js with the Node.js API, and iOS with the iOS API. Under Java, four further choices: a Spring application uses the Spring Cloud Stream binder, standard JMS needs the JMS or Jakarta API, the lowest latency uses Java RTO, and otherwise new code uses the Java API while existing code stays on JCSMP. Must the code stay portable across brokers? yes no Open protocol client MQTT (Paho), AMQP 1.0 (Qpid) or JMS Which runtime? Mixing is fine: all clients share one broker and one topic tree Java C, C++ C API .NET .NET API Python Python API Go Go API Browser JavaScript Node.js Node.js API iOS iOS API Spring application: Spring Cloud Stream binder Standard JMS needed: JMS or Jakarta API Lowest latency, JNI acceptable: Java RTO Otherwise: Java API for new code, JCSMP if existing Java has four answers because Java estates differ most: app servers, Spring, latency-sensitive and greenfield code. Portability is the first question, the runtime the second, and features the tie-breaker.
Decide portability first. Once you have chosen a Solace API, the runtime usually picks it for you; only Java needs a real choice.

A procedure that holds up in a design review:

  1. Decide portability. Devices, packaged products and anything that may move to another broker should use an open protocol. See Solace MQTT and JMS, AMQP and REST.
  2. Let the runtime choose. The team’s language and framework usually settle the rest.
  3. In Java, choose deliberately. Spring teams should use the binder; application servers need JMS or Jakarta; greenfield code should start on the Java API unless a library or sample it depends on only exists for JCSMP.
  4. Check the feature matrix for the features the design depends on, such as partitioned queues, replay or transactions.
  5. Standardise wrappers. Write one thin internal library per language for connection settings, reconnect behaviour and logging, so twenty teams do not invent twenty variants.

An illustrative case. A plant’s line-side quality application is written in C#, the analytics team works in Python, and the operator dashboard runs in a browser. The C# application uses the .NET API with guaranteed messaging, the data scientists use the Python API to subscribe to site1/*/*/quality/>, and the dashboard uses the JavaScript API over secure WebSocket with direct messaging. Three APIs, one topic tree, and no translation code. Where those applications meet plant historians and SCADA, our plant data overview covers the other half of the picture.

Where it gets hard

  • Reconnect and retry settings. Defaults differ by API. Set them explicitly and test a broker failover, or a client may give up after a few attempts.
  • Acknowledgement mistakes. Acknowledging before processing loses messages; never acknowledging fills the queue. Both are common in first projects.
  • Version drift. With eleven APIs and frequent releases, teams end up on many versions. Track them, and align with the broker’s long-term release.
  • Package names. Search for pubsubplus as well as solace when auditing dependencies; the rename did not reach every package.
  • Lock-in by convenience. Every Solace-specific feature used is a reason it will be harder to move. That can be the right trade; make it on purpose.

Related: the sibling Kafka integration page, the messaging model the APIs expose, and the Solace hub.

Frequently asked questions

Which programming languages does the Solace API support?

Solace documents messaging APIs for C, .NET, Go, Java (three variants: the Java API, JCSMP and Java RTO), Jakarta Messaging and JMS, JavaScript for browsers, Node.js, Python and iOS. All of them speak SMF, Solace's native protocol. Spring Boot starters, a Spring Cloud Stream binder and a Quarkus extension sit on top for framework users, as of October 2026.

What is the difference between JCSMP and the Solace Java API?

Both are Solace's own Java APIs over SMF. Solace describes JCSMP as its classic, object-oriented Java API with high throughput and low latency, and the Java API as a high-throughput API that uses modern Java features and programming models. JCSMP has the longest history and most existing code; new projects often start with the Java API. Java RTO is a third option, wrapping the C API for low latency.

Is there a Solace Python API?

Yes. The Solace Python API is published on PyPI as solace-pubsubplus, still using the former PubSub+ name; version 1.11.0 was current on 9 October 2026. Solace positions it for cloud-based and enterprise-scale server applications. Python can also reach the broker over MQTT with an open-source client such as Paho, which trades some features for portability.

Should I use a Solace SDK or an open-source MQTT or AMQP client?

Use a Solace API when the application will stay on Solace and needs the full feature set, for example guaranteed messaging with flow control, queue browsing or the lowest latency. Use an open-source client when portability matters or the application is a device or packaged product. Both can share one broker and one topic tree, so the choice is per application.

How do you manage a Solace broker programmatically?

Through SEMP, the Solace Element Management Protocol, a REST management API in versions 1 and 2. Solace also publishes Terraform providers for software and appliance brokers, a broker management web UI and the Event Broker CLI. In 2026 Solace released solace-broker-mcp, which exposes SEMP-based tools to AI assistants, with write actions switched off by default.

References and further reading

  1. Solace Messaging APIs overview · SolaceThe official list of APIs with Solace's own description of each.
  2. Solace Spring Cloud (Spring Cloud Stream binder and starters) · SolaceProducts on GitHub
  3. solace-pubsubplus on PyPI · Python Package Index
  4. SolaceSamples: getting-started code for every API · Solace on GitHub
  5. Solace Codelabs · Solace
  6. solace-broker-mcp · SolaceProducts on GitHub

← Protocols and APIs

Have a project that needs technical ownership?

Send us the situation. If it is not something we should take on, we will say so.