# SwiftByte Hazel IDE

SwiftByte Hazel is a cloud and desktop ready framework for a plugin-first Intergrated Development Environment (IDE).

Hazel follows an extension-based approach similar to GitHub's Atom IDE. This allows Hazel to be extremely flexible and support a wide range of different types of development environments.

Hazel is Javascript-based framework that supports both the browser and Node.js to ensure maxmimum compatability with potential target platforms.

## Directory

  * `src/hazel` - Contains the Typescript-based Hazel framework
  * `src/render` - Contains the Vue components and plugin for rendering

## User Interface

|------------------------------------|
| Header                             |
|------------------------------------|
| Left | Top                 | Right |
|      |---------------------|       |
|      | Center              |       |
|      |                     |       |
|      |                     |       |
|      |                     |       |
|      |---------------------|       |
|      |Bottom               |       |
|------------------------------------|
| Footer                             |
|------------------------------------|

To be as flexible as possible Hazel implements a very basic UI layout that's easy to extend from extensions.

## Extensions

The main functionality of Hazed is provided via user-installed extensions. We provide extensions and extension packages for common stacks and languages to get you up and running fast.

Because of the extension-based nature of Hazel it can be endlessly customized for any stack or system. 

# Installing

```bash
npm i --save-dev @swiftbyte/hazel
```

# Using

## Platform

To use the Hazel framework you require an implementation of the `Platform` and related interfaces. These interfaces provide the essential implementations for things such as opening files on the specific platform.


# TODO

  * Make extension loader async (or web worker?)

  * http://operational-transformation.github.io/
  * https://github.com/Jeffail/leaps/blob/master/lib/text/ot_buffer.go

  * Why does typescript mangle async/await functions and require @babel/plugin-transform-runtime and @babel/runtime to work?
  * Migrate to @swiftbyte/swiftbyte

