* Some form of discoverability. Ideally there'd be good docs available explaining the behaviour of the library in human friendly language, with multiple code examples. Bonus points for making the library open source and linking directly to the implementation from documentation.
* No breaking changes. It's better to create a new library than try and shoehorn a significantly different release into semantic versioning for the sake of it.
* "Escape hatches" for effectful functions to override default behaviour. For example, a HTTP client library isn't going to be very useful if you can't override pretty much any configuration property.
* Being explicit about any side effects resulting from the code, either in naming or by documentation.