Canonical s-expressions are a way to format s-expressions into data packets suitable for network transmissions. To get a canonical s-exp, it has to be converted into a tree of byte streams, which can then be easily transmitted in a stream. The unique aspect of writing a given s-expression is ensured by adding suffixes with the size of the string and a colon separator, and removing spaces. Canonical s-expressions can also have optional hints, attached as a byte stream to the front of a csexp atom inside square brackets. Users can even generate hinted instances every time a hint is found.
https://docs.racket-lang.org/csexp/index.html