Ray is a distributed computing framework that integrates with various libraries and frameworks, providing benefits such as fine-grained control over worker scheduling and fault tolerance, the ability to run subroutines within larger programs, and passing data in-memory to downstream stages. Ray's Level 1 integration allows for scheduling only, with communication done outside of Ray, which is suitable for libraries that have mature internal communication stacks but want additional features. This level of integration provides benefits such as low latency communication, parallelization of computation into many individual tasks, and coordination of complex actor or task topologies. Libraries may also leverage Ray's distributed object store, which offers features like first-class object references, shared-memory support, and object spilling. The level of effort to integrate varies depending on the library, with Level 1 integration typically starting at fewer than 200 lines of code, and Level 2-3 integration ranging from straightforward to high effort. Ray libraries can work together using patterns such as running one distributed library as a subroutine of another, passing data between libraries, or simply invoking multiple libraries in separate tasks and actors.