Firebase C# library

Tomáš Bezouška
Jan 3, 2017 · 4 min read

Being a Windows 10/Windows Phone developer is not easy these days. Your user base is substantially smaller compared to Android/iOS which means less companies invest into a dedicated Windows app. This isn’t true just for typical consumer-oriented companies (think Starbucks), but also for technological companies which produce some form of SDKs/libraries/toolkits/you name it. One such problematic example is Firebase, once a startup, now part of Google.

Image for post
Image for post

Firebase is a set of tools for developers. One of those tools is a Firebase Realtime Database which handles both offline and online storage of your data as well as the synchronization between the two. From your code you basically call a single method “Save” and Firebase asynchronously takes care of local persistence, sync and streaming of changes coming from other sources (other users/devices etc). It significantly reduces the amount of code you need to write and allows you to focus on your business logic. This is one of the reasons why in Step Up Labs, a startup I recently became part of, a decision was made to completely migrate the backend of our main app — Settle Up — to Firebase.

Sounds great. Until you realize Firebase doesn’t have a C# SDK. What’s worse, they have been saying it’s on their roadmap for three years, after which they released a C++ version first. Then you think you could write the library yourself, since Firebase exposes a set of REST APIs. Unfortunately, after a quick scan it is clear it’s not possible to create a C# library which would also have offline functionality, because the APIs don’t have a way of saying “send me all changes which happened since…”. How do the official SDKs for iOS/Android do it? They use non-public WebSocket APIs, apparently too unstable to make public during the last 3 years.

Fortunately, our database structure contains a collection of all changes (inserts/updates/deletes) which grows each time a change happens. Since the keys should be only incremental I can get new changes since the last sync and query the respective items with given keys. This is not ideal because it is app-specific and will require me to write a lot of code to handle the synchronization myself, but better than nothing.

Alright, enough whining, time for action!

Existing C# REST libraries

Surely I’m not the first C# developer to have the need to access Firebase. There are, as a matter of fact, two existing libraries:

They both have their imperfections, specifically related to realtime streaming. For example, when I subscribe to a location, and a change happens to some nested node, FireSharp won’t correctly pair it with the top level entity and will only return the path and data as a string. I want the deserialization to be automatic. FirebaseSharp‘s streaming implementation is even more unfortunate — at first, it fetches everything from a given location (even when I specify filtering options) and does the filtering locally. This is obviously not usable when there are thousands of items.

Also, neither of them targets Universal Windows Platform.


That is why I decided to write yet another C# library. And since we looove open source at Step Up Labs we decided to put it publicly on GitHub.

Its use is fairly simple. Here is a sample of a one time query:

Btw the names of properties of your classes don’t need to match exactly. You can use the JsonProperty attribute (from to setup the mappings you want:

To take advantage of the streaming API, use the AsObservable method which lets you subscribe to realtime changes coming in from Firebase.

The cool thing is that this is strongly typed. Even when some nested element changes, this library can correctly associate it with its top level parent and send it to you to handle (for example when a Dinosaur’s height changes you will receive the entire Dinosaur object).

The streaming implementation is also able to recover from loss of connectivity, so you don’t need to worry about that. For more samples, check out our GitHub repo. I would also like to point out that the AsObservable() method returns an IObservable<T> which you can use along with Reactive Extensions.

Where can I get the library?

Following frameworks are supported:

  • .NET 4.5+
  • Windows 8.x
  • UWP
  • Windows Phone 8.1
  • CoreCLR

What’s next?

I do have some ideas for future development and improvements, but if you have any ideas of your own, please let me know (or even better yet raise an issue on GitHub).

Later, I would like to look at the following (possibly releasing them as separate libraries):

  • File upload
  • Authentication
  • Some form of semi-generic offline storage

Other ideas and/or pull requests are very welcome!

Step Up Labs

Company blog of Step Up Labs, developers of Settle Up.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store