Get Started

What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
EXAMPLES
example airtable to email
Example of a Program for sending an email when a table in an Airtable is modified.
Subscribe to table changes
Get modified fields
Send email with record details.
import { nodes, root, state } from "membrane";

export async function configure() {
  await nodes.table.changed.$subscribe(root.tableChanged);
}

export async function tableChanged(_, { event }) {
  const { fields } = await event.record.$query(`{ fields }`);
  const formattedFields = JSON.parse(fields);

  let emailBody = ["Table has been changed. Details:\n"];

  for (const fieldName in formattedFields) {
    emailBody.push(`${fieldName}: ${formattedFields[fieldName]}`);
  }

  const subject = "Important: Airtable table has been changed";
  const body = emailBody.join("\n");
  
  await nodes.email.send({ subject, body });
}

What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
EXAMPLES
Example of a Program for sending an email when a table in an Airtable is modified.
Subscribe to table changes
Get modified fields
Send email with record details.
import { nodes, root, state } from "membrane";

export async function configure() {
  await nodes.table.changed.$subscribe(root.tableChanged);
}

export async function tableChanged(_, { event }) {
  const { fields } = await event.record.$query(`{ fields }`);
  const formattedFields = JSON.parse(fields);

  let emailBody = ["Table has been changed. Details:\n"];

  for (const fieldName in formattedFields) {
    emailBody.push(`${fieldName}: ${formattedFields[fieldName]}`);
  }

  const subject = "Important: Airtable table has been changed";
  const body = emailBody.join("\n");
  
  await nodes.email.send({ subject, body });
}
Features Walkthrough
In this video we discuss 3 of the most important features of Membrane: Durability, The Graph, and Observability.
Clickable poster of the Features Walkthrough video
Communication


Enter your email for occasional updates