Clean - yes. Working with CF Workers was (and I think still is) a joy. However, I'm curious if, with this many features that are mostly unique to CF, will there be a feeling of vendor lock-in when developing more complex apps? Serverless functions can be usually moved back and forth pretty easily, but if you become dependent on CF-specific features how hard will it be to migrate if there comes a need to?
Note that although there is unfortunately no complete standard that we could follow for `connect()`, the API is largely based on the JavaScript streams standard. `connect()` itself returns a ReadableStream and a WritableStream representing the two sides of the socket -- both standard APIs that are widely implemented by browsers and others. Hopefully, this means that it doesn't take much to adapt code to any other API that another vendor might provide.
That is exactly my thought. As long as the APIs remain clean: SQL for D1, simple KV-store for KV etc with clear semantics, it will be agnostic. Especially since caching sits at the core.