zombiebox
Version:
ZombieBox is a JavaScript framework for development of Smart TV and STB applications
191 lines (135 loc) • 9.7 kB
Markdown
# ZombieBox
ZombieBox is a JavaScript framework for development of Smart TV and STB applications.
## Why ZombieBox?
* It's cross-platform;
* It leverages a strongly typed JavaScript by [Google Closure Compiler](https://developers.google.com/closure/compiler/) and modern ECMAScript;
* It provides a set of typical solutions for TV, such as spatial navigation or remote logging;
* It produces a fast application that has a small size and a minimum of 3rd party code;
## Getting started
Init a node.js project:
```bash
npm init
```
Install ZombieBox and some of its components that you will most likely need:
```bash
npm install zombiebox
npm install zombiebox-platform-pc zombiebox-extension-cutejs
```
Create application `config.js` and start developing or use boilerplate:
```bash
npx zombiebox init $NAME
# or without npx:
./node_modules/zombiebox/bin/cli.js init
```
Run the development server:
```bash
npx zombiebox run
```
## Platforms
ZombieBox supports a lot of modern Smart TV and STB platforms and also some legacy but high-demand platforms, which allows you to deliver your application to a wide number of devices.
Any capable platform can be easily support by extending it.
Platforms are a subtype of ZombieBox Addon. See [addons](docs/addons.md) for more information.
List of supported platforms:
| Platform | Package | Version |
|----------|---------|---------|
| Desktop browsers | [`zombiebox-platform-pc`][ab] |  |
| Android TV | [`zombiebox-platform-android-tv`][ac] |  |
| Samsung Tizen (2015+) | [`zombiebox-platform-tizen`][ad] |  |
| Samsung Orsay (2012-2014) | [`zombiebox-platform-samsung`][ae] |  |
| LG webOS (2014+) | [`zombiebox-platform-webos`][af] |  |
| LG NetCast (2012-2014) | [`zombiebox-platform-lg`][ag] |  |
| MAG STB | [`zombiebox-platform-mag`][ah] |  |
| Dune HD | [`zombiebox-platform-dune`][ai] |  |
Archived platforms:
| Platform | Package | Version |
|----------|---------|---------|
| Headless browsers | [`zombiebox-platform-headless`][aj] |  |
| Eltex STB | [`zombiebox-platform-eltex`][ak] |  |
| TVIP STB | [`zombiebox-platform-tvip`][al] |  |
[ab]: https://www.npmjs.com/package/zombiebox-platform-pc
[ac]: https://www.npmjs.com/package/zombiebox-platform-android-tv
[ad]: https://www.npmjs.com/package/zombiebox-platform-tizen
[ae]: https://www.npmjs.com/package/zombiebox-platform-samsung
[af]: https://www.npmjs.com/package/zombiebox-platform-webos
[ag]: https://www.npmjs.com/package/zombiebox-platform-lg
[ah]: https://www.npmjs.com/package/zombiebox-platform-mag
[ai]: https://www.npmjs.com/package/zombiebox-platform-deune
[aj]: https://www.npmjs.com/package/zombiebox-platform-headless
[ak]: https://www.npmjs.com/package/zombiebox-platform-eltex
[al]: https://www.npmjs.com/package/zombiebox-platform-tvip
Installation of a new platform is easy and nothing more than installation of a new npm package with further saving in the dependencies.
For example, for LG Netcast platform:
```bash
npm i zombiebox-platform-lg --save
```
Then configure the installed platform for building of a distribution package:
```javascript
// Your config.js
module.exports = () => ({
platforms: {
lg: {
// Some platform-specific configuration, see platform documentation
}
}
});
```
Finally, build a package:
```bash
npx zombiebox build lg
```
## Extensions:
Extension is a special npm package that extends default functionality of the framework.
To add an extension just install a package via npm and save it in the dependencies.
Extensions are a subtype of ZombieBox Addon. See [addons](docs/addons.md) for more information.
List of available extensions:
| Description | Package | Version |
|-------------|---------|---------|
| CuteJS Template engine | [`zombiebox-extension-cutejs`][ba] |  |
| Set of basic TV-oriented components | [`zombiebox-extension-ui`][bb] |  |
| Dependency Injection | [`zombiebox-extension-dependency-injection`][bc] |  |
| I18n support | [`zombiebox-extension-i18n`][bd] |  |
| Tools for Pixel Perfect testing | [`zombiebox-extension-pixelperfect`][be] |  |
| Popup with main info about the application | [`zombiebox-extension-about`][bf] |  |
| Lodash library integration | [`zombiebox-extension-lodash`][bg] |  |
| Environment for interactive UI development | [`zombiebox-extension-storybook`][bh] |  |
| Emoji support | [`zombiebox-extension-emoji`][bi] |  |
| Subtitles | [`zombiebox-extension-ui-subtitles`][bj] |  |
[ba]: https://www.npmjs.com/package/zombiebox-extension-cutejs
[bb]: https://www.npmjs.com/package/zombiebox-extension-ui
[bc]: https://www.npmjs.com/package/zombiebox-extension-dependency-injection
[bd]: https://www.npmjs.com/package/zombiebox-extension-i18n
[be]: https://www.npmjs.com/package/zombiebox-extension-pixelperfect
[bf]: https://www.npmjs.com/package/zombiebox-extension-about
[bg]: https://www.npmjs.com/package/zombiebox-extension-lodash
[bh]: https://www.npmjs.com/package/zombiebox-extension-storybook
[bi]: https://www.npmjs.com/package/zombiebox-extension-emoji
[bj]: https://www.npmjs.com/package/zombiebox-extension-ui-subtitles
## Configuration
Configuration file is a module that exports a function returning configuration object.
By default, the framework will try to find file `config.js` in the root of the project, but you can set a custom path passing `--config` to the CLI commands.
See [configuration](docs/configuration.md) for details.
## CLI commands
Use npx to access ZombieBox CLI utility: `npx zombiebox` or `npx zb`.
* `npx zb init <name> [root]` - generates skeleton of a project interactively
* `npx zb run` - starts the development server
* `npx zb build <platforms..>` - builds a distribution package
* `npx zb buildCode` - generates runtime code
* `npx zb (addScene|addPopup|addWidget) <name> [path]` - generates boilerplate code for UI components
* `npx zb generateAliases [filename]` - generates alias map for development tools
* `npx zb <platform> <command>` - runs a specific command provided by a specific platform
## Change log
See the [CHANGELOG.md](CHANGELOG.md).
## Version policy
ZombieBox is not semver compatible. We tried, but this wasn't working well. ZombieBox tries it's best to follow a version policy close to semver that makes sense.
* Major versions denote major changes in code structure and APIs. It's probably either a brand new framework or requires extensive migration if major version changed.
* Minor versions mean new features. There might be **breaking changes in minor versions**, but they likely require minor migrations like changing methods order, signatures or replacing one component with another equivalent. These should be documented in [CHANGELOG.md](CHANGELOG.md) and [migratiosn](./docs/migrations) docs.
* Patch versions do not introduce breaking changes and either fix bugs or add neglectable improvements in non-breaking way.
* Pre-release versions are meant to contain experimental features that are going to be introduced later and are likely to break compatibility and be generally unstable. These are only pushed to `@dev` dist-tag.
All ZombieBox components declare their dependencies on each other with `peerDependencies` field in package.json. Node itself does not enforce this field, but ZombieBox does in its CLI commands.
## Behind ZombieBox
ZombieBox was developed and is maintained by [Interfaced](https://interfaced.tv).
It was created as internal framework for numerous Smart TV and STB [applications](https://interfaced.tv/projects.html) developed for industry leaders.
## License
This library is distributed under MIT license. See [LICENSE](LICENSE).
Copyright © 2012-2019, Interfaced. All rights reserved.
If you have any questions about license, please write to [licensing@zombiebox.tv](mailto:licensing@zombiebox.tv).