Changelog¤
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¤
Added¤
Changed¤
Removed¤
[1.1.4] 2026-08-13¤
Added¤
Changed¤
- Updated CI infrastructure to new
compas-dev/compas-actions
Removed¤
[1.1.3] 2026-08-13¤
Added¤
Changed¤
Removed¤
[1.1.2] 2026-08-13¤
Added¤
Changed¤
Removed¤
[1.1.1] 2026-08-13¤
Added¤
Changed¤
Removed¤
[1.1.0] 2026-08-10¤
Added¤
- Added a
compas_pb migratecommand that re-encodes data written by an older, wire-incompatible version into the current format. It decodes the blob in an ephemeraluvenvironment holding the version that wrote it, bridges through COMPAS JSON, and re-encodes with the current build. Reads from a file or stdin, writes to a file or stdout, and--inspectreports which version wrote a blob without migrating it. - Added
compas_pb.cli.migrate_bytesandcompas_pb.cli.detect_wire_versionfor the same migration from Python. - Added a migration guide at
docs/migration.md.
Changed¤
- Changed the incompatible-wire-format error to point at
compas_pb migrateinstead of only telling the user to re-serialize the source.
Removed¤
[1.0.0] 2026-08-05¤
Added¤
Changed¤
- Breaking: The wire format changed in a way that is not backwards compatible. Once the version is bumped at release, data serialized by older versions will be refused on deserialization (the wire-version check is now a hard gate; compatibility follows SemVer — under 0.x every minor is breaking, from 1.0 on only major bumps are).
- Breaking: Auto-generated guids no longer round-trip. They were always session-local
uuid4s and never stable across save/load; only explicitly set guids are now serialized. - Reworked the wire format into a fully lossless binary mode: all geometry coordinate/scalar fields are now
doubleinstead offloat, sofloat64geometry round-trips exactly. - Improved serialization/deserialization performance without changing the wire format: plugin discovery now runs once per operation instead of once per element, the legacy Any-unpacking probes in
_deserialize_anyonly run for Any-packed messages, and the columnar attribute/mesh writers drop a redundant sort and per-element proto calls. Mesh serialize is ~2x faster and graph round-trip ~1.5x faster. - Changed mesh serialization to read vertex
x/y/zfrom the vertex attribute dict (falling back todefault_vertex_attributes) instead of callingMesh.vertex_coordinates().Meshsubclasses that overridevertex_coordinates()to compute coordinates rather than store them will therefore serialize the stored/default values, not the computed ones. Subclasses that only store coordinates — the normal case, including everyMesh.from_*constructor — are unaffected. If you rely on a computed override, write the resulting coordinates into the vertex attributes before serializing, or register your own serializer for the subclass. - Changed
AnyDatato use explicitint64/double/dict_value/list_valuearms instead of routing values throughgoogle.protobuf.Value/Any, so integral floats no longer come back as ints and nested dicts/lists no longer carry a type URL.Mesh/Graphare now fully lossless (canonical hash matches). - Changed mesh vertices, pointcloud, polyline, polygon, bezier and polyhedron points to a flat packed
repeated doublelayout, and mesh faces to CSR form (face_vertices+face_sizes), instead of one message per point/face. - Changed per-element attributes (mesh vertices/faces/edges and graph nodes/edges) to a columnar
repeated AttributeColumnlayout with packed numeric arrays, replacing the previous per-elementmap<string, AnyData>. Empty/absent attribute sets cost nothing. - Changed
GraphDatato store node keys once, node attributes (includingx/y/z) column-wise, and edges as index pairs into the node keys. - Changed
guidandnameto only be serialized when explicitly set. Auto-generated guids (session-localuuid4s) no longer round-trip; explicit guids still do. - Changed
Rotationto be stored as its flattened 4x4 matrix (like other transforms) and reconstructed viaRotation.from_matrix, so rotations round-trip bit-exact. - Changed the wire-version check into a hard gate: deserialization now raises on a missing or incompatible wire version (compatibility follows SemVer) instead of warning and continuing.
Removed¤
[0.5.0] 2026-05-08¤
Added¤
- Added support for attributes of
compas.datastructures.Mesh(mesh, edges, vertices, faces attributes) to be serialized and deserialized. PointData is backwards compatible with previous versions, so vertex attributes are filtered to removex,y,zkeys. - Added support for
compas.datastructures.Graphserialization and deserialization.
Changed¤
Removed¤
[0.4.10] 2026-04-15¤
Added¤
Changed¤
- Better handling of os and architecture combinations in the invocations module.
Removed¤
[0.4.9] 2026-02-16¤
Added¤
Changed¤
- Refactored proto definitions from 31 separate files into three organized files (
geometry.proto,datastructures.proto,message.proto) to better reflect COMPAS package structure. - Fixed
guidisn't maintained round-trip on some types.
Removed¤
[0.4.8] 2026-01-05¤
Added¤
Changed¤
- Migrated documentation to mkdocs.
Removed¤
[0.4.7] 2025-12-11¤
Added¤
- Added support for
generate-proto-classesto create.pyifiles for generated Python classes.
Changed¤
- Migrated the documentation website to MkDocs Material from Sphinx.
Removed¤
[0.4.6] 2025-11-17¤
Added¤
Changed¤
- Fixed handling of serialized
Nonevalues.
Removed¤
[0.4.5] 2025-11-03¤
Added¤
Changed¤
- Fixed empty assets
zipfile with different language support.
Removed¤
[0.4.4] 2025-10-16¤
Added¤
Changed¤
Removed¤
[0.4.3] 2025-10-16¤
Added¤
Changed¤
Removed¤
[0.4.2] 2025-10-16¤
Added¤
- Added support for
compas.geometry.Capsuleserialization and deserialization. - Added support for
compas.geometry.Quaternionserialization and deserialization. - Added support for
compas.geometry.Scaleserialization and deserialization. - Added support for
compas.geometry.Reflectionserialization and deserialization. - Added support for
compas.geometry.Shearserialization and deserialization. - Added support for
compas.geometry.Projectionserialization and deserialization. - Added support for
compas.geometry.Bezierserialization and deserialization. - Added support for
compas.geometry.Hyperbolaserialization and deserialization. - Added support for
compas.geometry.Parabolaserialization and deserialization. - Added support for
compas.geometry.Polyhedronserialization and deserialization.
Changed¤
- Fixed running
protocfails with permission denied on Mac.
Removed¤
[0.4.1] 2025-10-13¤
Added¤
Changed¤
- Fixed
invoketask to work on MacOS with Apple Silicon.
Removed¤
[0.4.0] 2025-09-10¤
Added¤
- Added attribute
versioninmessage.prototo track/ship the package version - Added
.protofile into build package. - Added
FallbackDatamemberfallbacktoAnyDatato allow for fallback serialization of unknown types.
Changed¤
- Changed plugin discovery to use entry points instead of the COMPAS plugin system's name scanning.
- Added
importlib_metadataas a conditional dependency to support Python <= 3.9. - Renamed
compas_pb.IDLtocompas_pb.PROTOBUF_DEFS.
Removed¤
- Removed
compas_pb.DATA. - Removed
compas_pb.DOCS. - Removed
compas_pb.TEMP.
[0.3.1] 2025-08-27¤
Added¤
- Added
create_class_assetsfor invoke task to package the proto generated class file withcpp,csharpinto assets.
Changed¤
- Fixed
compas_pbsupport in Python 3.9.
Removed¤
[0.3.0] 2025-08-26¤
Added¤
- Added module
compas_pb.invocationswhich offers re-usable protobuf related tasks for plugins.
Changed¤
- remove
PrimitiveDataintoAnyDatawithGoogle.WellKownType.value.
Removed¤
[0.2.0] 2025-08-20¤
Added¤
- change
ListData.dataandDictData.datato better naming ofListData.itemsDictData.items. - Added support for
compas.geometry.Planeserialization and deserialization. - Added support for
compas.geometry.Polygonserialization and deserialization. - Added support for
compas.geometry.Boxserialization and deserialization. - Added support for
compas.geometry.Arcserialization and deserialization. - Added support for
compas.geometry.Sphereserialization and deserialization. - Added support for
compas.geometry.Cylinderserialization and deserialization. - Added support for
compas.geometry.Coneserialization and deserialization. - Added support for
compas.geometry.Torusserialization and deserialization. - Added support for
compas.geometry.Ellipseserialization and deserialization. - Added support for
compas.geometry.Polylineserialization and deserialization. - Added support for
compas.geometry.Pointcloudserialization and deserialization. - Added support for
compas.geometry.Transformationserialization and deserialization. - Added support for
compas.geometry.Translationserialization and deserialization. - Added support for
compas.geometry.Rotationserialization and deserialization.
Changed¤
Removed¤
[0.1.1] 2025-08-07¤
Added¤
Changed¤
- Removed debug print from registration.
- Added missing docs URL to the README.
Removed¤
[0.1.0] 2025-08-07¤
Added¤
Changed¤
- Changed to use the native protobuf Any to deal with our arbitrary data.