diff --git a/mobx.md b/mobx.md
new file mode 100644
index 000000000..a8f1f4877
--- /dev/null
+++ b/mobx.md
@@ -0,0 +1,103 @@
+---
+title: Mobx
+category: JavaScript libraries
+---
+
+### Properties
+
+```js
+import {observable, computed} from 'mobx'
+
+class Page {
+ @observable title = ''
+ @observable published = false
+
+ @computed get authorName () {
+ return this.author || 'Anonymous'
+ }
+}
+```
+
+## Actions
+
+```js
+class Page {
+ @action publish () {
+ this.published = true
+ // do ajax/async here if you like
+ }
+}
+```
+
+## Plain objects
+
+```js
+const person = observable({
+ name: 'Ella Fitzgerald'
+})
+```
+
+```js
+const temp = observable(23)
+temp.get()
+temp.set(25)
+temp.observe(...)
+```
+
+## Reactions
+
+```js
+import {autorun, autorunAsync, when} from 'mobx'
+```
+
+### autorun()
+
+```js
+// Runs it, finds out what it accessed, then observe those
+autorun(() => {
+ console.log(page.title)
+})
+```
+
+### when()
+
+```js
+class Foo {
+ constructor () {
+ when(
+ () => !this.isVisible,
+ () => this.doSomething())
+ }
+}
+```
+
+## React
+
+```js
+import { observer } from 'mobx-react'
+
+@observer
+class PageView extends React.Component {
+ render () {
+ return
{this.props.page.title}
+ }
+}
+
+
+```
+
+### Functional components
+
+```js
+import { observer } from 'mobx-react'
+
+const PageView = observer(({page}) => {
+ {page.title}
+})
+
+
+```
+
+## References
+
+-
diff --git a/parsimmon.md b/parsimmon.md
new file mode 100644
index 000000000..f2884c013
--- /dev/null
+++ b/parsimmon.md
@@ -0,0 +1,53 @@
+---
+title: Parsimmon
+category: JavaScript libraries
+---
+
+```js
+const P = require('parsimmon')
+
+P.regexp(/[a-z]+/)
+.parse('hello')
+//=> { status: true, value: ['hello'] }
+```
+
+## Atoms
+
+```js
+P.regexp(/[a-z]+/)
+P.string('hello')
+P.oneOf('abc') // like P.regexp(/[abc]/)
+
+P.whitespace
+P.optWhitespace
+P.eof
+```
+
+## Combinators
+
+```js
+P.seq(a, b, c) // sequence of these
+P.alt(a, b) // any of these
+P.sepBy(a, P.string(',')) // sequence of `a`, separated by ','
+P.sepBy1(a, P.string(',')) // same, at least once
+
+a.or(b) // like P.alt(a, b)
+a.skip(b) // parses `b` but discards it
+
+a.many()
+a.times(3)
+a.times(1, 4) // 1 <= x <= 4
+a.atMost(10)
+a.atLeast(10)
+```
+
+## Formatting
+
+```js
+P.seq(P.number, P.oneOf('+-*/'), P.number)
+.map(([left, oper, right]) => ({ oper, left, right }))
+```
+
+## Reference
+
+-