Skip to main content

Bride of Frankensystem

Bride of Frankensystem (BOFS) is an open-source framework for building online behavioral experiments and surveys. You describe your study in plain-text files: a TOML config for settings and page flow, JSON files for questionnaires, and HTML files for custom pages. BOFS handles participant routing, condition assignment, consent forms, data storage, and provides an admin panel for monitoring and export.

Use BOFS when you need to go beyond the capabilities of online survey platforms like Qualtrics or SurveyMonkey. For example, embedding custom tasks, assigning participants to different conditions, adding custom logic, etc. BOFS was originally built with the goal of making it easy to embed Unity WebGL games within a sequence of questionnaires, but supports hosting any kind of JavaScript task (e.g., jsPsych, lab.js, PsychoPy, P5.js, and more) or custom HTML.

BOFS is built on Flask. When the patterns built into BOFS aren't enough, custom Flask routes can be added to the same project.

BOFS is installed as a Python package and is managed separately from your own projects. New releases of BOFS are generally backwards compatible with experiments implemented using older releases - projects created in the first version of BOFS (from 2015) work on the latest with only minor changes.

Citation

If you use BOFS in your research, please cite it via the following identifiers:

A BibTeX entry and full citation details are available on the documentation site.

To see papers that have used BOFS to enable online data collection, see the publications list.

Documentation & Examples

Features

  • Built-in consent page. Edit the wording in an HTML file at the project root.
  • Random assignment to conditions, with balancing as participants enroll.
  • Experiment flow defined as a list of pages in your config file.
  • Questionnaires defined in JSON: item-order shuffling, conditional questions and pages, and computed scores at submission time.
  • Reuse earlier answers - for instance, embed a participant's prior rating into the wording of a later question.
  • Repeated measurements, either within a session (pre/post) or across days and weeks via an external ID that resumes the participant's condition.
  • Custom JSON-defined database tables for trial-by-trial events, task scores, mouse movement, or anything else your study generates. JavaScript POSTs to /table/<name>; rows show up in the admin panel.
  • Static file serving for stimuli (images, audio, video), PDFs, and any JS libraries your custom pages need.
  • MTurk and Prolific external-ID handling, with configurable completion-code redirects.
  • Custom Python/Flask routes for embedded tasks or other server-side logic.
  • Instruction and simple pages built from HTML alone, no Python required.
  • Admin panel with live participant progress, per-condition descriptive statistics (N, mean, SD, median, box plots), and data export.

Installing and Running BOFS

Refer to the installation instructions in the documentation.

Once installed, run BOFS init to generate a new project.

Dependencies

BOFS requires Python 3.9+, along with the following Python packages:

  • flask - the web framework BOFS is built on.
  • flask-wtf - form handling and CSRF.
  • flask-sqlalchemy - bridge between Flask and SQLAlchemy.
  • sqlalchemy - ORM used for database table definitions and queries.
  • flask-compress - supports the compressed assets that Unity WebGL builds use.
  • waitress - production WSGI server; an alternative to Flask's built-in server or Apache.
  • toml - configuration files use the TOML format.
  • crawlerdetect - filters out web crawlers so they aren't counted as participants.
  • pandas - data export and the admin results preview.
  • questionary - interactive prompts in the BOFS init wizard.
  • bleach - HTML sanitization for user-supplied content.
  • docstring-parser - parses question-type schemas from template docstrings.

Metadata

Release files for bride-of-frankensystem-dev 2.0.0.64

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bride-of-frankensystem-dev 2.0.0.64
File Size Uploaded Provenance Actions
bride_of_frankensystem_dev-2.0.0.64.tar.gz 1.0 MB Without provenance Details for bride_of_frankensystem_dev-2.0.0.64.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bride-of-frankensystem-dev 2.0.0.64
File Interpreter ABI Platform Actions
bride_of_frankensystem_dev-2.0.0.64-py3-none-any.whl Python 3 none any Details for bride_of_frankensystem_dev-2.0.0.64-py3-none-any.whl

Total release size: 2.3 MB

Release files / bride_of_frankensystem_dev-2.0.0.64.tar.gz

Download URL bride_of_frankensystem_dev-2.0.0.64.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
417328d107bec6b7d2df27a2757e6960d943a6ea263f5c9f81c192a26de3890d
BLAKE2b-256 checksum
How to use checksums
b022d10cb2a1ec27a85f74d7e5dfe400e5e8ab758c687e23cdf34f73b5b30bc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Release files / bride_of_frankensystem_dev-2.0.0.64-py3-none-any.whl

Download URL bride_of_frankensystem_dev-2.0.0.64-py3-none-any.whl
Size 1.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
a426fbf625965fabc741fb7bb0258632a2a3d3c570d9de31cc75b067ed5716d5
BLAKE2b-256 checksum
How to use checksums
d19af319af8c6354f67e30109ab9ebb532a9473b4a96707adf20112c35d99a24
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Security for bride-of-frankensystem-dev 2.0.0.64

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page