I was a little confused, because the lede sentence was "Ropey is a utf8 text rope for Rust, designed to be the backing text-buffer for applications such as text editors."
Pretty much all text editors are expected to implement decorations and references, somehow, and some popular text buffer APIs support those.
https://github.com/swiftlang/swift-foundation/tree/main/Sour...
https://github.com/apple/swift-collections/tree/main/Sources...
From the wrapper's point of view, there's no difference between character and non-character data, and the whole buffer can be modeled as a collection of indices mapping ranges of the document to different kinds of data.
One of those indices could be a rope (mapping document ranges to character data, for the document text). Other kinds of indices could also be used. The important thing is that all edits go through the wrapper so that all the relevant indices get updated.