A FindingFive study consists of four components that specify the content and logic of a behavioral study: stimuli, responses, trial templates, and the procedure. Here we provide an introductory overview of the grammar underlying these components, especially for researchers who haven’t had much experiences with programming.

At the core of defining a FindingFive study is the concept of property-value pairs. For example, when you create a blank stimulus, the following content is generated for you to modify:

    "type": "some type",
    "content": "some content"

Here, "type": "some type" is a property-value pair, and so is "content": "some content". These pairs provide instructions to FindingFive for rendering the content of stimuli and responses, and more complex usage of such pairs (including nested property-value pairs) can achieve sophisticated experimental procedures to fit the need of your study.

Top-level properties

A study specification requires four top-level properties stimuli, responses, trial templates, and procedure (click on the names to see detailed documentation of each property). These four components form an intuitive hierarchy: stimuli and responses are the basic elements in a study, trial templates define which and how stimuli and responses are used in each trial, and finally, the procedure defines how trials are organized in a study.

The current version of FindingFive has eliminated the need to define these top-level properties explicitly. We now provide an intuitive Study Editor that defines these top-level properties automatically. However, you’ll still need to define what goes into each of the four top-level properties.

Property-value pair

A property-value pair is an object that specifies some value for some property. For example, in the above study specification, we have defined four different properties, stimuli, responses, trial_templates, and procedure.


A set of property-value pairs, separated by a comma , and enclosed by brackets {}, is a dictionary. For example, a study specification is just one big dictionary.

Types of values

The names of properties are always quoted strings (e.g., "stimuli"). The value of a property, however, can be of many different data types, including:

  • dictionary, which results in the case of nested property-value pairs. For example, consider the following value of "stimuli":

    "stimuli": {
        "training-prompt": {
            "type": "text",
            "content": "Please listen carefully to the next sentence"

    In this case, the value of the property stimuli is a dictionary with only one property named training-prompt.

  • string. For example, in the code snippet above, the stimulus training-prompt has a property named type, whose value is a simple string text (i.e., "type": "text").

  • boolean, true or false, without quotation marks. For example, consider the following definition of a response:

    "response1FB": {
        "type": "choice",
        "choices": ["Correct", "Wrong"],
        "feedback": true

    Setting the property "feedback" to true turns on trial-by-trial feedback.

  • list. For example, in the above response definition, the value of the property "choices" is a list of two strings, representing the options on a two-alternative forced choice trial.