The tutorial will start with a “Hello World” Scala application, set up a PostgreSQL database, add Projectile, generate more and more features, and finally produce a web application with:

  • Websocket transport of shared Scala classes for real-time client updates
  • Play Framework admin site with UI for data access, search, and mutations
  • Full GraphQL API, with a schema visualizer and query IDE
  • Code generated services to reduce CRUD boilerplate

Demo site

You can see the end result of this tutorial at

Source code

The source code for this project is available at


  • Hello World will help you clone and build an initial Scala sbt project
  • Database Setup guides you though configuring a new postgres database
  • Configuring Projectile configures Projectile and get your first project set up
  • Basic Codegen will create our first generated classes using Projectile
  • More Features adds database queries, services, a GraphQL endpoint
  • Web Application will turn our console-based duckling into a beautiful web swan
  • Admin Site generates a full-feature admin site and GraphQL API
  • Scala.js creates a Scala.js project and shared code cross-compiled to Scala.js
  • Websocket builds a websocket transport for shared messages, Scala.js logic, and a few simple views
  • Planning Poker finally builds on what we’ve created to make a real planning poker app
  • Wrapping Up TODO

Database schema

The schema is created by a flyway migration, available here

db schema