About Haplo
Haplo – from the Greek “hapl==ó==os”, meaning “single” or “simple”.
Haplo has a single namespace for all the items it manages, dynamically creating subsets as required, using an information architecture which is very simple yet powerful, enabling it to express complex information in an easy to understand manner.
Haplo is best used for developing information applications where you can use the main Haplo user interface for the majority of the UI. Here’s how Haplo compares to other tools.
A mature platform for information applications
Platform highlights
- A linked-data style object store, with pervasive multi-values and extensive hierarchy support
- An expressive label-based permissions model
- An extensive API for building server-side JavaScript plugins
- Web interface providing an exceptional user experience
- Customisable full-text search combined with object store graph queries
- File handling, including conversion, previewing and version control
- Lightweight “humane” workflow support
- Designed to evolve as user needs change, enabling agile application development
- Proven in production for over six years, used by a diverse range of clients
Technical details
- Run on the Java Virtual Machine
- Primarily written in JRuby
- Plugins are written in JavaScript, and run on the server using the Rhino runtime
- Object store is built on the PostgreSQL database and Xapian text indexing library
Data model
- Linked data / semantic web inspired object store
- Mix between graph database, object store, and search engine, with queries expressed as set operations
- Supports multi-values on every field
- Hierarchical relationships
- Permissions system labels every object with one or more labels, with access control written as boolean statements matching labels.
Key platform services
- Application user interface for editing and using a collection of “information”
- Management UI for configuration of the application, including the schema of the object store
- Plugin API
- Object store
- Relational database
- Workflow
- File store
- File processing and conversion
- Web application development framework
- HTML forms system for editing JSON document (includes repeating sections, separately open sourced)
- Access control using a label model
- Built in user database with users, groups, admin UI, etc
- Scriptable external authentication
- Audit trail
- Background tasks
- Low level HTTP access to allow custom handling of requests, as well a high level integration into the main platform UI.
- Standard UI components
- Plugin debugging and testing
The platform API encourages a programming style where:
- Plugins are small, and cooperate with other plugins to build up the applications
- Plugins share objects, operating on common types (eg “People”)
- Applications observe changes to the objects to react to changes made by users or other plugins
Plugin development
The Haplo server can be run in a special mode which adds plugin development tools. The Plugin Tool runs on your computer, observing changes to the plugin source on your local computer. When it notices a change, it automatically uploads the file and updates the server, for immediate testing without a server restart.
When you want to release the plugin, you use the plugin tool to ‘pack’ the plugin. This generates a production version with minified client side resources, and adds a manifest and version for use by the management systems.
For the open version, plugins are deployed by moving the packed plugin to the configured plugins directory. Plugins can be updated within a running server without a restart, allowing zero downtime for plugin updates.