RESERVE Pipelines Made Easy

A long string of piped commands can look intimidating at first glance. But they shouldn’t be. In this article, we’ll break down some of the most common RESERVE pipeline commands and show how they work together to build powerful workflows.

The Unix Philosophy

Command-line programs gained popularity in the 1970s with the adoption of an operating system called Unix. After nearly disappearing in the 1990s due to the rise of Microsoft Windows, they regained popularity in the 2000s and have since become mainstream once again. Throughout this evolution, these programs have been designed around a principle known as “The Unix Philosophy”:

Do one thing well and play well with others.

Modern command-line programs like RESERVE actually do many things well, but they are organized into commands and subcommands that keep each task focused and predictable.

RESERVE, for example, includes a series of wrapper commands whose primary goal is to provide direct, consistent access to the FRED API while allowing the user to choose different formats for displaying or storing data. The following command retrieves a range of GDP data and stores it in CSV format for easy import into a spreadsheet:

reserve obs get GDP --start 2024-01-01 --format csv > gdp_2024-26.csv

In addition to RESERVE’s formatting capabilities, this example also demonstrates the left-to-right flow that forms the basis of “play well with others.” In this case, RESERVE hands the data off to the operating system so it can be stored in a file. Just as easily, it could hand the data off to another application.

The Anatomy of a Pipeline

A pipeline takes the output of one command and passes it to another. This sequence flows from left to right.

RESERVE has three major categories of pipeline functionality. The first category consists of wrapper commands that directly access the FRED API and retrieve data. These include commands such as OBS GET and OBS LATEST.

$ reserve obs latest GDP
+--------+------------+--------------+
| SERIES | DATE       | LATEST VALUE |
+--------+------------+--------------+
| GDP    | 2026-01-01 | 31856.257    |
+--------+------------+--------------+

Source: Bureau of Economic Analysis via FRED

The second category includes true pipeline commands such as TRANSFORM. The idea is simple. A user can retrieve a long range of monthly data and then transform it into quarterly or yearly output.

For example, 20 years of UNRATE data can be resampled from monthly observations into quarterly averages like this:

$ reserve obs get UNRATE --start 2010-01-01 --format jsonl | reserve transform resample --freq quarterly --method mean
+--------+------------+----------+
| SERIES | DATE       | VALUE    |
+--------+------------+----------+
| UNRATE | 2010-01-01 | 9.833333 |
| UNRATE | 2010-04-01 | 9.633333 |
| UNRATE | 2010-07-01 | 9.466667 |
| UNRATE | 2010-10-01 |      9.5 |
. . . .

NOTE: In this example, the TRANSFORM command requires input in JSONL format.

The final category of RESERVE pipeline functionality is ASCII charting through commands such as PLOT and BAR. In the following example, the CHART command receives input from TRANSFORM and generates a visualization directly in the terminal. After all, RESERVE is a command-line interface.

$ reserve obs get UNRATE --start 2010-01-01 --format jsonl | reserve transform resample --freq annual --method mean | reserve chart bar
UNRATE  2010  2026
2010  9.61  ████████████████████████████████████████████████████████████████████
2011  8.93  ████████████████████████████████████████████████████████████
2012  8.08  ███████████████████████████████████████████████████
2013  7.36  ██████████████████████████████████████████
2014  6.16  █████████████████████████████
2015  5.28  ███████████████████
2016  4.88  ██████████████
2017  4.36  ████████
2018  3.89  ███
2019  3.68  
2020   8.1  ███████████████████████████████████████████████████
2021  5.35  ████████████████████
2022  3.65  
2023  3.62  
2024  4.03  █████
2025  4.26  ███████
2026  4.33  ████████

Summary

Piped commands in a shell can look complicated at first, but they become much easier to understand when viewed as a logical sequence of steps.

In the examples throughout this post, the workflow was simple:

Get Data -> Transform Data -> Make a Visual

To become comfortable with pipelines, users should focus on understanding each stage independently. Every command should “do one thing well,” while the design of the pipeline handles the “play well with others” part automatically.

In practice, “others” can mean an entire ecosystem of commands and scripts.

Using the CHART example from above, a user can add a standard Unix utility like grep to filter noisy output without changing the original data request. Instead of modifying the OBS GET command or reducing the date range, the pipeline can simply filter the final output:

$ reserve obs get UNRATE --start 2010-01-01 --format jsonl | reserve transform resample --freq annual --method mean | reserve chart bar | grep 2015
2015  5.28  ███████████████████

This is the real strength of pipelines. Each command remains simple, focused, and reusable, but together they can produce powerful workflows with very little effort.

No affiliation with the Federal Reserve Bank of St. Louis

Not endorsed nor supported by the FRED® API technical team

© 2026 Derick Schaefer