node package manager


greni npm version

A batteries-included way to quickly build modern, fast, single-page applications


Greni is the Icelandic word for the den of a fox. It is also a build tool that intelligently concatenates a pipeline of the following tools:

greni is cunning, and avoids rebuilding your svelte component files unless they have changed or the build configuration (i.e. debug vs production) has changed.


Create a greni.json file, and populate it with contents such as the following:

    "components": ["src/components/Card.html", "src/components/App.html"],
    "entryPoints": {"index.js": "src/index.js"},

You can also put this in your package.json under the greniConfig key:

    "greniConfig": {
        "output": "output/",
        "components": ["src/components/Card.html", "src/components/App.html"],
        "entryPoints": {"index.js": "src/index.js"}

Run greni or greni --debug to build the following artifacts:

  • output/index.js
  • output/

To automatically rebuild when your source files change, use the entr utility:

while true; do find src/ -type f | entr -d greni || break; done

Configuration Reference

You can configure greni via either a greni.json file, or package.json using the greniConfig key.

The possible keys in this object are shown below:

Key Value
components An array of svelte component paths. Defaults to [].
entryPoints An object mapping outputName -> entrySourceFile.
output A path. Defaults to output/.
buble An object defining buble options. Defaults to null, meaning buble is not run.
eslint A boolean. Defaults to true.

Future Plans

greni may someday become the central tool for building Vixeno apps, and house a repository of common components.