# What is in BladeRunner?

This topic gives you an introduction to the major components of _BladeRunner_ which are shown below. To understand the structure and conventions used in _BladeRunner_, see "[Application Structure](bladerunner-application-structure.md)".

## BladeRunner Components

_BladeRunner_ consists of seven major components:

![diagram-9](../../../images/diagram-9.png)

### Bundlers

Whenever an **app** (or part of an app) is run during development, **bundlers** read all necessary code from the app project stored on disk. They perform a recursive dependency analysis, gathering all the assets that the app requires (HTML, JavaScript, XML, CSS, and i18n tokens) from different **blades** and libraries. For each asset type a specific bundler assembles a single "bundle" file. This makes development easier, because the code for all components can be managed separately, and automatically gathered together at runtime. For the production version of an app, permanent bundles file are created, enhancing performance. For bundlers to work, your code has to comply with _BladeRunner’s_ [structure](bladerunner-application-structure.md) and conventions, which are enforced when the bundlers are executed. [Find out more about bundlers...](bladerunner-about-bundlers.md)

### Embedded Jetty Server

This is a standard J2EE servlet container that is started by the _BladeRunner_ Java application, and which then listens for incoming HTTP requests. It runs on a developer’s machine, and provides access to all apps managed by _BladeRunner_. Your browser makes requests for your app’s index page or workbench. These requests are first processed by a set of Java filters and servlets, which in turn call the bundlers that assemble the required code assets from your app, ready for return to the browser.

**📌 NOTE**\
It is expected that each developer will run a single instance of the server on their local machine; it’s not designed for remote access by multiple users.

### BladeRunner Libraries

The HTML5 and JavaScript libraries provide most of the underlying code needed to write apps. They include:

* Low-level utilities and services: a light-weight class-loading and inheritance system, low-level browser utilities.
* A service architecture and event-messaging using a publish/subscribe model.
* _[Presenter](../presenter/index.md)_, an MVC library for building rich user interfaces, where HTML templates are enhanced by binding elements to JavaScript properties.
* An internationalisation library that allows you to produce localised versions of your app simply by listing translations in properties files.
* A workbench library, so you can run blades in a standalone web-page, make quick modifications and see the effects by refreshing your browser.

[Find out more about libraries...](../base-library/index.md)

### Other HTML5 Libraries

Caplin also supplies a set of other HTML5 libraries that are typically required for building web trading apps, and can be purchased separately.

### Integration Tasks

The integration tasks perform common development operations. You can either run them from a command line, or add them to your continuous integration system. The "export" task for example, helps you to deploy your app, generating a _war_ file that can be deployed to any J2EE Servlet container, bundling all assets and configuring necessary servlets. Other tasks allow you to run _Verifier_ tests, create apps and blades, or import blades from other apps.

### Verifier Test Framework

_Verifier_ is an integrated framework for unit and acceptance testing of apps. It’s included with _BladeRunner_, although you can use a different testing framework if you prefer. It uses Google’s [_js-test-driver_](https://code.google.com/archive/p/js-test-driver/) to execute unit tests, but we’ve extended _js-test-driver_ to understand and use our bundlers, so it automatically includes any dependencies of the code you’re testing, which makes life a bit easier.

Verifier’s acceptance tests are written in a _Given-When-Then_ syntax, which it provides by extending the [_Jasmine library_](https://jasmine.github.io/). This means you can write understandable tests that clearly specify the functionality they’re testing. [Find out more about Verifier...](../verifier/index.md)

### Dashboard

The **Dashboard** is a browser-based GUI, that allows you to explore your _BladeRunner_ apps. It lets you create apps, **aspects**, **bladesets** and **blades**, as well as allowing you to perform other tasks such as importing functionality from one app to another. If you prefer, you can also carry out these tasks from a command line.

The Dashboard also provides access to other Caplin collateral, such as release notes and supporting documentation, including API reference material.
