Hello Macaw Web Framework

Since I started using F#, I’ve really enjoyed much of what I’ve seen. Not only the strong, statically typed nature of the language makes everything easy to use, refactor and reason with, but the F# ecosystem is really awesome.

After being chosen as a mentee by the F# Software Foundation, I’ve decided to give a shot and write my own web framework. But using a very different approach, comparing with the other ones in the F# ecosystem, such as Suave, Freya and WebSharper. Being an Erlang guy that have used Elixir and Phoenix for quite a while and I’ve to say they are amazing pieces of technology and I think that Phoenix was the right direction to build modern, realtime webapps.

So, Phoenix is my inspiration to build Macaw. And, as Phoenix, I’ve some quite straightforward goals in mind: performance, ease to use and concurrency. My plans are to build the following:

  • Pipes — the library to interact with the OWIN. My final plan is to support the entire OWIN specification and provide a functional way to use it. As the name suggests, making mutations to the OWIN environment by using pipelines.
  • Plume — a view engine, inspired by Elm. The solely reason for writing my own view engine instead of using others is that I plan for it to be compiled, so rendering should be really fast.
  • Nest — the data access. By leveraging F#’s SQLProvider library, we can have something that really resembles Elixir’s Ecto library. My plan is to wrap it and provide a migration tool as well.
  • Dome — is the presence library, inspired by Phoenix’s presence library.
  • Macaw — the web framework itself, where we glue everything together.

Some of these libraries (in special the presence one) will have adapters to other libraries, such as Akka.NET, Orleans, etc… So, as we can see, there is a load of work that needs to be done. I won’t finish this all during the mentorship program but I have hopes that, at least half of this stuff is completed by then. I find the challenge quite amusing and I’ve been learning tons of stuff on the process.

If you wish to follow, contribute and/or give suggestions, be my guest: https://github.com/macawframework