# paperplane

> Lighter-than-air server framework

Latest version **3.1.2** (published 2020-01-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install paperplane
pnpm add paperplane
yarn add paperplane
bun add paperplane
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 3.1.2 |
| Published | 2020-01-10 |
| First published | 2017-01-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6 |
| Dependencies | 11 |
| Unpacked size | 73.6 KB |
| Known vulnerabilities | 0 (+2 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 137 |
| Author | articulate |
| Maintainers | dbertram, flintinatux, kdstew, mgreystone, pklingem, spencerfdavis, tecnobrat |

## Links

- npm: https://www.npmjs.com/package/paperplane
- Repository: git@github.com:articulate/paperplane
- npm.io page: https://npm.io/package/paperplane

## Dependencies (11)

- [qs](https://npm.io/package/qs.md) ^6.3.0
- [etag](https://npm.io/package/etag.md) ^1.7.0
- [send](https://npm.io/package/send.md) ^0.16.0
- [ramda](https://npm.io/package/ramda.md) ^0.25.0
- [cookie](https://npm.io/package/cookie.md) ^0.3.1
- [raw-body](https://npm.io/package/raw-body.md) ^2.2.0
- [@hapi/boom](https://npm.io/package/@hapi/boom.md) ^7.4.2
- [path-match](https://npm.io/package/path-match.md) ^1.2.4
- [media-typer](https://npm.io/package/media-typer.md) ^0.3.0
- [@articulate/funky](https://npm.io/package/@articulate/funky.md) ^1.7.0
- [fast-stream-to-buffer](https://npm.io/package/fast-stream-to-buffer.md) ^1.0.0

## Recent versions

- 3.1.2 (latest) — 2020-01-10
- 3.1.1 — 2019-11-18
- 3.1.0 — 2019-10-21
- 3.0.0 — 2019-08-12
- 2.3.2 — 2019-07-23
- 2.3.1 — 2019-07-19
- 2.3.0 — 2019-06-04
- 2.2.0 — 2019-05-07
- 2.1.1 — 2019-03-04
- 2.1.0 — 2018-11-05
- 2.0.2 — 2018-09-05
- 2.0.1 — 2018-08-31
- 2.0.0 — 2018-08-24
- 1.2.2 — 2018-05-29
- 1.2.1 — 2018-05-15
- … 20 more at https://npm.io/package/paperplane/versions

## README

<p align="center">
  <a href="#"><img src="https://cloud.githubusercontent.com/assets/888052/22172037/543e7f10-df6b-11e6-8ab8-8a1e679dd27e.png" alt="paperplane" style="max-width:100%;"></a>
</p>
<p align="center">
  Lighter-than-air node.js server framework.
</p>
<p align="center">
  <a href="https://www.npmjs.com/package/paperplane"><img src="https://img.shields.io/npm/v/paperplane.svg" alt="npm version" style="max-width:100%;"></a> <a href="https://www.npmjs.com/package/paperplane"><img src="https://img.shields.io/npm/dm/paperplane.svg" alt="npm downloads" style="max-width:100%;"></a> <a href="https://travis-ci.org/articulate/paperplane"><img src="https://travis-ci.org/articulate/paperplane.svg?branch=master" alt="Build Status" style="max-width:100%;"></a> <a href='https://coveralls.io/github/articulate/paperplane?branch=v2'><img src='https://coveralls.io/repos/github/articulate/paperplane/badge.svg?branch=v2' alt='Coverage Status' /></a>
</p>

## Documentation

- [Getting started guide](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md)
- [API docs](https://github.com/articulate/paperplane/blob/master/docs/API.md)
- [Migration guide](https://github.com/articulate/paperplane/blob/master/docs/migration-guide.md)

## Introduction

The main goal of `paperplane` is to make building a `node.js` server easy, without all of the configuration or imperative boilerplate required for other server frameworks.  If you prefer to build apps with function composition or even a point-free style, then `paperplane` is for you.

With `paperplane` you get all of these out-of-the-box:

- pure, functional, Promise-based [request handlers](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#basic-concepts)
- support for request handlers that return [Algebraic Data Types](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#what-are-algebraic-data-types) - **new in v2.0**
- support for highly scalable [serverless deployment](https://github.com/articulate/paperplane/blob/master/docs/API.md#serverless-deployment) - **new in v2.1**
- composeable json [body parsing](https://github.com/articulate/paperplane/blob/master/docs/API.md#parsejson)
- dead-simple [routing functions](https://github.com/articulate/paperplane/blob/master/docs/API.md#routes)
- several common [response helpers](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#response-object)
- json-formatted [logging](https://github.com/articulate/paperplane/blob/master/docs/API.md#logger)
- easily configurable [CORS support](https://github.com/articulate/paperplane/blob/master/docs/API.md#cors)
- plug-n-play [static file serving](https://github.com/articulate/paperplane/blob/master/docs/API.md#serve)

Let's try a quick Hello World example server.  It accepts a `:name` param in the url, and then includes that name in the `json` response body.

```js
const { compose } = require('ramda')
const http = require('http')
const { json, logger, methods, mount, routes } = require('paperplane')

const hello = req => ({
  message: `Hello ${req.params.name}!`
})

const app = routes({
  '/hello/:name': methods({
    GET: compose(json, hello)
  })
})

http.createServer(mount({ app })).listen(3000, logger)
```

So simple and functional, with an easily readable routing table and pure functions for the route handler.  If that sounds like fun to you, then read the [Getting started guide](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md) or the [API docs](https://github.com/articulate/paperplane/blob/master/docs/API.md) to learn more.

## Example application

To help you learn the concepts used in paperplane, check out the [demo application](https://github.com/articulate/paperplane/blob/master/demo).

If you have docker installed, you can run the demo locally:

1. Clone this repo
1. If you're using Docker Desktop for Windows:
    - `cp docker-compose.override.windows.yml docker-compose.override.yml`
1. `docker-compose up`
1. http://localhost:3000

---
_Source: https://npm.io/package/paperplane · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
