Blog

Eric Peterson

December 13, 2017

Spread the word


Share your thoughts

We enjoyed bringing you tips for [CommandBox](https://www.ortussolutions.com/blog/category/12-tips-of-commandbox-christmas) and [ContentBox](https://www.ortussolutions.com/blog/category/12-tips-of-contentbox-christmas) last year for the 12 days of Christmas so much that we decided to do it again! This year, I'm happy to show you 12 different modules currently hosted on ForgeBox just waiting to make your life easier. So grab a hot drink and cozy up for the **12 Tips of (ForgeBox) Christmas**.

Hyper

Hyper exists to make your life making network requests easier.

Here's the simplest Hyper example:


var res = hyper.get( "https://swapi.co/api/films/7" );

The HyperResponse object returned has a few helpers to make it easy to work with requests, including retrieving the status code, inspecting headers, and deserializing json bodies.

The more complex you get with your HTTP requests, the more Hyper shines. A POST request looks like so:


var res = hyper.post( "https://swapi.co/api/films", {
    "title" = "The Last Jedi",
    "episode_id" = 8,
    "release_date" = "2018-12-15"
} );

This sends a json body, by default. Need form fields and a custom header?


var res = hyper
    .asFormFields()
    .withHeaders( { "X-Prerelease-Token" = token } )
    .post( "https://swapi.co/api/films", {
        "title" = "The Last Jedi",
        "episode_id" = 8,
        "release_date" = "2018-12-15"
    } );

While this is a nice syntax improvement over cfhttp, Hyper was built to solve the pain points around writing SDK's like GitHub, Stripe, and Twilio. When working with services like these, there is a handful of boilerplate headers, parameters, or other values you need to set.

Hyper lets you create clients — partially configured instances that pass on their defaults to every request made from them. You create a new client with WireBox (most likely in your config/WireBox.cfc):


map( "GitHubClient" )
    .to( "hyper.models.HyperBuilder" )
    .asSingleton()
    .initWith(
        baseUrl = "https://api.github.com",
        headers = {
            "Authorization" = getSetting( "GITHUB_TOKEN" )
        }
    );

This client can then be injected and used elsewhere in your application:


component {

    property name="githubClient" inject="GithubClient";

    function getRepos() {
        return githubClient.get( "/user/repos" );
    }

}

No more repeating yourself all over the place with the same defaults! And if you need to override a default, just set it as normal. Hyper has a full fluent API to set all the parameters you would need.

So check out the documentation over on ForgeBox and stop rewriting the same cfhttp code over and over again.

Merry Christmas!

Add Your Comment

(1)

Dec 14, 2017 06:56:06 UTC

by Chris Geirman

Impressive!

I recall there being many nitnoid issues with json deserialization in CF. I don't recall specific pain points however. Assuming you know what I mean, have you solved for them?

Recent Entries

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Spring Boot developers know the pain of evaluating view technologies. Thymeleaf is great — until you need more expressiveness. FreeMarker is powerful — until the syntax fights you. What if you could write templates in a dynamic JVM language that gives you the full power of the platform, feels natural, and requires zero setup to integrate?

Meet the BoxLang Spring Boot Starter.

Luis Majano
Luis Majano
March 13, 2026
Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

The growing need to evolve legacy financial platforms safely

Many Swiss banks and financial institutions still operate important systems built on ColdFusion and CFML platforms.

These systems manage a wide range of functions, including:

  • internal banking workflows
  • reporting systems
  • client portals
  • data integration platforms
  • compliance and risk management tools

In many cases, thes...

Cristobal Escobar
Cristobal Escobar
March 13, 2026
Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Many ColdFusion environments operate in a reactive mode without realizing it.

Everything seems fine… until something breaks.

A server crashes.

Performance drops suddenly.

An integration stops working.

A security audit reveals missing patches.

At that point the response is urgent:

“Can someone help us fix this now?”

Emergency support is sometimes unavoidable. But when reactive intervention becomes the norm, it usually means something deep...

Cristobal Escobar
Cristobal Escobar
March 12, 2026