Install Now

What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
EXAMPLES
example discord bot
Discord bot that responds to the /weather 'city-name' command.
Reference to a Discord Guild
Subscribe to Discord's slash command.
Get weather information for a city
Respond slash command with weather details
import { nodes, root, state } from "membrane";

export async function configure({ guildId }) {
  const gref = nodes.discord.guilds.one({ id: guildId });

  await gref.createCommand({
    name: "weather",
    description: "Get the weather for a location",
    options: [
      {
        type: 3,
        description: "The city to get the weather for",
        name: "city",
      },
    ],
  });

  await gref.onSlashCommand.$subscribe(root.handleEvent);   
}
        
export async function handleEvent(_, { event }) {
  const { token, application_id, options } = await event;

  const [data] = JSON.parse(options);
  const city = data.value;

  const weather = await nodes.weather
    .now({ city })
    .$query(`{ temp feels_like }`);

  await nodes.discord.followUpWebhook({
    token,
    application_id,
    message: {
      content: `The weather in ${city.toUpperCase()} 
      is ${weather.temp} degrees, 
      but feels like ${weather.feels_like}.`,
    },
  });
}

What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
EXAMPLES
Discord bot that responds to the /weather 'city-name' command.
Reference to a Discord Guild
Subscribe to Discord's slash command.
Get weather information for a city
Respond slash command with weather details
import { nodes, root, state } from "membrane";

export async function configure({ guildId }) {
  const gref = nodes.discord.guilds.one({ id: guildId });

  await gref.createCommand({
    name: "weather",
    description: "Get the weather for a location",
    options: [
      {
        type: 3,
        description: "The city to get the weather for",
        name: "city",
      },
    ],
  });

  await gref.onSlashCommand.$subscribe(root.handleEvent);   
}
        
export async function handleEvent(_, { event }) {
  const { token, application_id, options } = await event;

  const [data] = JSON.parse(options);
  const city = data.value;

  const weather = await nodes.weather
    .now({ city })
    .$query(`{ temp feels_like }`);

  await nodes.discord.followUpWebhook({
    token,
    application_id,
    message: {
      content: `The weather in ${city.toUpperCase()} 
      is ${weather.temp} degrees, 
      but feels like ${weather.feels_like}.`,
    },
  });
}
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