Building Cross-Platform Mobile Apps With Fabulous
This repo contains all the resources and links you will need to get started building cross-platform mobile apps with Fabulous. This content was created for a talk given at NDC London in January 2019 and F# Exchange in APril 2019.
- Fabulous on GitHub
- Fabulous documentation
- Awesome Fabulous - a collection of resources on Fabulous
- FSharp.org - The home of F#
The slides for this talk are available here
The video from NDC London is here:
The video from F# eXchange 2019 is here:
This repo contains 2 sample apps.
Simple Hello World
This is the canonical 'Hello Fabulous' app showing the basics of the MVU pattern. It has a model with a
Count field and an
Increment message. The
update function processes the message, returns a new model with the
Count incremented, and this is drawn on the view. The
view function returns a view with the
Count in a
Label, as well as a
Button that dispatches the
A good way to get started is to add a decrement button, and wire it up using a message. Try this whilst using the Live Update feature to get a good feel of how rapid Fabulous devlopment is.
Advanced Hello World
This app is a online photo storage app that takes photos and uploads them to the cloud.
Once you have an account, create a blob storage resource, and add the connection string to the
When you run the app you will be able to take a photo and it will upload to your blob storage.
This app only works on Android at the moment. It uses the Android Azure storage SDK, bound in a Xamarin Java Binding Library. An exercise to the reader is to implement the iOS version using Objective Sharpie.
The storage is implemented in platform specific code using a bound native library, and the function to store the blob is passed in to the app constructor to show how you can compose your app using platform-specific functions.
If you've written any apps, blog posts, sample code or anything to do with Fabulous, please raise a PR to add it to the Awesome Fabulous repo.
We could also use an icon if you are a designer!
You can also join the conversation on Twitter: