down
Source: ellipse "source" "tree" fill lightgreen
move
Upstream: ellipse "crates.io" small "PyPI" small "etc" small fill lightgreen
move
Server: ellipse "web server" small "APT repository" small fill lightgreen

move right from Upstream.e
Ambient: circle "ambient" fill cyan
down
move
Tars: file "tar" fill pink
move
VM: oval "VM" "(QEMU/KVM)" small fill pink

move right from Ambient.e then right then up until even with Source.n
down
Dep: cylinder "dependencies" fill yellow
move
Cache: cylinder "cache" fill yellow
move
Art: cylinder "artifacts" fill yellow
move

move right from Source.e then right until even with Ambient.n then up
User: dot "User" above

arrow from Source.se to Ambient.nw thin
arrow from Upstream.e to Ambient.w thin
arrow from Ambient.sw to  Server.ne thin

arrow from Ambient.ne to Dep.sw thin dashed <->
arrow from Ambient.e to Cache.w thin dashed <->
arrow from Ambient.se to Art.nw thin dashed <->

arrow from Tars.n to Ambient.s thin dashed <->
arrow from VM.n to Tars.s thin dashed <->

arrow from User.s to Ambient.n "invoke" aligned above dotted 
