RethinkDB storage for hapi web servers

Usage no npm install needed!

<script type="module">
  import hapiPerm from 'https://cdn.skypack.dev/hapi-perm';


hapi-perm Build status for hapi Perm

RethinkDB storage for hapi web servers

This hapi plugin makes it easy to connect to a RethinkDB database and run queries against it, from route handlers and anywhere else you can access the server instance.


  • Stores data in RethinkDB.
  • Shares a database connection across routes.
  • Decorates the server to make queries easier.
  • Eliminates the repetitive use of .run(conn).
  • Reconnects automatically on connection failures.


npm install hapi-perm


Register the plugin on your server to connect to your database and make the server.db(query) helper function available.

const hapi = require('@hapi/hapi');
const perm = require('hapi-perm');
const r = require('rethinkdb');

const server = hapi.server();

const init = async () => {
    await server.register({
        plugin  : perm,
        options : {
            password : process.env.DB_PASSWORD
        method : 'GET',
        path   : '/',
        async handler(request) {
            const { db } = request.server;
            const tables = await db(r.tableList());
            return tables;
    await server.start();
    console.log('Server ready:', server.info.uri);


In the example above, r is the RethinkDB library used to construct queries. Behind the scenes, this plugin connects to the database using the version of r installed by your application. This gives you full control over the connection options.


Plugin options

Type: object

Passed directly to r.connect() to configure the database connection. See the RethinkDB documentation for details.


For convenience, this plugin adds the following API to the hapi server instance.


Returns a Promise for the query's completion. Can be used instead of query.run(conn). Useful to avoid needing a reference to the database connection. This is available as request.server.db(query) inside of route handlers.


See our contributing guidelines for more details.

  1. Fork it.
  2. Make a feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request.


MPL-2.0 © Seth Holladay

Go make something, dang it.