the initial implementation.
make the storage configurable.
also requires $ENV{APP_HOME}.
Merge remote-tracking branch 'origin/master'