Note: To run with 2.12 please make sure that the flag
is enabled in your compiler options (i.e
scalacOptions += "-Ypartial-unification" in sbt).
This feature is enabled by default starting in Scala 2.13.
Getting started with http4s is easy. Let’s materialize an http4s
skeleton project from its giter8 template:
$ sbt -sbt-version 1.3.12 new http4s/http4s.g8 -b 0.21
Follow the prompts. For every step along the way, a default value is
provided in brackets.
- name of your project.
- the organization you publish under. It’s common practice on the JVM
to make this a domain you own, in reverse order (i.e., TLD first).
io.github.username is also a fine choice.
- by default, your organization followed by the project name.
- the version of SBT for your generated project.
- the version of Scala for your generated project.
- defaults to the latest stable release of http4s. See
the versions page for other suggestions.
- the version of Logback for logging in your generated project.
At the end of the process, you’ll see:
Template applied in ./quickstart
In addition to sbt build machinery, some Scala source files are
$ cd quickstart
$ find src/main -name '*.scala'
Main.scala defines a runnable object
Main extends IOApp with an entry point method
which calls the
stream method of the object
QuickstartServer defined on
Starting blaze, http4s’ native server backend.
QuickStartRoutes has two
route definitions. The
helloWorldRoutes containing a simple
that responds to
GET/hello/$USERNAME with a JSON greeting. Let’s try it:
$ sbt run
Depending on the state of your Ivy cache, several dependencies will
download. This is a good time to grab a beverage. When you come
back, you should see a line similar to this:
[ioapp-compute-0] INFO o.h.b.c.n.NIO1SocketServerGroup - Service bound to address /0:0:0:0:0:0:0:0:8080
This indicates that blaze is running our service on port 8080. Let’s try out the
hello world service with curl:
HTTP/1.1 200 OK
Date: Sun, 28 Jun 2020 16:23:31 GMT
To shut down your server, simply press
^C in your console. Note that
when running interactive SBT,
^C will kill the SBT process. For rapid
application development, you may wish to add the sbt-revolver plugin
to your project and starting the server from the SBT prompt with
With just a few commands, we have a fully functional app for creating
a simple JSON service.