Skip to content
Multimedia story telling for the web.
JavaScript Ruby CSS HTML
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Publish pageflow-scrolled storybook via Travis Apr 20, 2020
admins/pageflow Add inline documentation to membership admin May 18, 2020
app Add primary and secondary button composables May 25, 2020
bin Rewrite build-edge script to use gemspec files May 12, 2020
config Allow setting type name on entry create May 11, 2020
db/migrate Extract entry template from theming Mar 11, 2020
doc Add troubleshooting section to Rails Engine Development docs Apr 22, 2020
entry_types Use forked version of react-compare-image May 29, 2020
lib added videojs to the list of pageflow precompile assets and included … May 13, 2020
package Let content element types handle destroy button May 28, 2020
spec Allow setting type name on entry create May 11, 2020
vendor/assets/javascripts Improve Capybara Chrome setup Dec 23, 2019
.doclets.yml Add doclets config file Oct 6, 2016
.eslintignore Define ignore files for eslint and jshint Feb 9, 2017
.gitignore pageflow/frontend.js: incldue in gitignore, gemspec and build-edge sc… Apr 15, 2020
.hound.yml Move pageflow-react package to paged entry type Apr 17, 2020
.jshintignore Update package path in jshintignore Apr 21, 2020
.jshintrc Make TabsView tabs scrollable May 31, 2019
.pr_log.yml Update .pr_log.yml Sep 13, 2017
.rspec Use Instafail RSpec formatter Nov 4, 2014
.rubocop.yml Add rake task to generate seed json file for storybook Feb 13, 2020
.sassdocrc Add further theme options for player controls Jun 30, 2016
.scss-lint.yml Add emulation mode menu to bottom of editor sidebar Oct 19, 2018
.travis.yml Do not publish storybook if Travis build step fails May 6, 2020 Bump version to Apr 1, 2020 Improve Readme Jan 8, 2018 Document new repository layout Feb 9, 2017
Gemfile support ruby-2.3 in gemspec Jan 22, 2020
MIT-LICENSE Update year range in copyright Jan 8, 2018 Move troubleshooting section from wiki to docs Feb 11, 2020
Rakefile Update pre-release build task Dec 5, 2019
babel.config.js Setup Rollup build for entry type packages Nov 29, 2019
package.json Update Babel preset to fix duplicate helpers in build output May 8, 2020
pageflow.gemspec Update gemspec to include scrolled frontend js chunks May 11, 2020
rollup.config.js Add EditableText component May 18, 2020
yarn.lock Use forked version of react-compare-image May 29, 2020


Gem Version Build Status Coverage Status Code Climate Reviewed by Hound

Multimedia storytelling for the web. Built in cooperation with WDR.

For a high level introduction and example Pageflow stories see


For instructions on how to update from a prior version of the gem see the Updating Pageflow wiki page.


Pageflow is a Rails engine which roughly consists of the following components:

  • A full MVC stack to manage and display Pageflow stories
  • User and permission management with support for isolated accounts and user collaboration
  • A client side application for live preview editing of stories
  • Background jobs to process and encode images, audios and videos
  • Generators to quickly bootstrap a new Rails application

Pageflow assumes the following choice of libraries:


Pageflow runs in environments with:

  • Ruby >= 2.1 (see .travis.yml for supported versions)
  • Node >= 10.0
  • Rails 4.2
  • Redis server (for Resque)
  • A database server supported by Active Record (tested with MySQL)
  • ImageMagick

Accounts of the following cloud services have to be registered:


Generate a new Rails application using the MySQL database adapter:

$ rails new my_pageflow --database=mysql
$ cd my_pageflow

Do not name your application "pageflow" since it will cause conflicts which constant names created by Pageflow itself.

Database Setup

Enter valid MySQL credentials inside config/database.yml and create the database:

$ rake db:create

Gem Dependencies

Add these lines to your application's Gemfile, replacing X.Y.Z with the current Pageflow version number. It is recommended to depend on a specific minor version using the pessimistic version constraint operator. See Pageflow's versioning policy for details.

# Gemfile
gem 'pageflow', '~> X.Y.Z'

# The install generator sets up Resque as Active Job backend
gem 'resque', '~> 1.25'
gem 'resque-scheduler', '~> 2.5'
gem 'ar_after_transaction', '~> 0.5.0'
gem 'redis', '~> 3.0'
gem 'redis-namespace', '~> 1.5'

Run bundler to install dependencies:

$ bundle install

Running the Generator

Now you can run the generator to setup Pageflow and its dependencies:

$ rails generate pageflow:install

The generator will invoke Active Admin and Devise generators in turn and apply some configuration changes. When asked to overwrite the db/seeds.rb file, choose yes.

To better understand Pageflow's configuration choices, you can run the single steps of the install generator one by one. See the wiki page The Install Generator in Detail for more. If you'd rather not look behind the scenes for now, you can safely read on.

Database Migration

Now you can migrate the database.

$ rake db:migrate

Finally, you can populate the database with some example data, so things do not look too blank in development mode.

$ rake db:seed


Pageflow stores files in S3 buckets also in development mode. Otherwise there's no way to have Zencoder encode them. See setting up external services.

The host application can utilize environment variables to configure the API keys for S3 and Zencoder. The variables can be found in the generated Pageflow initializer.

For available configuration options and examples see the inline docs in config/initializers/pageflow.rb in your generated rails app.

Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb:

config.action_mailer.default_url_options = {host: 'localhost:3000'}

In production, :host should be set to the actual host of your application.

Running Pageflow

In addition to the Rails server, you need to start two Rake tasks for the background job processing. These tasks are listed in Procfile which is generated in the project root folder by the Pageflow installer.

Consider using the foreman gem to start all of these processes (including the Rails server) with a single command in your development environment.

The built-in Resque web server is mounted at /background_jobs. Use it to inspect the state of background jobs, and restart failed jobs. This functionality is only available for admins.


If you run into problems during the installation of Pageflow, please refer to the Troubleshooting docs. If that doesn't help, consider filing an issue.

Security Policy

For major security issues, at least the current release series and the last major series will receive patches and new versions.

Security related announcements will be posted to the ruby-security-ann mailing list.

If you have found a security related bug, please contact info(at) instead of creating a publicly visible issue.


Pull requests are welcome on GitHub at Everyone interacting in the project's codebases, issue trackers and mailing lists is expected to follow the code of conduct.

See the Contributing section in the guides list for instructions on how to setup your development environment. The GitHub wiki contains high level guides on common development workflows.


The gem is available as open source under the terms of the MIT License.

Special Thanks

Built in cooperation with:


We would like to express our special thanks to the following services for supporting Pageflow through free open source plans:

BrowserStack Travis CI

You can’t perform that action at this time.