In our first article, we got our first taste of Fauna relational modeling using the data model for a DVD rental business (adapted from a popular Postgres tutorial). In this chapter, we’ll continue adapting this borrowed data model to learn how Fauna can query many-to-many collections in a normalized fashion.

Modelling many-to-many relationships in Fauna

Typically, a film has multiple categories, and a category has multiple films, so let’s slightly adapt the model again (in green) to turn it into a many-to-many relation.


PostgreSQL (AKA Postgres) is one of the finest relational database management systems ever created. However, the Postgres we know and love is a client-server database that requires operational setup and maintenance to keep your instance or cluster available at all times, and does not scale easily to the modern Internet.

Fauna is a distributed serverless data API that follows the document model, offers complete data consistency, and supports a functional query language familiar to modern software developers. Teams using Fauna are freed from burdensome operations and can achieve higher productivity levels without compromising on robust database functionality.

Developers who are…

Today we’re going to take a look into Fauna’s new streaming feature by building a small chat using Svelte.

Today we’ll be building a small API to see a quick overview on how to use Fauna in Node.js.

For reference, here’s a Github repository with the finished project that you can use to follow along:

Any recent version of Node will do. If you don’t have it installed already, I recommend downloading the LTS installer from the official website. This will also install NPM which you need to manage your dependencies.

For our server we’ll be using Fastify which is easy to use and offers a great developer experience. Also, as its name implies, it’s very fast.


Fauna and DynamoDB are both serverless databases, but their design goals, architecture, and use cases are very different. In this post, I will overview both systems, discuss where they shine and where they don’t, and explain how various engineering and product decisions have created fundamentally different value propositions for database users.

DynamoDB’s design philosophy: availability and predictability

AWS DynamoDB was developed in response to the success of Apache Cassandra. The Cassandra database was originally open sourced and abandoned by Facebook in 2008. My team at Twitter contributed extensively to it alongside the team from Rackspace that eventually became DataStax.

However, in an odd twist of history…

It’s been a busy few months here at Fauna, and we’re very excited to share what we’ve been working on with you! Today, we released a slew of new capabilities to help Fauna developers collaborate more efficiently on shared databases, secure their accounts with multi-factor authentication, secure their applications with third-party identity providers, and improve application responsiveness with real-time document streaming. Using these features, development teams will be able to more easily and securely build sophisticated business applications with Fauna.

Team management

With team management, multiple members of your organization are now able to log into a shared team account with their…

Real-time application features have silently become omnipresent in our everyday life in the form of instant messaging, real-time statistic updates, or collaborative editing. They have moved from a ‘nice to have’ feature to, in some cases, the determining factor whether my new application will be perceived better than the one from a competitor.

That said, Fauna has always had a strong story to keep applications in sync or retrieve updates since temporality is a first-class citizen. The standard temporality features already provided you with the means to travel back in time, change history, and functionality to easily retrieve events. …

In the previous part of this tutorial, we set up a Single Page Application (SPA) that authenticates with Auth0 and uses the Auth0 access token to connect with Fauna. Until now, we received access to the whole ‘dinosaurs’ collection when we logged in, regardless of the identity or type of user that was logged in. However, since Auth0 provides you with full control of the content of the Auth0 token and Fauna has the powerful FQL to interpret the token contents, anything is possible. In this follow-up tutorial, we dive into multiple approaches for more advanced role-based access patterns.


Offering users alternative ways to authenticate, such as social login, is valuable for both the end-user and for you the developer since it has the potential to reduce the amount of support cases around lost passwords or blocked accounts.

Although you could implement these flows on top of Fauna, it’ll require some work and when it comes to security, it makes sense to let libraries of experts in the field handle that work for us. Identity providers, such as Auth0, do a great job at providing libraries for this functionality out-of-the-box. …

Community Contribution

Today, in the final article of the Core FQL series, we’re going to take an in-depth look at the Join() function and its multiple uses.

This series assumes you have a grasp on the basics. If you’re new to FaunaDB and/or FQL here’s my introductory series on FQL.

In this article:

  • Introduction
  • Which robot parts are manufactured on Vulcan?
  • What is a SetRef?
  • Using Join() with Lambda()
  • Using multiple joins
  • Using Join() with Range()
  • Replicating SQL joins in…

Fauna Inc

The data API for modern applications.

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