BYSS: Build Your Static Site

BYSS is a static site generator. It is thought to be extensible and flexible.

The basics

BYSS requires a program file, which must tell to BYSS the actions it should take. This program is thought to be easy but extensible.

BYSS only knows how to load plugins and how to execute them. The program says the order and the parameters of these plugins.

Basic execution is like this:

   $ byss -p program.byss

If you have your own plugins, it shoud be loaded as:

    $ byss -p program.byss --plugins-path path1,path2,path3

Where "pathX" are paths where some plugins can be found.

If no program is set, then program.byss" will be used.

Program file

As Byss only executes plugins, the main part of the project are the plugins themselves. Let's see the basic structure of the program file:

      parameter1 = value
      parameter2 = 1234567890

      parameter1 = value
      parameter2 = 'long value'

Plugins must be as simple as possible and should have as few parameters as possible.


Let's see the currently available plugins. This list will grow when some plugin were added.

Find Files

  • Name: find_files
  • Arguments:
    • path: path to search for files. Default: .
    • pattern: pattern to search for. Default: .*

It will search for files and will append them to the input. It would be recursive.


  • Name: copy
  • Arguments:
    • path: target path to write files. relative paths to files will be kept. Default: _deploy
    • pattern: only files that match the pattern will be copied. Default: .*

It will copy the files without modifying them.


An example of program:

      path = src

      path = _deploy

Create a plugin

Plugins are thought to be simple. So it is very easy to implement them.

Just create a file in any empty directory. It should have a class inside that implements the run method. This method has only two parameters: self, and a hash with arguments. The init method should be used without extra arguments.

To register the plugin, outside the class, you can call:

    byss.register('plugin_name', class_for_plugin)

One file can contain several plugins if necessary.

There is an object that can be used inside your class: the byss object. It will have the next fields: log: it is a logger instance, ready to be used. files: list with the files being processed. * tmp_files: list with files that should be removed after the execution.

No other thing should be necessary.

Basic plugin example

The 'Hello world' example should be something like this:

class Example(object):
    def __init__(self):

    def run(self, arguments):'Hello, world')

byss.register('example', Example)

Difficult, uh?

And the usage inside the program file should be this:


That's all.