What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
EXAMPLES
the graph
Membrane programs communicate with the outside world and each other, through an unified interface that we call The Graph. The Graph is a simple, yet powerful abstraction over external APIs and your own data that enables quick and easy composition of functionality.
Simplicity comes from the fact that everything is a node and every node is typed. For example, nodes can be of type String, Int, Email, Repository, etc.
The graph contains three types of nodes:
  • Fields: Nodes which can be read/queried.
  • Actions: Nodes which can be invoked.
  • Events: Node which can be emitted.
API drivers (i.e. connectors) as well as your programs expose their functionality as nodes which can then be referenced and used by other programs.
Intuitively, GET requests are mapped to fields, POST/PUT/DELETE/etc requests (anything effectful) are mapped to actions, and webhooks are mapped to events.
The beauty of this approach is that you can build on top of these nodes and create custom abstractions which are also nodes in the graph. Have you ever wanted to combine Jira, Github and Airtable to build a workflow that matches your mental model? Membrane is where you do that.
Every node in your graph is referenceable by a URL-like string called a Handle. Handles exists as typed objects in TypeScript world, like a file descriptor but for everything.

Try APIs from the Graph Navigator.
Drag from The Graph to use programmatically.
Make your own abstractions.
Double space, oops.


What is Membrane?

Stateful serverless TypeScript for internal tools.

FEATURES
Membrane programs communicate with the outside world and each other, through an unified interface that we call The Graph. The Graph is a simple, yet powerful abstraction over external APIs and your own data that enables quick and easy composition of functionality.
Simplicity comes from the fact that everything is a node and every node is typed. For example, nodes can be of type String, Int, Email, Repository, etc.
The graph contains three types of nodes:
  • Fields: Nodes which can be read/queried.
  • Actions: Nodes which can be invoked.
  • Events: Node which can be emitted.
API drivers (i.e. connectors) as well as your programs expose their functionality as nodes which can then be referenced and used by other programs.
Intuitively, GET requests are mapped to fields, POST/PUT/DELETE/etc requests (anything effectful) are mapped to actions, and webhooks are mapped to events.
The beauty of this approach is that you can build on top of these nodes and create custom abstractions which are also nodes in the graph. Have you ever wanted to combine Jira, Github and Airtable to build a workflow that matches your mental model? Membrane is where you do that.
Every node in your graph is referenceable by a URL-like string called a Handle. Handles exists as typed objects in TypeScript world, like a file descriptor but for everything.

Try APIs from the Graph Navigator.
Drag from The Graph to use programmatically.
Make your own abstractions.
Double space, oops.


EXAMPLES
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

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

Communication


Enter your email for occasional updates