# NATS Messaging Concepts NATS messaging involves the electronic exchange of data among computer applications and provides a layer between the application and the underlying physical network. Application data is encoded as a message and sent by a publisher. The message is received, decoded, and processed by one or more subscribers. By providing a scalable service via a single URL, NATS makes it easy for programs to communicate across different environments, languages, and systems. All clients have to do is connect to the broker, subscribe or publish to a subject and process messages. With this simple design, NATS lets programs share common message-handling code, isolate resources and interdependencies, and scale by easily handling an increase in message volume.
graph nats {
graph [splines=ortho, nodesep=1];
publisher [shape="record", label="{Application 1 | NATS Publisher}"];
application [shape="record", label="{Application 3 | }"];
gnatsd [shape="box", label="", width=4, height=0, penwidth=1];
subscriber [shape="record", label="{ NATS Subscriber | Application 2}"];
publisher:nats -- gnatsd [penwidth=2];
application:nats -- gnatsd;
gnatsd -- subscriber:nats [penwidth=2, dir="forward"];
}