What is Membrane?

A fast, powerful way to write internal tools in TypeScript, connecting the apps you already use at work.

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?

A fast, powerful way to write internal tools in TypeScript, connecting the apps you already use at work.

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 });
}
Communication

If you're curious about Membrane's architecture, Juan joined the devtools.fm podcast to talk through the nuts and bolts.



Enter your email for occasional updates