BAT High Level Overview

Welcome to BAT

BAT stands for Booking and Availability Management Tools.

It is a set of tools created by the team who specialize in online booking systems. BAT provides a foundation through which a wide range of availability management, reservation and booking use cases can be addressed. BAT will work with both Drupal 7 and Drupal 8.

BAT is a developer's tool, not a site building tool. The UI is minimal. If you wish to build a new application based on BAT, be prepared to invest significant time writing code, (or at least rules) particularly if you need commerce/payment functionality or widgets for end users to book resources on their own.

BAT on its own is a booking and availability management framework, much in the same way Drupal is a content management framework and Drupal Commerce is an e-commerce framework. It wraps around a stand-alone PHP Library also developed by Roomify. Our aim is to build specific solutions on top of BAT to tackle specific application domains.

Roomify for Accommodations

Roomify for Accommodations is a complete solution for vacation rentals, B&Bs and hotels with multi-property / multi owner support. It's great example of what is possible with BAT and Drupal:

Docs & Screencast

You can get documentation on BAT here. You may evaluate this module on

We've made a screencast showcasing some of the basic concepts.

This DrupalCon New Orleans 2015 session talks about why we use a stand-alone PHP Library.


BAT aims to address the following tasks.

Define bookable things. Entities that could represent anything within an application domain that have information associated with them about what *availability state* they find themselves in any given period of time. In addition, you may also need to associate *pricing information* related to the cost of changing the *availability state* a *thing* over a given time (e.g. booking a hotel room for a few nights).

Manage availability states. Bookable things will find themselves in various states (e.g. "available to book", "unavailable", "currently in use by Bruce", etc). BAT allows you to define such states and provides both GUI-based tools (e.g. interactive calendars) as well as API-based tools to change such states (because machines want to have fun too).

Search for available things. Given a time range, a set of acceptable availability states, and an arbitrary number of other search filters BAT should be able to answer question such as: "BAT, is the car available to pick up from the cave at 4pm today, thanks - Robin".

Determine cost of booking. At any given time and given state things will have a cost to change from one state to another (e.g. go from "car sitting in cave" to "car being used by Robin". This cost for the change in state (i.e. a booking) is determined using tools that BAT provides to define what the pricing terms will be.

If working on the dev version checkout our Github repo for the very very latest!

NB: The BAT logo has been shamelessly lifted from the DrupalCon Austin logo because... it was too awesome not to use.

Supporting organizations: 

Project information