# Release Notes
Version 2.1.0 of the BaSyx-Python SDK is a **feature release that brings the SDK up to date with the v3.1 line of the AAS specifications** and significantly expands the server.
The metamodel now implements **Part 1 v3.1.2**, with matching updates to the **IEC 61360 Data Specification (Part 3a v3.1.1)** and the **AASX Package File Format (Part 5 v3.1)**. On the server side, the HTTP API has been updated to **Part 2 API v3.1**, and the server now ships **Registry** and **Discovery** interfaces in addition to the Repository, each available as its own standalone Docker service.
As part of expanding the server, the `AbstractObjectProvider` and its object stores were refactored to support the updated AAS metamodel through generic typing and naming aligned with `Identifiable`. This is a refactoring only: the usability of the SDK remains unchanged and **you do not have to change any existing code**. The previous classes and methods (`DictObjectStore`, `SetObjectStore`, `LocalFileObjectStore`, `CouchDBObjectStore`, and `AbstractObjectProvider.get_identifiable()`) are now deprecated and emit warnings, but continue to work as before. Going forward, please use the new `DictIdentifiableStore`, `SetIdentifiableStore`, `LocalFileIdentifiableStore`, `CouchDBIdentifiableStore` classes and the generic `get_item()` method instead.
This release implements the following versions of the AAS specification:
Part 1: Metamodel: v3.1.2 (01001-3-1-2)
Schemata (JSONSchema, XSD): v3.1.2 (IDTA-01001-3-1-2)
Part 2: API: v3.1.1 (01002)
Part 3a: Data Specification IEC 61360: v3.1.1 (01003-a)
Part 5: Package File Format (AASX) | [v3.1 (01005)
# Changelog
**Notable:**
- Update metamodel to **Part 1 v3.1.2** (See: #484)
- Update HTTP API to **Part 2 v3.1** for the AAS- and Submodel-Repository (See: #421)
- Update Data Specification IEC 61360 to **Part 3a v3.1.1** (See: #487)
- Update AASX Package File Format to **Part 5 v3.1** (See: #486)
- Expand the server with **Registry and Discovery** APIs (See: #407)
- Implement primitive data types in the API (See: #442)
- Refactor the server package structure (See: #467)
- Build and publish Docker images for all services and architectures (See: #556)
**Improvements:**
- Allow optional `first`/`second` in relationship elements (See: #587)
- Allow optional `valueId` in `ValueReferencePair` for JSON and XML (See: #579)
- Allow optional `contentType` in `Blob` and `File` (See: #572)
- Tighten `dataSpecification` reference type in JSON (See: #581)
- Add `rename_file` to `DictSupplementaryFileContainer` (See: #434)
- Add support for loading/saving thumbnails in AASX packages (See: #436)
- Disallow invalid types in MultiLanguage objects (See: #431)
- Refactor `AbstractObjectProvider` (See: #430)
- Consolidate the duplicated service-specification implementation (See: #527)
- Add a deprecated discovery route for compatibility (See: #524)
- Always include `paging_metadata` in paginated list responses (See: #538)
- Improve the BCE date error message (See: #578)
- Add standalone Docker Compose configurations for Repository, Registry and Discovery (See: #556)
- Document pulling server images from Docker Hub (See: #489)
- Add a tutorial for Submodel navigation (See: #411)
**Bugfixes:**
- Fix parsing of negative dates (See: #586)
- Handle XSD end-of-day midnight `24:00:00` (See: #582)
- Fix `MultiLanguageNameType` value length to 128 (See: #577)
- Fix `UnsignedInt` XSD type name (See: #589)
- Fix `OrderedNamespaceSet.__setitem__` int remove-before-add and exhausted slice iterator (See: #517)
- Fix mutation persistence in persistent backends (See: #553)
- Fix `GET /shells?assetIds` returning empty for multiple `globalAssetId` values (See: #512)
- Increment refcount in `DictSupplementaryFileContainer._assign_unique_name` (See: #513)
- Make XML `DataSpecificationIEC61360.value` independent of `value_format` (See: #510)
- Fix `LocalFileIdentifiableStore` to count and iterate only `.json` store files (See: #507)
- Fix `load_directory` silently dropping all descriptors (See: #545)
- Fix `NamespaceSet.pop()` to remove items from all backends (See: #514)
- Align `ServiceSpecificationProfileEnum` with IDTA-01002 v3.1.2 (See: #541)
- Pass `paging_metadata` kwarg correctly in AAS/Submodel-ref and ConceptDescription listings (See: #540)
- Fix Discovery persistence and lookup handling (See: #543)
- Fix registry log output (See: #536)
- Align API base paths (See: #534)
- Correct pagination `cursor` calculation and `limit` default (See: #526)
- Raise `BadRequest` (400) on malformed `assetIds` instead of a 500 (See: #511)
- Fix `walk_submodel()` skipping `Entity` and `Operation` children (See: #465)
- Fix empty-cache handling in `LocalFileIdentifiableStore` (See: #463)
- Fix langtag constraints in `LangStringSet` (See: #478)
- Remove dead `DataSpecificationIEC61360.value_id` JSON deserialization code (See: #509)
- Fix `--quite` typo, renamed to `--quiet` in the compliance tool CLI (See: #506)
**Testing & Internal:**
- Increase SDK test coverage and extend `ObjectStore`/`AbstractObjectStore` tests (See: #483, #569, #557)
- Add API base-path consistency tests (See: #583, #534)
- Replace compliance-tool fixture files with mocking (See: #575)
- Add unit tests for `check_directory` and the AASX reader (See: #571, #448)
- Correct the `compliance-tool` name in `pyproject.toml` (See: #585)
- Replace `acplt.org` with `example.org` in example data (See: #474)
For more details, check out https://github.com/eclipse-basyx/basyx-python-sdk/releases/tag/2.1.0