---
title: Our Stack
layout: docs
sitemap: false
toc: false
nav: devjobs
---
Our platform, the stuff that actually runs apps for our customers, is
built on Rust and Go. Developers on all of our platform teams
switch-hit between those two languages. We love them both, and
that's an attribute we're looking for in platform devs.
When a user aims their browser at an app hosted on Fly.io, they're
talking to `fly-proxy`, a Rust / Tokio / Hyper proxy that powers our
Anycast network. `fly-proxy` uses `attache`, our Go SQLite Consul
cache, and `corrosion`, our Rust SWIM-based state replication service,
to route requests to the right worker and VM.
Those VMs were booted up by `flyd`, our Go orchestrator. Persistent
encrypted storage for the VMs was provisioned by `vold`, another
orchestration component. `flyd` leverages the Go-based `containerd`
ecosystem to convert Docker containers into root filesystems for our
VMs.
The VMs themselves run under `firecracker`, Amazon's Rust-based
hypervisor (and the engine behind Lambda and Fargate). Our hardware!
Amazon's hypervisor code.
Inside the VM, our code gets control again: we own the `init` that
spins things up in the VM. `init` is Rust. More and more of our fun VM
tricks are features of our `init`.
To tell us what containers to boot up, our customers talk to our
GraphQL API. The backend for that API is a Rails app, running on
Postgres.
Most of our developer UX happens in `flyctl`, our Go-based
CLI. We're a CLI-first company.
Fancy customer UI stuff? Elixir! We love Elixir and sponsor the
Phoenix project. Generally, new UI stuff at Fly.io happens in
Elixir/Phoenix/LiveView. LiveView screams on Fly.io.
Our Stack
Our platform, the stuff that actually runs apps for our customers, is
built on Rust and Go. Developers on all of our platform teams
switch-hit between those two languages. We love them both, and
that’s an attribute we’re looking for in platform devs.
When a user aims their browser at an app hosted on Fly.io, they’re
talking to fly-proxy, a Rust / Tokio / Hyper proxy that powers our
Anycast network. fly-proxy uses attache, our Go SQLite Consul
cache, and corrosion, our Rust SWIM-based state replication service,
to route requests to the right worker and VM.
Those VMs were booted up by flyd, our Go orchestrator. Persistent
encrypted storage for the VMs was provisioned by vold, another
orchestration component. flyd leverages the Go-based containerd
ecosystem to convert Docker containers into root filesystems for our
VMs.
The VMs themselves run under firecracker, Amazon’s Rust-based
hypervisor (and the engine behind Lambda and Fargate). Our hardware!
Amazon’s hypervisor code.
Inside the VM, our code gets control again: we own the init that
spins things up in the VM. init is Rust. More and more of our fun VM
tricks are features of our init.
To tell us what containers to boot up, our customers talk to our
GraphQL API. The backend for that API is a Rails app, running on
Postgres.
Most of our developer UX happens in flyctl, our Go-based
CLI. We’re a CLI-first company.
Fancy customer UI stuff? Elixir! We love Elixir and sponsor the
Phoenix project. Generally, new UI stuff at Fly.io happens in
Elixir/Phoenix/LiveView. LiveView screams on Fly.io.