Nats-py

Latest version: v2.9.0

Safety actively analyzes 702367 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 6

2.1.4

Fixed

- Fix to header compatibility across clients (https://github.com/nats-io/nats.py/issues/322)

Added

- Added `num_replicas` field to Consumer config (https://github.com/nats-io/nats.py/pull/326)

2.1.3

Fixes

- Fixes to headers parser when handling empty keys

2.1.2

Added

- Added more methods to the `JetStreamManager` (https://github.com/nats-io/nats.py/pull/315)
- Added validation to subject and queue for `subscribe` (https://github.com/nats-io/nats.py/pull/302)

Changed

- Changed `sub.Fetch` to not block until all messages arrive, it now yields when there are some pending and handle new 4XX temporary status sent by the server

Fixed

- Fixed ssl_context referenced before assignment (https://github.com/nats-io/nats.py/issues/292) by marianojabdala
- Fixed `cluster` should be optional in `Placement` class (https://github.com/nats-io/nats.py/pull/310) by olgeni
- Fixed cancelling `next_msg()` does not cancel internal `_next_msg()` task (https://github.com/nats-io/nats.py/pull/301)

2.1.0

Added

- Added `pending_size` option on connect to set max internal pending size for flushing commands and a `flush_timeout` option to control the maximum time to wait for a flush.

For example to set it to 2MB only which is the default:

python
nats.connect(pending_size=2*1024*1024)


And similar to the nats.go client, it can be disabled if set to be negative:

python
nats.connect(pending_size=-1)


When pending size is disabled, then any published message during a disconnection will result in a synchronous `OutboundBufferLimitError` thrown when publishing.

To control the flushing there is a `flush_timeout` option that can be passed on connect as well.

python
nats.connect(flush_timeout=10)


By default, there is no flush timeout (it is `None`) so the client can wait indefinitely during a flush similar to nats.go (eventually the ping interval ought to unblock the flushing). These couple of changes also improve the publishing performance of the client, thanks to [charbonnierg](https://github.com/charbonnierg) for contributing to this issue.

- *JetStream*: Added NAK delay support (https://github.com/nats-io/nats.py/pull/268, thanks databasedav for the contribution)
- Added custom inbox prefix option (https://github.com/nats-io/nats.py/pull/276/files thanks YiuRULE for the contribution!)

Fixed

- Fixed auto unsubscribe (https://github.com/nats-io/nats.py/pull/280)
- Fixed result of https://github.com/nats-io/nats.py/pull/285 (thanks [nosammai](https://github.com/nosammai) for the fix)

Changed

- Changed `nc.flush()` to now throw `FlushTimeoutError` instead which is a subtype of `TimeoutError` that it used be using for backwards compatibility.

- Changed EOF disconnections being reported as `StaleConnectionError` and they are instead a `UnexpectedEOF` error.

2.0.0

Major upgrade to the APIs of the Python3 client. For this release the client has also been renamed to be `nats-py` from `asyncio-nats-client`, it can now be installed with:

sh
pip install nats-py

With NKEYS / JWT support
pip install nats-py[nkeys]


This version of the client is not completely compatible with previous versions of the client and it is designed to be used with Python 3.7.

Overall, the API of the client should resemble more the APIs of the Go client:

python
import nats

async def main():
nc = await nats.connect("demo.nats.io")

sub = await nc.subscribe("hello")

await nc.publish("hello")

msg = await sub.next_msg()
print(f"Received [{msg.subject}]: {msg.data}")

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


There is support for NATS Headers ⚡

python
import asyncio
import nats
from nats.errors import TimeoutError

async def main():
nc = await nats.connect("demo.nats.io")

async def help_request(msg):
print(f"Received a message on '{msg.subject} {msg.reply}': {msg.data.decode()}")
print("Headers", msg.header)
await msg.respond(b'OK')

sub = await nc.subscribe("hello", "workers", help_request)

try:
response = await nc.request("help", b'help me', timeout=0.5)
print("Received response: {message}".format(
message=response.data.decode()))
except TimeoutError:
print("Request timed out")

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


It also now includes `JetStream` support:

python
import asyncio
import nats

async def main():
nc = await nats.connect("demo.nats.io")

Create JetStream context.
js = nc.jetstream()

Persist messages on 'foo' subject.
await js.add_stream(name="sample-stream", subjects=["foo"])

for i in range(0, 10):
ack = await js.publish("foo", f"hello world: {i}".encode())
print(ack)

Create pull based consumer on 'foo'.
psub = await js.pull_subscribe("foo", "psub")

Fetch and ack messagess from consumer.
for i in range(0, 10):
msgs = await psub.fetch()
for msg in msgs:
print(msg)

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


As well as `JetStream KV` support:

python
import asyncio
import nats

async def main():
nc = await nats.connect()
js = nc.jetstream()

Create a KV
kv = await js.create_key_value(bucket='MY_KV')

Set and retrieve a value
await kv.put('hello', b'world')
entry = await kv.get('hello')
print(f'KeyValue.Entry: key={entry.key}, value={entry.value}')
KeyValue.Entry: key=hello, value=world

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


New Documentation site:

The following site has been created to host the API of the Python3 client: https://nats-io.github.io/nats.py/
The contents of the doc site can be found in the following branch from this same repo: https://github.com/nats-io/nats.py/tree/docs/source

Breaking changes

- Changed the return type of `subscribe` instead of returning a sid.

- Changed suffix of most errors to follow PEP-8 style and now use the `Error` suffix. For example, `ErrSlowConsumer` is now `SlowConsumerError`. Old style errors are subclasses of the new ones so exceptions under `try...catch` blocks would be still caught.

Deprecated

Several areas of the client got deprecated in this release:

- Deprecated `is_async` parameter for `subscribe`
- Deprecated `Client.timed_request`
- Deprecated passing `loop` parameter to most functions
- Deprecated `auto_unsubscribe` instead preferring `sub.unsubscribe`

Thanks

Special thanks to brianshannan charliestrawn orsinium charbonnierg for their contributions in this release!

2.0.0rc1

Major upgrade to the APIs of the Python3 client! For this release the client has also been renamed to be `nats-py` from `asyncio-nats-client`, it can now be installed with:

sh
pip install nats-py

With NKEYS / JWT support
pip install nats-py[nkeys]


This version of the client is not completely compatible with previous versions
of the client and it is designed to be used with Python 3.7.

Overall, the API of the client should resemble more the APIs of the Go client:

python
import nats

async def main():
nc = await nats.connect("demo.nats.io")

sub = await nc.subscribe("hello")

await nc.publish("hello")

msg = await sub.next_msg()
print(f"Received [{msg.subject}]: {msg.data}")

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


There is support for NATS Headers ⚡

python
import asyncio
import nats
from nats.errors import TimeoutError

async def main():
nc = await nats.connect("demo.nats.io")

async def help_request(msg):
print(f"Received a message on '{msg.subject} {msg.reply}': {msg.data.decode()}")
print("Headers", msg.header)
await msg.respond(b'OK')

sub = await nc.subscribe("hello", "workers", help_request)

try:
response = await nc.request("help", b'help me', timeout=0.5)
print("Received response: {message}".format(
message=response.data.decode()))
except TimeoutError:
print("Request timed out")

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


It also now includes `JetStream` support:

python
import asyncio
import nats

async def main():
nc = await nats.connect("demo.nats.io")

Create JetStream context.
js = nc.jetstream()

Persist messages on 'foo' subject.
await js.add_stream(name="sample-stream", subjects=["foo"])

for i in range(0, 10):
ack = await js.publish("foo", f"hello world: {i}".encode())
print(ack)

Create pull based consumer on 'foo'.
psub = await js.pull_subscribe("foo", "psub")

Fetch and ack messagess from consumer.
for i in range(0, 10):
msgs = await psub.fetch()
for msg in msgs:
print(msg)

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


As well as `JetStream KV` support:

python
import asyncio
import nats

async def main():
nc = await nats.connect()
js = nc.jetstream()

Create a KV
kv = await js.create_key_value(bucket='MY_KV')

Set and retrieve a value
await kv.put('hello', b'world')
entry = await kv.get('hello')
print(f'KeyValue.Entry: key={entry.key}, value={entry.value}')
KeyValue.Entry: key=hello, value=world

await nc.close()

if __name__ == '__main__':
asyncio.run(main())


New Documentation site:

The following site has been created to host the API of the Python3 client: https://nats-io.github.io/nats.py/
The contents of the doc site can be found in the following branch from this same repo: https://github.com/nats-io/nats.py/tree/docs/source

Breaking changes

- Changed the return type of `subscribe` instead of returning a sid.

- Changed suffix of most errors to follow PEP-8 style and now use the `Error` suffix. For example, `ErrSlowConsumer` is now `SlowConsumerError`. Old style errors are subclasses of the new ones so exceptions under `try...catch` blocks would be still caught.

Deprecated

Several areas of the client got deprecated in this release:

- Deprecated `is_async` parameter for `subscribe`

- Deprecated `Client.timed_request`

- Deprecated passing `loop` parameter to most functions

Page 3 of 6

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.