I'm biased, but I think postcard is pretty nice, and the "extra features" don't really cost much in terms of CPU or code size. It's not super well documented (because it's fragile and I don't know how to not make it that way), but there are two "forward compat" things you *can* do in the top level: * if your top level item is an *enum*, you can add new variants (but cannot re-order or change any existing variants) * if your top level item is a *struct*, you can add fields to the end (but cannot re-order or change any existing fields). This *sort of* composes, if you have an `enum { Whatever(struct) }`, you can modify the struct in the enum as well in the same way, but basically the rule is "adding at the tail is fine", since postcard only takes the bytes it needs during deserialization.