Contributor Spotlight: François de Metz

Learn how this prolific open source author built his own Steampipe plugins to access a diverse set of SaaS APIs using SQL as the common language.

Jon Udell
5 min. read - Aug 05, 2022
Learn how this prolific open source author built his own Steampipe plugins to access a diverse set of SaaS APIs using SQL as the common language.

François de Metz is an independent software developer based in Paris, France. He's the author of five Steampipe plugins. We asked him to tell us about how Steampipe and its plugins fit into his development workflows.


His first plugin defined tables for querying Scalingo, a PaaS (platform-as-a-service) offering that's comparable to Heroku. When François first discovered Steampipe he wasn't sure exactly how he intended to use it, but suspected that working with APIs using SQL would prove useful. Then the first use case arrived. "I realized we could use it to audit the users of the apps we deploy to Scalingo," he says. "When you offboard a user you may need to do that across many apps, it's cumbersome, maybe we could audit to ensure all collaborators are still in the company."

A typical solution would use a script to crawl the Scalingo API for deployed apps and then check each. But that's a one-off script, you'd have to write a different one to do a similar kind check for, say, tokens. Even with the help of an API client, each of these scripts would entail a lot of redundant low-level wrangling. What's more, you can't easily combine these kinds of scripts. François realized that SQL makes it possible to join both within and across APIs. "The big benefit is the common language, SQL," he says. "embedded in one general-purpose tool that handles what otherwise requires many one-off scripts." His SQL knowledge needed a bit of an update: Common Table Expressions were new to him, as were some Postgres idioms. But basic SQL is all you need to benefit from Steampipe, and his foundational knowledge served him well.


The next plugin was Airtable which arrived around the same time as -- and influenced the development of -- the CSV plugin. Airtable and CSV were the first plugins to use dynamic vs fixed schemas. Originally, the plugin SDK required explicit and precompiled column definitions, but that wouldn't work for Airtable or CSV since those definitions aren't known in advance and can't be precompiled. Thus was born Steampipe's dynamic schema mechanism, which carries forward in the Config, Terraform, and AWS CloudFormation plugins.

Airtable had become a mission-critical database for François and his team. As its use evolved, the team created a web app to manage the database. To support that app, they needed a better way to query Airtable. "Since there is no JOIN in Airtable," he says, "I thought it would be helpful to use Steampipe to query live data from Airtable and join across tables." Now, scripts that use Steampipe are querying Airtable on a regular basis.

Baleen, Gandi, OVH

These are other infrastructure services that François and his team use. Again the benefit is reasoning over diverse APIs in a common way. With a couple of plugins under his belt, it was quick to build the next three. They all landed on the Steampipe Hub around the same time, and we were inspired to see the flurry of activity!

What's next: FreshPing

One of his next projects is a plugin for FreshPing, an uptime monitor. François wants to ensure that when the team creates new Scalingo apps they can automatically check that those apps' production domains are being monitored by FreshPing. He's finalizing a plugin to enable queries that join data across these two services.

Thank you, François, for all you've done with and for Steampipe. We look forward to your continuing adventures!

For anyone interested in developing Steampipe plugins, please check out the docs and bring your questions and comments to our friendly Slack community.