This is a good summary. Sometimes I too forget how much stuff Django provides out of the box for free. But now it is an old and boring tech, apparently. Oh well.
One of the issues I have with Giraffe is that it gives you too many ways to deal with routing while also asking to use custom operators. And yet I cannot get a list of all defined routes.
Honestly, I do not find their goal of being a functional interface to ASP.NET Core sufficiently compelling. Maybe they should be a bit more specific?
I just wanted to mention that I considered FastApi but the amount of reflection and magic required to go this route was a bit too much to my liking in F#. Just a personal preference.
I mostly agree with you on Django though. But as you said - most apps are CRUD apps.
I was frustrated with the verbosity of ASP.NET Core, especially as an F# user. Don’t get me wrong, it is insanely powerful, performant and customisable web framework. And it is also one of the most USER-UNFRIENDLY things I have ever encountered in the web development.
Therefore, I decided to wrap it in some helper functions to make it as pleasant to work with for the new F# web developers as possible. And ... I’ve got somewhat carried away. This is the true origin of this project.
Before F# I was primarily into the Python, and I had really good experience with Django. I wanted to make my helper look more like Django but more I wrote, more it resembled Flask instead.
I have recently open sourced it under the MIT license on GitHub. I hope this will help with making other web developers more interested in seemingly niche language of F#.
I use it for a side project (some SPA app) I work on over the weekends. Therefore, I frequently change and update it as I encounter more missing things or parts that do not please me.
So, all the feedback is welcome! I am especially interested if you find the framework API intuitive enough for non-F# folks.
As an author of enforce.py, I just want to say that working on and with type hints exhausted me. The inner implementation is so full of corner cases. And the indifferent at best attitude of python subreddit wasn't very helpful either (imho). I still don't know if anyone besides project's awesome contributors ever used it.
To be honest, the biggest issue of python type hinting (from my point of view) is that it is an abstraction of a totally different typing system underneath. Type hints do not represent actual types at all. They are just for convenience sake.
What started as a proof-of-concept for me, soon became a huge monster with special handlers for almost every single case. It is so messy now, that hardly anyone besides me can do any maintenance. I have been considering a rewrite (using ast modifications to avoid huge number of potential corner cases and performance issues) for more than a year now, but such endeavour is too big for me to undertake. It would be a fresh start after all.