"Can one write a crate that..." <- i still haven't read it, but i think this link has been handed around a few times already when it came to this topic: https://nullderef.com/blog/rust-async-sync/ AFAIK you'll often find driver crates which implement only either async or sync. and from what i heard nowadays you should just write the driver as an async driver if it makes sense (i.e. if you use anything which might block, e.g. I2C) and sync if it's something super simple (e.g. just a wrapper around toggling some GPIOs where you don't have anything to `.await` anyway) full disclosure: i haven't written any async driver yet (mine fall squarely into the "i have nothing to block on" category)