<!-- Release notes generated using configuration in .github/release.yml at v0.5.0 -->
This release introduces some major structural changes to ProxyStore over nearly 200 commits! The full changelog is listed below, but here's a quick overview of the primary change to ProxyStore's architecture.
Rather than providing different `Store` implementations that subclass `proxystore.store.base.Store`, there is now only a single `Store` type that is initialized with a `Connector`. The `Connector` is the interface to the low-level byte storage, while the `Store` provides the high-level ProxyStore interface and features. You can read more about the conceptual model in the [docs](https://docs.proxystore.dev/main/concepts/).
**Before:**
python
from proxystore.store import register_store
from proxystore.store.redis import RedisStore
store = RedisStore('my-store', host='localhost', port=1234)
register_store(store)
**Now:**
python
from proxystore.connectors.redis import RedisConnector
from proxystore.store import register_store
from proxystore.store import Store
store = Store('my-store', RedisConnector('localhost', 1234))
register_store(store)
The [`Connector`](https://docs.proxystore.dev/main/api/connectors/connector/#proxystore.connectors.connector.Connector) type is a [`Protocol`](https://docs.python.org/3/library/typing.html#typing.Protocol) which will enable third-party code to more easily extend the proxy model to other object communication and storage frameworks.
Upgrade Steps
Dependencies needed by specific `Connector` types have been moved to extras install options. The `all` option will install all possible dependencies. Installing ProxyStore without any extra will provide a minimal installation with only a few dependencies.
bash
$ pip install --upgrade proxystore[all]
Endpoint configuration files changed in 285 and 286. We recommend removing your old configurations and creating new ones.
bash
$ proxystore-endpoint stop {endpoint-name}
$ rm -r ~/.local/share/proxystore/{endpoint-name}
$ proxystore-endpoint configure {endpoint-name} ...
$ proxystore-endpoint start {endpoint-name}
What's Changed
Breaking Changes
* Refactor `Store` implementations into separate `Connector`s by gpauloski in https://github.com/proxystore/proxystore/pull/217
* Move some dependencies to extras by gpauloski in https://github.com/proxystore/proxystore/pull/223
* Rename signaling server to relay server by gpauloski in https://github.com/proxystore/proxystore/pull/229
* Better metric tracking for `Store`s by gpauloski in https://github.com/proxystore/proxystore/pull/237
* Enable automatic relay server reconnection by gpauloski in https://github.com/proxystore/proxystore/pull/268
* Change `Store.set()` to `Store.put()` by gpauloski in https://github.com/proxystore/proxystore/pull/283
* Rename `endpoint.{json,log}` to `config.json` and `log.txt` by gpauloski in https://github.com/proxystore/proxystore/pull/285
* Improve endpoint blob storage options by gpauloski in https://github.com/proxystore/proxystore/pull/286
* Refactor distributed in-memory connectors by gpauloski in https://github.com/proxystore/proxystore/pull/293
Enhancements
* Add shortcut cache check in `Store.exists()` by gpauloski in https://github.com/proxystore/proxystore/pull/232
* Record last event time in `TimeStats` by gpauloski in https://github.com/proxystore/proxystore/pull/239
* Support unregistering stores by instance by gpauloski in https://github.com/proxystore/proxystore/pull/244
* Add context manager support to connector implementations by gpauloski in https://github.com/proxystore/proxystore/pull/245
* Add `test` subcommand to `proxystore-endpoint` by gpauloski in https://github.com/proxystore/proxystore/pull/247
* Improve peer connection error handling by gpauloski in https://github.com/proxystore/proxystore/pull/249
* Support "dormant" connectors in `MultiConnector` by gpauloski in https://github.com/proxystore/proxystore/pull/266
* Make address/interface optional for `{Margo,UCX,ZeroMQ}Connector` by ValHayot in https://github.com/proxystore/proxystore/pull/298
Bug Fixes
* Fix `ZeroMQServer` pickle error with multipart messages by gpauloski in https://github.com/proxystore/proxystore/pull/219
* Reuse HTTP connections in endpoint clients by gpauloski in https://github.com/proxystore/proxystore/pull/290
Internal Changes
* Use `click` for command line interfaces by gpauloski in https://github.com/proxystore/proxystore/pull/226
* Improve logging throughout the package by gpauloski in https://github.com/proxystore/proxystore/pull/243
* Change ASGI to Uvicorn from Hypercorn by gpauloski in https://github.com/proxystore/proxystore/pull/284
Documentation
* Improve documentation by gpauloski in https://github.com/proxystore/proxystore/pull/220
* Include API inventories for external packages by gpauloski in https://github.com/proxystore/proxystore/pull/228
* Fix docker command in contributing guide by gpauloski in https://github.com/proxystore/proxystore/pull/257
* Improve README with better description and example by gpauloski in https://github.com/proxystore/proxystore/pull/271
* Documentation improvements for endpoints and figures by gpauloski in https://github.com/proxystore/proxystore/pull/272
* Migrate funcX to Globus Compute by gpauloski in https://github.com/proxystore/proxystore/pull/276
* Use "Attributes" section for NamedTuple/Dataclass docstrings by gpauloski in https://github.com/proxystore/proxystore/pull/282
* Add a Globus Compute guide by gpauloski in https://github.com/proxystore/proxystore/pull/288
Package Changes
* Add `[all]` extras install option by gpauloski in https://github.com/proxystore/proxystore/pull/227
Development Workflows
* Pin UCX and Margo versions in tox by gpauloski in https://github.com/proxystore/proxystore/pull/213
* Add PR branch cache cleanup action by gpauloski in https://github.com/proxystore/proxystore/pull/230
* Adjust PR tags and release template by gpauloski in https://github.com/proxystore/proxystore/pull/291
* Enable PyLint warning/errors by gpauloski in https://github.com/proxystore/proxystore/pull/294
New Contributors
* charliesabino made their first contribution in 293
**Full Changelog**: https://github.com/proxystore/proxystore/compare/v0.4.1...v0.5.0