Hoodie (software)

In computing, Hoodie is an open-source JavaScript package, that enables offline-first, front-end web development by providing a complete backend infrastructure. It aims to allow developers to rapidly develop web applications using only front-end code by providing a backend based on Node.js and Apache CouchDB. It runs on many Unix-like systems as well as on Microsoft Windows.

Hoodie is produced by the Hoodie Open Source Project, founded by Jan Lehnardt and Gregor Martynus in 2011 and first released in 2013. It is written in JavaScript and released as free software under the Apache License 2.0

Overview
Hoodie is designed to abstract away the configuration and communication between the database backend and allow web-based front end development using simple calls to the Hoodie API. Hoodie uses CouchDB to store data for the application. If the application is offline and cannot access the CouchDB database, data is stored locally on the device in the offline PouchDB database. The data will later be synced to CouchDB when the connection to the server is re-established, using CouchDB's database synchronisation feature.

Hoodie depends on Node.js and Node Package Manager (npm) to allow it to be used from the command line and to provide other tools for Hoodie projects. When Hoodie and its dependencies are installed, a skeleton project directory and basic files to start an application including index.html and main.js are created. Hoodie can also be used with large web application frameworks including Backbone.js, Ember.js, and AngularJS.

The core Hoodie package is targeted at creating personal applications and saving user data to personal storage areas. For instance, for to-do lists, memos or favourite book lists. A set of basic commands is provided to achieve these functions, which includes user signup, login, store, and more. Hoodie extensions provide functions beyond the core backend commands. Extensions can be written by anyone and use the npm package system. For instance, an extension to store data globally and allow multiple users to share and collaborate on the same data can be installed.

Architecture
The core structure of Hoodie is to provide a JavaScript package that provides API calls to store data on CouchDB or offline on PouchDB. The user does not need to understand how the online/offline synchronisation works. The backend is dealt with by simple commands to store and retrieve data.

Example of the store function:

The hoodie.store.add function adds an object to a personal database store. The type parameter is where the object will be stored in CouchDB. CounchDB is a noSQL database and as such does not have tables but the 'type' identifier is similar to adding to a particular table in a database. This allows data/documents of a similar type to be stored, queried or retrieved using the same type identifier.

Full example of store function:

The example above shows how a todo item could be added to the Hoodie store. The item is added as with a type of 'todo' and the data sent is the simply a title value.

Community
Hoodie is open source and encourages community involvement. It is one of the first open source projects to establish a code of conduct from the outset. Hoodie community aims to involve both coders and non-coders in helping the project. As the Hoodie package is aimed at beginners and users unfamiliar with full stack software development, the community encourages all levels of technical and non-technical users to get involved.

Characteristics

 * Designed for offline first, no-backend, NoSQL web development.
 * Hoodie is open source and encourages community involvement.
 * Further extensions to core functionality are encouraged.
 * Designed using an approach of writing simple, idealised 'dreamcode' and then finding a way to implement this into working code.

Platforms and users
Built to be cross-platform, Hoodie works on all major Linux distributions, as well as on other Unix-like systems Mac OS X, and Microsoft Windows support.

Hoodie is used commercially by the Appback hosting site which uses hoodie to provide a Back end as a Service (BaaS), minutes.io web application and Neighbourhoodie development house.

A showcase of applications using Hoodie is provided on the Hoodie website.