Microservices are great to split the functionality of an application across multiple processes, containers or vms. At their core however, there are still the age-old concepts of rpc, publish-subscribe and work queue, with the central state of our application is stored in a database. With that, we need to answer the same age-old questions, - How can we support a constantly changing state? - How can we move streams of data across our microservice network? - How can we split system state across multiple processes, containers or vm? Enter Upring. Upring is a library to support application-level sharding of “live” data, it supports node streams, and enables every developer to implement application level sharding. What can we shard? As an example, Upring allows to connect two user with a bidirectional communication (the beloved websocket) across hundreds of machines. At its core, it is a state discovery system.