diff --git a/graphql.md b/graphql.md
new file mode 100644
index 000000000..05be70455
--- /dev/null
+++ b/graphql.md
@@ -0,0 +1,100 @@
+---
+title: GraphQL
+category: Misc
+---
+
+## Queries
+
+```js
+{ status }
+// → { status: 'available' }
+```
+
+### Nesting
+
+```js
+{ hero { name height } }
+// → { hero:
+// { name: "Luke Skywalker",
+// height: 1.74 } }
+```
+
+### Lookups
+
+```js
+{
+ hero(id: "1000") { id name }
+}
+// → { hero:
+// { id: "1000",
+// { name: "Luke Skywalker" } }
+```
+
+### Aliases
+
+```js
+{
+ luke: hero(id: "1000") { name }
+ han: hero(id: "1001") { name }
+}
+// → { luke:
+// { name: "Luke Skywalker" },
+// han:
+// { name: "Han Solo" } }
+```
+
+### Variables
+
+```js
+{ hero(id: $id) } // Query
+---
+{ id: '1000' } // Variables
+```
+
+### Operation name
+
+Just to make things less ambiguous.
+
+```js
+query FindHero($id: String) {
+ hero(id: $id) { name }
+}
+```
+
+### Mutations
+
+Mutations are just fields that do something when queried.
+
+```js
+{ createReview($review) { id } } // Query
+---
+{ review: { stars: 5 } } // Variables
+// → { createReview: { id: 5291 } }
+```
+
+Over HTTP
+---------
+
+```js
+// Get
+fetch('http://myapi/graphql?query={me{name}')
+```
+
+### POST
+
+```js
+// Post
+fetch('http://myapi/graphql', {
+ body: JSON.stringify({
+ query: "...",
+ operationName: "...",
+ "variables": { ... }
+ })
+})
+
+
+References
+----------
+
+-
+-