Exploring InstantDB: A New Approach to Local-First Databases

Abdulkadir Saloum - Oct 24 - - Dev Community

Hey there! Today, I’m excited to introduce you to InstantDB—a tool that's been getting a lot of buzz lately. If you've worked with Firebase or Supabase, you’ll quickly see the similarities, but what sets InstantDB apart is how beautifully integrated it is with React. That’s right, it’s built with React developers in mind! But don’t worry—it also works great with React Native and vanilla JavaScript. And guess what? It’s a local-first database, meaning it works offline and syncs in real-time effortlessly.

Let’s dive into how it works and why you should give it a try!

Why InstantDB is Special

One of the standout features of InstantDB is how it simplifies state management in React. Normally, you’d have to use hooks like useState or rely on external libraries to manage your state. InstantDB eliminates much of that complexity by letting you manage your state with queries directly from the database, like so:

const todos = db.useQuery('todos');
Enter fullscreen mode Exit fullscreen mode

This small piece of code fetches all your to-dos from the database, allowing you to seamlessly integrate it into your React app without extra layers of complexity.

Setting Up InstantDB

Getting started with InstantDB is simple. After signing up for an account, you can quickly initialize your database. Here’s a basic example of how to get up and running:

import { db } from 'instantdb';

db.init({
  clientId: 'your-client-id',
});
Enter fullscreen mode Exit fullscreen mode

Once initialized, you can use the database for tasks like fetching, adding, updating, and deleting to-dos. Let’s look at an example of adding a to-do:

const addTodo = () => {
  db.transact(() => {
    db.insert('todos', { task: 'New Task', completed: false });
  });
};
Enter fullscreen mode Exit fullscreen mode

Similarly, for deleting or updating tasks, you simply call the respective functions, and InstantDB takes care of the rest!

Real-Time Sync: The Magic Behind InstantDB

One of the coolest features of InstantDB is its real-time synchronization. Imagine you’re updating a to-do list in one tab. If you open the same app in another tab, you'll notice the changes happen instantaneously across both tabs. Here’s an example of how that looks in action:

const toggleTodo = (id, completed) => {
  db.transact(() => {
    db.update('todos', id, { completed });
  });
};
Enter fullscreen mode Exit fullscreen mode

The synchronization is lightning-fast and feels incredibly smooth, making it ideal for collaborative applications or multi-device usage.

Storage & More: Beyond Just a Database

While InstantDB is primarily focused on being a database, they also offer other modern app features like file storage, which is still in beta. It’s a welcome addition, especially for those of us building full-stack applications. For example, you can upload files with the following code:

const uploadFile = async (file) => {
  const result = await db.storage.upload(file);
  console.log('File uploaded:', result);
};
Enter fullscreen mode Exit fullscreen mode

The storage system integrates seamlessly with your database, and InstantDB is continuously adding new features that make it more robust and ready for production environments.

Wrapping Up

If you’re working with React, React Native, or JavaScript and need a local-first database that works offline, syncs in real-time, and simplifies state management, InstantDB is definitely worth checking out. It’s still early days, but I’m excited to see how this project evolves.

You can give it a spin by visiting their InstantDB website, and if you do, let me know what you think! I’m already loving how easy it makes managing state and data in my projects.

. .