SAFE Stack: One Year On

Introduction

Just over a year ago through discussions with key members of the F# community we noticed a common theme in the technologies and techniques used to best develop web applications. As a result of these discussions, we worked together to publish a series of posts on this blog explaining how we believe web development in F# should be. We discussed:

  • Using technologies such as Giraffe to build backend web services in a functional-first style
  • Using Azure to deploy these services into the cloud quickly
  • How to use Fable to develop front end web applications using F#
  • How Elmish allows us to develop these front end applications with idiomatic F#.

Delivering the SAFE stack

Alongside this, we announced the launch of the SAFE Stack - an F#-first stack designed to make it easy for people who knew F# to adopt it within their applications and embrace functional programming concepts across all elements of their web applications without having to compromise on the benefits that F# brings. In order to help people adoption, we've worked hard with the community on a number of different learning elements that ease adoption:

The SAFE website

Alongside the launch of the stack itself, we launched the SAFE website (safe-stack.github.io). This site collates all of the core features of the SAFE stack together with documentation on how to get up and running with the SAFE stack and implement features which cut across all components in the web stack, as well as links to key technical resources.

The SAFE template

Thanks to a large community effort we now have a dotnet core template in place for the SAFE template to rapidly scaffold a new SAFE application. This includes a rich set of options to cater for various needs, including pluggable back-end servers and a variety of client/server integration technologies.

SAFE samples

There are a growing number of sample SAFE applications designed to show how to structure larger real world applications. For example, the SAFE bookstore includes many of the components which will be required in a production application such as login tokens, whilst the excellent ConfPlanner tool shows the use of event sourcing and web sockets.

For those who want to see something smaller in a more structured learning mode, we also created the SAFE Dojo project, which guides developers through adding features to a SAFE app.

Building the SAFE userbase

Over the past year it's become apparent that many people agree with us in our way of using F# for building web applications. We've spoken to a wide spectrum of developers in the F# community who are keen to embrace the SAFE stack within their applications. We recently hit > 10k downloads of the SAFE Stack template, an incredible number to reach in just over a year, and we've also seen a steady growth of new followers on our Twitter account (@SAFE_Stack). However, even more importantly, we see a large number of people excited by developing applications on the SAFE Stack.

Community support

We're thankful to the community who have given talks at conferences around the world on the SAFE stack. We've seen talks in America, Europe and the rest of the world on all aspects of the SAFE stack from the front end through to the back end. We've even recently seen a conference dedicated to the SAFE Stack in the form of RemmiDemmi in Berlin.

A SAFE bet for applications

As well as making it easy for individuals to get on board with F# for web development, we recognise that it's important for organisations to feel comfortable adopting a new technology stack. This can mean different things to different teams; in some cases it means more documentation, whilst in others this means knowing that there are professional consultancies who are able to provide support and coaching as you develop SAFE applications.

Compositional IT are [dedicated] to helping develop the SAFE Stack(https://compositional-it.com/what-services-SAFE.html). To ensure that people are as effective as possible with the stack, we've also put together a 2 day training course which exposes developers to all the components of the stack by developing a complete application. We also believe that learning doesn't finish at the end of a training course and to ensure developers are as effective as they can be, we've also put together a coaching service. This mentoring service guides you through writing real world F# code using the SAFE stack. More information on both of these services can be found on our training and coaching page.

The SAFE Stack launched with 2 starting commercial partners; we at Compositional IT and our good friends at Lambda Factory. We both offer a range of services which have been adopted by clients including coaching, training and even complete application development. We were also delighted to welcome Fuzzy Cloud as a third commercial partner offering support services earlier this year.

The Future

We're still not done with SAFE! There's a lot we want to do with it to ensure it continues to grow, as well as to make it even easier for developers to get up to speed with F# as a language for web application development.

Opinated Stack

When we started SAFE we had quite a bit of room for choice, we encouraged you to use your favourite web server of choice or pick AWS or Azure. Whilst we still think there are benefits to this, we also appreciate that there are people who want a "known-good" SAFE configuration. To that end, we at Compositional IT will continue to focus on what we consider the "core" SAFE offering of Saturn, Azure Fable and Elmish, whilst still allowing you to pick other components if required.

Moving to a 1.0

The SAFE team have worked hard to stablise the stack - given the rate at which the F# community have been moving forwards, this has been a challenge, but thanks to some great work from Tomasz Heimowski, we now have continuous builds across all permutations of the stack as well as stable lock files bundled with the template. Not only does this increase confidence in the stack, but greatly reduces the startup time from clean.

Keeping pace with innovations

We've seen Saturn near a 1.0 release, whilst Fable has seen a large update in the form of a v2.0 release. The SAFE Stack will continue to do the hard work of keeping up-to-date with these components, ensuring that they work well together, so you don't have to.

In-place updates

One area we know that people would like to see made easier is to implement in-place updates of SAFE Stack projects once they've been created, and this is something we're looking at implementing in the future.

Lowering the barrier to entry

We'll also continue to build out the SAFE documentation site, adding in new sections to advise on the best way to develop full stack web applications in F# and enabling new technologies as they mature, such as the excellent Fable.Reaction. We also want to continue to make it easier to develop applications when using the SAFE stack by improving the debugging experience when using different text editors.

Your feedback is crucial here, so please feel free to create issues on the SAFE Documentation repository! We'd love to see more members of the F# community contributing to the SAFE stack, whether it's advancements in the template, the surrounding ecosystem or even writing documentation.

Summary

At Compositional IT, we're really excited about what we've seen with the SAFE stack over the past 12 months and we're even more excited to see what happens over the next year. We'll continue contributing back to the F# community in the way of documentation, templates and samples.

And for those that need a helping hand, we'll continue to support SAFE by offering coaching and training courses to those who need expert guidance on getting the best out of SAFE, technology accelerators to those who want to quickly remove the risk of a new project and software development to those who want to outsource their SAFE application development.

Here's to 2019!