What's Changed
Breaking Changes
- Object keys can no longer be specified (PR 90).
- [Store](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.base.html#proxystore.store.base.Store) keys are now named tuples (PR [91](https://github.com/proxystore/proxystore/pull/91)).
- Move `resolve_async` to [`proxystore.store.utils.resolve_async()`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.utils.html#proxystore.store.utils.resolve_async) (PR [103](https://github.com/proxystore/proxystore/pull/103)).
- Remove `init_store()` (PR [157](https://github.com/proxystore/proxystore/pull/157)).
- Support custom serializers (PR [174](https://github.com/proxystore/proxystore/pull/174)).
New Features
- ProxyStore Endpoints for peer-to-peer data transfer via WebRTC. Endpoints can be enabled using the `endpoint` extras install. E.g., `pip install proxystore[endpoint]`. See the [Guide](https://proxystore.readthedocs.io/en/latest/guides/endpoints.html) for more details (PRs [#51](https://github.com/proxystore/proxystore/pull/51), [#53](https://github.com/proxystore/proxystore/pull/53), [#106](https://github.com/proxystore/proxystore/pull/106), [#112](https://github.com/proxystore/proxystore/pull/112), [#129](https://github.com/proxystore/proxystore/pull/129), [#130](https://github.com/proxystore/proxystore/pull/130), [#131](https://github.com/proxystore/proxystore/pull/131), [#137](https://github.com/proxystore/proxystore/pull/137), and [#140](https://github.com/proxystore/proxystore/pull/140)).
- Add built-in Globus auth tools (PR [89](https://github.com/proxystore/proxystore/pull/89)).
- [`Store`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.base.html#proxystore.store.base.Store) can now be used as a context manager (PR [93](https://github.com/proxystore/proxystore/pull/93)).
- Add [`ProxyLocker`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.proxy.html#proxystore.proxy.ProxyLocker) and [`locked_proxy()`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.base.html#proxystore.store.base.Store.locked_proxy) (PR [108](https://github.com/proxystore/proxystore/pull/108)).
- Store object size in [`TimeStats`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.stats.html#proxystore.store.stats.TimeStats) (PR [135](https://github.com/proxystore/proxystore/pull/135)).
- Experimental support for distributed in-memory stores using three backends: websockets, margo, and UCX (PRs [144](https://github.com/proxystore/proxystore/pull/144) and [#163](https://github.com/proxystore/proxystore/pull/163)).
- Support `$PROXYSTORE_HOME` and `$XDG_DATA_HOME` for ProxyStore user data (PR [171](https://github.com/proxystore/proxystore/pull/171)).
Bug Fixes
- Improved typing on [`proxy()`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.base.html#proxystore.store.base.Store.proxy) (PR [82](https://github.com/proxystore/proxystore/pull/82)).
- Fix relative path bug in [`FileStore`](https://proxystore.readthedocs.io/en/latest/_autosummary/proxystore.store.file.html#proxystore.store.file.FileStore) (PR [100](https://github.com/proxystore/proxystore/pull/100)).
Non-package Changes
- Dockerfile and images for testing ProxyStore are now located at https://github.com/proxystore/images.
- API docs now use autosummary (PR [132](https://github.com/proxystore/proxystore/pull/132)).
- Major refactor to the test suite (PR [154](https://github.com/proxystore/proxystore/pull/154)).
- GitHub workflow improvements (PRs [155](https://github.com/proxystore/proxystore/pull/155) and [#156](https://github.com/proxystore/proxystore/pull/156)).
New Contributors
* ValHayot made their first contribution in https://github.com/proxystore/proxystore/pull/144
**Full Changelog**: https://github.com/proxystore/proxystore/compare/v0.3.3...v0.4.0