Logbook - 2022-07-18

A 1950s style cartoon lady pointing at a vintage flight logbook
Image by Annie Ruygt

This is a Logbook post. It tells you what we’ve been up to here at Fly.io, to make running your code close to users better in all the ways. The proof of the pudding is in the eating, though, so you should dig in now; you can have an app up and running in mere minutes.

We have some real gems in this edition. Have you ever wished you could grow the storage volume on a Fly.io app? Now you can!!

What about this one: Ever wished that the $99 Pro Plan would include $99 of usage credits? OK, that one may have been a little bit specific. Conversely, have you ever wished that $99+ of monthly resource usage would come with support by email? Now it can!

I don’t want to write spoilers for everything, so read on.

The changelog’s broken up into sections this time around, largely to corral the ongoing torrent of flyctl improvements. Keep your flyctl up to date to take advantage. If you’re playing (or working) with our new fast-booting machines VMs and flyctl, be sure to scan these changes! As always, if you’re interested in digging deeper into flyctl changes, dive into the releases page on GitHub.

Grab bag!

  • [Feature] changelog The Pro Plan now includes usage credits equivalent to its price: $99. Read more.
  • [Feature] We are now SOC2-compliant. If you know, you know. But you should read the blog post regardless. It’s fun. SOC2: The Screenshots Will Continue Until Security Improves
  • [Feature] Added support for Volume expansion via fly volumes extend <id>. This feature is now available with flyctl version v0.0.350.
  • [Feature] Added SFTP support to Hallpass. It’s a pain to move files to and from a Fly app. Now you can scp or sftp files by connecting to 6PN over WireGuard. We haven’t yet integrated this into flyctl.
  • [Feature] Personal Organizations are no longer special 🎉 meaning the default organization we expect every user to have is less restricted. You can now add/remove members and upgrade your plan.
  • [Feature] Added a new transit provider and some BGP routing announcement changes with Netactuate. This should improve routing, which should improve latency for customers.
  • [Feature] Updated our Heroku webhook handling to email users when we’ve been unable to refresh their tokens on our end, and thus unable to auto-deploy their Heroku app releases to Fly.io.
  • [Feature] Wrote an internal walkthrough on updating customer account information in Stripe, to make it easier for team members to help a customer update their info—which means it’s done faster for the customer!
  • [Fix] Fixed a bug that may have been preventing autoscaling from working properly for ~75% of all apps using the feature.
  • [Fix] Fixed the Fly Redis image to start correctly, error if something goes wrong at startup, and only require REDIS_PASSWORD to boot.
  • [Fix] Creating an app via the GraphQL API with a null runtime used to result in a cryptic error for people using the API directly. The API now properly enforces our default “Firecracker” runtime on app create, so this shouldn’t happen anymore.
  • [Fix] Resolved some more issues folks have found by using the API directly. Trying to execute a template deployment via the API without defining apps in the template input would respond with a generic server error; it should now respond with a validation message. Also, fetching the flyctl version via GraphQL was causing generic errors - this is no longer the case.
  • [Docs] Added docs for mounting persistent volumes via the machines API.
  • [Docs] Updated the Laravel docs with details on changing the PHP version, and getting full stack traces.
  • [Blog] Published The Serverless Server, a delightful romp through the building of a fictitious, yet somehow very familiar, Functions-as-a-Service service, from the metal up.


  • [Feature] flyctl (=fly) with LOG_LEVEL=debug now formats and colorizes JSON requests and responses for readability.
  • [Feature] Deprecated fly create in favor of fly apps create so as not to have to keep arguments/flags in sync.
  • [Feature/Fix] We fixed a regression in fly launch for Phoenix apps causing the config file to lose the PORT environment variable. We also added full-stack tests that detect fly launch regressions for future Phoenix releases and flyctl versions.
  • [Feature] Improved the Laravel launcher for the fly launch command via Laravel Launcher improvements.
  • [Feature] Split up flyctl launch scanners to make them easier to work on, and to more clearly indicate which frameworks we support and where to contribute.
  • [Fix] Fixed a flyctl regression preventing the api module from being imported externally.

flyctl & machines

  • [Feature] fly deploy now supports machine-based apps by adding version = 2 to fly.toml. fly status also works for them, and new machine apps may be launched with fly machine launch. More details about this coming soon, along with docs on the new config format.
  • [Feature] flyctl machine (=fly machine) commands now will work without having to specify an app name in fly.toml or on the command line. This is useful when working with individual machines across multiple apps.
  • [Feature] Mounted volumes are now preserved correctly across machine app deployments handled by fly deploy.
  • [Feature] fly machine status now displays attached volumes.
  • [Feature] Machines cloned with fly machine clone will no longer pass volume config to the clone.
  • [Feature] fly apps create --machines will create an app for the new machines platform up-front.
  • [Feature] For stopped/exited machines, fly machine status now shows the exit code, whether the machine was killed by OOM, and whether it was requested to be stopped.
  • [Feature] Added fly machine status --display-config to display the full syntax-highlighted machine config. Useful for debugging.
  • [Feature] Updated fly machine clone for the new machines API, allowing machines users to quickly scale an app up, or out to other regions.
  • [Feature] fly deploy for machines apps will now run rolling deploys, waiting for each VM to start before moving on.

Dashboard UI

  • [Feature] Added a volume size column to the volumes list on the dashboard app page (and formatted the date properly).
  • [Feature] Applied the cool new layout to our most-frequently-sent emails.

Screenshot of a password-reset email. It says "click this link to change your password," then there's a "Reset Password" button, and then "Be fast, this expires in a few minutes!"

  • [Feature] Changed the font in the image details section (in the dashboard app overview tab) to monospace to make it nicer to read.
  • [Feature] Changed date formatting for app secrets tab to make it easier to read when an environment variable was created.
  • [Feature] Simplified the flow on fly.io/documents. Clicking on an action button will just send you to the documents page for your personal org.
  • [Feature/Fix] Styling improvements for the app metrics page, for readability. Fixed some weirdness due to conflicts with leftover styling from the old Rails UI.