open-index/open-npm huggingface dataset:
npm package: @jsprismarine/bedrock-data
Description: BedrockData from PMMP exported in a nodejs friendly way.
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/bedrock-data

[![License](https://img.shields.io/github/license/JSPrismarine/JSPrismarine)](https://github.com/JSPrismarine/JSPrismarine/blob/master/LICENSE)
[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/bedrock-data)](https://www.npmjs.com/package/@jsprismarine/bedrock-data)

BedrockData from PMMP exported in a nodejs friendly way.

## Installation

To install `@jsprismarine/bedrock-data`, use the following command:

```
pnpm install @jsprismarine/bedrock-data --save
```
npm package: @jsprismarine/client
Description: Minecraft: Bedrock Edition RakNet client
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/client

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/client)](https://www.npmjs.com/package/@jsprismarine/client)
npm package: @jsprismarine/color-parser
Description: Parse minecraft color codes
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/color-parser

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/color-parser)](https://www.npmjs.com/package/@jsprismarine/color-parser)
npm package: @jsprismarine/errors
Description: JSPrismarine shared errors
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/errors

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/errors)](https://www.npmjs.com/package/@jsprismarine/errors)
npm package: @jsprismarine/logger
Description: JSPrismarine logger and utilities
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/logger

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/logger)](https://www.npmjs.com/package/@jsprismarine/logger)

Custom transport for `winston` to deal with `readline` cli I/O and general logging boilerplate.
npm package: @jsprismarine/math
Description: JSPrismarine math utilities
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/math

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/math)](https://www.npmjs.com/package/@jsprismarine/math)

JSPrismarine math utilities.
npm package: @jsprismarine/minecraft
Description: Minecraft: Bedrock Edition data and related utilities
Author: JSPrismarine
Latest version: 0.13.1

# JSPrismarine/minecraft

This package contains data directly related to the Minecraft: Bedrock Edition game.

> Note: This is still a WIP

### Why was it introduced?

This package is introduced for its convenience in further separating the server logic from the protocol. Previously, importing the server logic was necessary to use the protocol package. However, this idea is particularly compelling for two main reasons:
* Now, we can directly generate/manage block states or other resources with this package.
* It effectively separates the game structures from the server logic, resulting in improved modularity and easier maintainability.
npm package: @jsprismarine/nbt
Description: Minecraft: Bedrock Edition NBT parser/writer
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/nbt

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/nbt)](https://www.npmjs.com/package/@jsprismarine/nbt)
npm package: @jsprismarine/raknet
Description: Basic RakNet implementation written in TypeScript
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/raknet

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/raknet)](https://www.npmjs.com/package/@jsprismarine/raknet)
npm package: @jsprismarine/server
Description: Minecraft: Bedrock Edition RakNet client
Author: JSPrismarine
Latest version: 0.13.1

# @jsprismarine/server

[![Join the Discord Server](https://img.shields.io/discord/704967868885762108?color=%237289DA&label=Discord)](https://discord.gg/6w8JWhy)
[![npm](https://img.shields.io/npm/dt/@jsprismarine/server)](https://www.npmjs.com/package/@jsprismarine/server)
npm package: @jsprismarine/typedoc-material-theme
Description: A TypeDoc theme based on Material 3.
Author: Damien Seguin
Latest version: 1.0.4

# typedoc-material-theme

[![npm version](https://img.shields.io/npm/v/typedoc-material-theme)](https://www.npmjs.com/package/typedoc-material-theme)
[![stability-stable](https://img.shields.io/badge/stability-stable-green.svg)](https://www.npmjs.com/package/typedoc-material-theme)
[![npm minzipped size](https://img.shields.io/bundlephobia/minzip/typedoc-material-theme)](https://bundlephobia.com/package/typedoc-material-theme)
[![dependencies](https://img.shields.io/librariesio/release/npm/typedoc-material-theme)](https://github.com/dmnsgn/typedoc-material-theme/blob/main/package.json)
[![types](https://img.shields.io/npm/types/typedoc-material-theme)](https://github.com/microsoft/TypeScript)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-fa6673.svg)](https://conventionalcommits.org)
[![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://github.com/prettier/prettier)
[![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://github.com/eslint/eslint)
[![license](https://img.shields.io/github/license/dmnsgn/typedoc-material-theme)](https://github.com/dmnsgn/typedoc-material-theme/blob/main/LICENSE.md)

A TypeDoc theme based on [Material 3](https://m3.material.io/).

[![paypal](https://img.shields.io/badge/donate-paypal-informational?logo=paypal)](https://paypal.me/dmnsgn)
[![coinbase](https://img.shields.io/badge/donate-coinbase-informational?logo=coinbase)](https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3)
[![twitter](https://img.shields.io/twitter/follow/dmnsgn?style=social)](https://twitter.com/dmnsgn)

![](https://raw.githubusercontent.com/dmnsgn/typedoc-material-theme/main/screenshot.png)

## Installation

```bash
npm install typedoc-material-theme
```

## Usage

This plugin add a `themeColor` option to `typedoc`: the Material 3 source color to derive the theme from.

In CLI:

```bash
typedoc src/** --plugin typedoc-material-theme --themeColor '#cb9820'
```

or in `typedoc.js`:

```json5
{
  plugin: ["typedoc-material-theme"],
  themeColor: "#cb9820",
  // ... other options
}
```

Default fonts (changeable with [customCss](https://typedoc.org/options/output/#customcss)):
- [Space Grotesk](https://fonts.google.com/specimen/Space+Grotesk)
- [Space Mono](https://fonts.google.com/specimen/Space+Mono)

## Documentation

Example [generated docs of this package](https://dmnsgn.github.io/typedoc-material-theme/)

![](https://raw.githubusercontent.com/dmnsgn/typedoc-material-theme/main/variations.png)

## License

MIT. See [license file](https://github.com/dmnsgn/typedoc-material-theme/blob/main/LICENSE.md).
npm package: @jspsych-contrib/extension-countdown
Description: jsPsych extension for adding a countdown during a trial
Author: Shaobin Jiang
Latest version: 1.1.0

# jsPsych Countdown Extension

This extension adds a countdown during a trial.

## Parameters

### Initialization Parameters

None

### Trial Parameters

Trial parameters can be set when adding the extension to a trial object.

```javascript
let trial = {
  type: jsPsych...,
  extensions: [
    {type: jsPsychExtensionWebgazer, params: {...}}
  ]
}
```

| Parameter | Type | Default Value | Description |
| --------- | ---- | ------------- | ----------- |
| time | number | undefined | Time in milliseconds of the countdown |
| update_time | number | 50 | How often to update the countdown display; in milliseconds |
| format | function | (time) => String(Math.floor(time / 1000)) | The displayed content of the countdown. Receives the current time left in milliseconds and returns a string for display. |

## Data Generated

None

## Functions

These functions below are provided to enable a better interaction with the countdown. Note that all of the functions below must be prefixed with `jsPsych.extensions.countdown` (e.g. `jsPsych.extensions.countdown.pause()`).

### `pause()`

Pauses the countdown.

### `resume()`

Resumes the countdown.

### `get_time_left()`

Gets how much time there is still left in milliseconds.

## Example

```javascript
let jsPsych = initJsPsych({
  extensions: [{ type: jsPsychExtensionCountdown }],
});

let trial = {
  type: jsPsychHtmlKeyboardResponse,
  stimulus: "Hello world",
  extensions: [
    {
      type: jsPsychExtensionCountdown,
      params: {
        time: 5000,
        update_time: 20,
        format: (time) => {
          if (time < 3000) {
            document.querySelector(".jspsych-extension-countdown").style.color = "red";
          }

          let time_in_seconds = time / 1000;

          let minutes = Math.floor(time_in_seconds / 60);
          time_in_seconds -= minutes * 60;

          let seconds = Math.floor(time_in_seconds);

          let format_number = (number) => {
            let temp_str = `0${number}`;
            return temp_str.substring(temp_str.length - 2);
          };

          return `${format_number(minutes)}:${format_number(seconds)}`;
        },
      },
    },
  ],
  on_load: function () {
    setTimeout(() => {
      jsPsych.extensions.countdown.pause();
      setTimeout(() => {
        jsPsych.extensions.countdown.resume();
      }, 2000);
    }, 1000);
  },
};

jsPsych.run([trial]);
```
npm package: @jspsych-contrib/extension-device-motion
Description: jsPsych extension for tracking device motion
Author: Pedro Neto
Latest version: 1.0.0

# device-motion extension

## Overview

Extension enables tracking of device motion. This will only work on you mobile phones. If run in a browser, acceleration data along x, y and z dimentions will be null.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/extension-device-motion@1.0.0">
```

### Via NPM

```
npm install @jspsych-contrib/extension-device-motion
```

```js
import jsPsychExtensionDeviceMotion from '@jspsych-contrib/extension-device-motion';
```

## Compatibility

jsPsych v7.0. 

## Documentation

See [documentation](docs/jspsych-device-motion.md)

## Author / Citation

Created by [Pedro Neto](https://github.com/pasoneto)
npm package: @jspsych-contrib/extension-touchscreen-buttons
Description: This extension displays touch buttons that allow the participant to respond to stimuli via a touchscreen on mobile devices.
Author: Younes Strittmatter
Latest version: 2.1.0

# touchscreen-buttons extension

## Overview

This extension displays touch buttons that allow the participant to respond to stimuli via a touchscreen on mobile devices. The touch button sends key press events so that all jsPsych plugins that use keyboard input are compatible.


## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/extension-touchscreen-buttons@2.1.0"></script>
```

## Compatibility

jsPsych v7.0+.

## Documentation

See [documentation](docs/jspsych-touchscreen-buttons.md)

## Author / Citation

Created by [Younes Strittmatter](https://github.com/younesStrittmatter).

We would appreciate it if you cited this paper when you use the touchscreen-buttons extension.

Strittmatter, Y., Spitzer, M., Ging-Jehli, N., & Musslick, S. (2023, November 7). A jsPsych Touchscreen Extension for Behavioral Research on Touch-Enabled Interface. https://doi.org/10.31234/osf.io/akzwj
npm package: @jspsych-contrib/plugin-audio-multi-response
Description: This plugin collects responses to an audio file using both button clicks and key presses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# audio-multi-response

## Overview

This plugin plays an audio file and records responses generated by both button click and the keyboard. Allowing multiple response modalities is useful when designing assessments that will be administered on both desktop and mobile (e.g., phone or tablet) devices. The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.

If the browser supports it, audio files are played using the WebAudio API. This allows for reasonably precise timing of the playback. The timing of responses generated is measured against the WebAudio specific clock, improving the measurement of response times. If the browser does not support the WebAudio API, then the audio file is played with HTML5 audio.

Audio files can be automatically preloaded by jsPsych using the preload plugin. However, if you are using timeline variables or another dynamic method to specify the audio stimulus, then you will need to manually preload the audio.

The trial can end when the participant responds, when the audio file has finished playing, or if the participant has failed to respond within a fixed length of time. You can also prevent a response from being recorded before the audio has finished playing.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-audio-multi-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-audio-multi-response.md)

## Author / Citation

Created by [Adam Richie-Halford](https://github.com/richford)

Citation:

Pending
npm package: @jspsych-contrib/plugin-audio-swipe-response
Description: This plugin collects responses to an audio file using swipe gestures and keyboard responses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# audio-swipe-response

## Overview

This plugin plays an audio file and records responses generated by both swipe gestures and keyboard response. This plugin will be useful for two-alternative forced choice (2AFC) assessments that will be administered on both desktop and mobile devices. The html prompt that accompanies the audio stimulus can be animated to move off-screen before the trial ends.

If the browser supports it, audio files are played using the WebAudio API. This allows for reasonably precise timing of the playback. The timing of responses generated is measured against the WebAudio specific clock, improving the measurement of response times. If the browser does not support the WebAudio API, then the audio file is played with HTML5 audio.

Audio files can be automatically preloaded by jsPsych using the preload plugin. However, if you are using timeline variables or another dynamic method to specify the audio stimulus, then you will need to manually preload the audio.

The trial can end when the participant responds, when the audio file has finished playing, or if the participant has failed to respond within a fixed length of time. You can also prevent a response from being recorded before the audio has finished playing.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-audio-swipe-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-audio-swipe-response.md)

## Author / Citation

Created by [Adam Richie-Halford](https://github.com/richford)

Citation:

Pending
npm package: @jspsych-contrib/plugin-barchart-button-response
Description: This plugin shows a barchart of values with an optional parameter to highlight a particular bar of interest (such as one corresponding to a participant's score)
Author: Courtney B. Hilton
Latest version: 1.0.0

# plugin-barchart-button-response

## Overview

The `barchart-button-response` plugin displays a bar chart and records responses generated by a button click. The chart is displayed until a response is given. The buttons themselves can be customized using HTML formatting.

The bar chart stimulus is generated from an array of objects, where each object should contain a numeric `value` (used for the y-axis) and a string `key` (used for the x-axis label). One of the bars can optionally be highlighted in a distinct color and annotated with a text label.

This plugin uses [Chart.js](https://www.chartjs.org/) under the hood, and supports features like axis labeling, legend display, and percentage formatting on the y-axis.

---

## Loading 
Using the CDN-hosted JavaScript file:

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-barchart-button-response"></script>
```

Using NPM:

```sh
npm install @jspsych-contrib/plugin-barchart-button-response
```

```js
import jsPsychBarchartButtonResponse from "@jspsych-contrib/plugin-barchart-button-response";
```

## Compatibility

- jsPsych version: **v8.0.0 or later**

---

## Author / Citation

[Courtney B. Hilton](https://github.com/courtney-bryce-hilton)  
If you use this plugin in your research, please cite the corresponding repository or paper when available.
npm package: @jspsych-contrib/plugin-capture-url-params
Description: Captures URL parameters and saves them in the data.
Author: Courtney B. Hilton
Latest version: 1.0.0

# plugin-capture-url-params

## Overview

The `plugin-capture-url-params` plugin saves data embedded in the URL parameters into the jsPsych data object. This is useful when working with external participant platforms like Prolific, which use URL parameters to pass unique identifiers such as `PROLIFIC_PID`, `STUDY_ID`, or `SESSION_ID`.

By default, the plugin captures all available URL parameters. You can also specify a subset of required parameters using the `url_params` option. If any of these required parameters are missing, the plugin can optionally show an error message to participants and either allow the experiment to continue (`soft_fail = true`) or stop the experiment (`soft_fail = false`).

## Loading 

Using the CDN-hosted JavaScript file:

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-capture-url-params@1.0.0"></script>
```

Using NPM:

```sh
npm install @jspsych-contrib/plugin-capture-url-params
```

```js
import jsPsychPluginCaptureUrlParams from "@jspsych-contrib/plugin-capture-url-params";
```

## Compatibility

`plugin-capture-url-params` requires jsPsych v8.0.0 or later.

## Parameters

| Name            | Type             | Default                                    | Description                                                                                                                             |
| --------------- | ---------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `url_params`    | array of strings | `[]`                                       | A list of specific URL parameter keys to extract (e.g., `["PROLIFIC_PID", "STUDY_ID"]`). If empty, all URL parameters will be captured. |
| `show_error`    | boolean          | `false`                                    | Whether to display an error message to the participant if any of the specified parameters are missing.                                  |
| `error_message` | string           | `"URL parameters could not be retrieved."` | The message shown to participants if required parameters are missing.                                                                   |
| `soft_fail`     | boolean          | `true`                                     | If set to `false`, the experiment will abort when required parameters are missing. If `true`, the experiment will continue.             |

## Data

The plugin saves the captured parameters as an object in the `response` field of the trial data.

```json
{
  "response": {
    "PROLIFIC_PID": "abc123",
    "STUDY_ID": "def456"
  }
}
```

## Documentation

See [documentation](docs/plugin-capture-url-params.md)

## Author / Citation

[Courtney B. Hilton](https://github.com/courtney-bryce-hilton)
npm package: @jspsych-contrib/plugin-columbia-card-task
Description: The Columbia Card Task measures risk preferences through choices in a card game.
Author: Josh de Leeuw
Latest version: 1.0.0

# plugin-columbia-card-task

## Overview

The Columbia Card Task measures risk preferences through choices in a card game.

## Loading

### In browser

```html
<script src="https://unpkg.com/@jspsych-contrib/plugin-columbia-card-task">
```

### Via NPM

```
npm install @jspsych-contrib/plugin-columbia-card-task
```

```js
import jsPsychPluginColumbiaCardTask from "plugin-columbia-card-task";
```

## Compatibility

`@jspsych-contrib/plugin-columbia-card-task` requires jsPsych v8.0.0 or later.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/packages/plugin-columbia-card-task/README.md)

## Author / Citation

[Josh de Leeuw](https://github.com/jodeleeuw)
npm package: @jspsych-contrib/plugin-copying-task
Description: A plugin for running a copying task: a model grid on the left has to be recreated in the middle grid, using items from the right grid.
Author: Andre Sahakian
Latest version: 2.0.0

# copying-task plugin

## Overview

This plugin runs a copying task. In a trial, an example grid (the "model", containing various stimuli) on the left must replicated in the middle grid (the "workspace"). To do this stimuli from the right grid (the "resources") can be picked up and dragged to the middle grid. You can use image files (e.g., .jpg/.png/.gif) as stimuli, or built in 'nonsense' shape stimuli in any color. The plugin records the actions of the participant what items are picked up and where they are placed.    

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-copying-task@2.0.0"></script>
```

## Compatibility

jsPsych v8.0.0. For using jsPsych v7.3.0+, use version 1.0.0. 

## Documentation

See [documentation](docs/jspsych-copying-task.md)

## Author / Citation

Created by [Andre Sahakian](https://github.com/Andre3582)

Citation:

Pending
npm package: @jspsych-contrib/plugin-corsi-blocks
Description: This plugin displays a configurable Corsi blocks task and records a series of click responses.
Author: Josh de Leeuw
Latest version: 2.0.0

# corsi-blocks

## Overview

This plugin implements the Corsi block tapping task. It has two modes: a display mode and an input mode. In the display mode, the participant is shown a sequence of blocks. In the input mode, the participant is shown a sequence of blocks and must tap the blocks in the same order. Feedback can be provided after each responses. The number and arrangement of the blocks can be customized.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-corsi-blocks@2.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-corsi-blocks
```

```js
import jsPsychCorsiBlocks from '@jspsych-contrib/plugin-corsi-blocks';
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.3.2, use version 1.0.0 of this plugin.

(Earlier versions of jsPsych version 7 will work if you explicitly set the `blocks` parameter in a trial. Using the default `blocks` parameter requires `7.3.2` or later.)

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-corsi-blocks/docs/jspsych-corsi-blocks.md)

## Author / Citation

Josh de Leeuw
npm package: @jspsych-contrib/plugin-densitychart-button-response
Description: Displays a densitychart of results to show the participant on a trial
Author: Courtney B. Hilton
Latest version: 1.0.0

# plugin-densitychart-button-response

## Overview

The `densitychart-button-response` plugin displays a density plot chart and records responses generated by a button click. The chart is displayed until a response is given. The button itself can be customized using HTML formatting.

The density plot stimulus is generated from a numeric array of data, with optional parameters for customizing how smooth the densities are and the colours used. You can also add an annotation to the chart indicated by a vertical line with an accompanying text annotation.

This plugin uses [Chart.js](https://www.chartjs.org/) under the hood, and supports features like axis labeling, legend display, and percentage formatting on the y-axis.

---

## Loading

Using the CDN-hosted JavaScript file:

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-densitychart-button-response"></script>
```

Using NPM:

```sh
npm install @jspsych-contrib/plugin-densitychart-button-response
```

```js
import jsPsychBarchartButtonResponse from "@jspsych-contrib/plugin-densitychart-button-response";
```

---

## Compatibility

- jsPsych version: **v8.0.0 or later**

---

## Author / Citation

[Courtney B. Hilton](https://github.com/courtney-bryce-hilton)  
If you use this plugin in your research, please cite the corresponding repository or paper when available.
npm package: @jspsych-contrib/plugin-device-orientation
Description: Require mobile devices to be in a specific orientation (landscape or portrait) before continuing
Author: Josh de Leeuw
Latest version: 0.2.0

# plugin-device-orientation

## Overview

Require the device to be in a specific orientation (landscape or portrait) before continuing. If the device is already in the correct orientation, the trial ends immediately. On desktop browsers, orientation is determined by the window dimensions, so the trial will typically end immediately unless the browser window happens to be sized in the non-target orientation.

## Loading

### In browser

```html
<script src="https://unpkg.com/@jspsych-contrib/plugin-device-orientation"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-device-orientation
```

```js
import jsPsychDeviceOrientation from "@jspsych-contrib/plugin-device-orientation";
```

## Compatibility

`@jspsych-contrib/plugin-device-orientation` requires jsPsych v8.0.0 or later.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-device-orientation/docs/plugin-device-orientation.md)

## Author / Citation

[Josh de Leeuw](https://github.com/jodeleeuw)
npm package: @jspsych-contrib/plugin-flanker
Description: A jsPsych plugin for the Eriksen Flanker Task. Displays a configurable flanker array with precise SOA timing and supports arrows, letters, numbers, or custom stimuli. Includes keyboard and mobile-friendly button response modes.
Author: Josh de Leeuw
Latest version: 1.0.0

# @jspsych-contrib/plugin-flanker

## Overview

A jsPsych plugin for the Eriksen Flanker Task. Presents a configurable flanker array with precise Stimulus Onset Asynchrony (SOA) timing using requestAnimationFrame. Supports arrows (default), letters, numbers, or any custom HTML/SVG stimuli. Includes both keyboard and mobile-friendly button response modes.

## Loading

**CDN:**
```html
<script src="https://unpkg.com/@jspsych-contrib/plugin-flanker"></script>
```

**NPM:**
```sh
npm install @jspsych-contrib/plugin-flanker
```
```js
import jsPsychFlanker from '@jspsych-contrib/plugin-flanker';
```

## Compatibility

jsPsych v8.0+

## Documentation

See the [full documentation](./docs/plugin-flanker.md) for parameter details, usage examples, and integration instructions.

## Quick Start

```javascript
// Default arrows with keyboard response
const trial = {
  type: jsPsychFlanker,
  target_direction: 'left',
  congruency: 'incongruent',
  soa: -200  // Flankers appear 200ms before target
};

// Letter flankers with buttons
const letterTrial = {
  type: jsPsychFlanker,
  target_direction: 'left',
  congruency: 'incongruent',
  left_stimulus: '<span style="font-size:48px">H</span>',
  right_stimulus: '<span style="font-size:48px">S</span>',
  response_mode: 'buttons'
};
```

## Author / Citation

Josh de Leeuw
[GitHub](https://github.com/jodeleeuw)

If you use this plugin in your research, please cite:

```
Eriksen, B. A., & Eriksen, C. W. (1974). Effects of noise letters upon the
identification of a target letter in a nonsearch task. Perception & Psychophysics,
16(1), 143-149.
```
npm package: @jspsych-contrib/plugin-free-recall-response
Description: A plugin for collecting free recall responses one word at a time with mobile-friendly UI
Author: Josh de Leeuw
Latest version: 1.0.0

# plugin-free-recall-response

## Overview

A plugin for collecting free recall responses one word at a time with mobile-friendly UI

## Loading

### In browser

```html
<script src="https://unpkg.com/@jspsych-contrib/plugin-free-recall-response">
```

### Via NPM

```
npm install @jspsych-contrib/plugin-free-recall-response
```

```js
import jsPsychFreeRecallResponse from "@jspsych-contrib/plugin-free-recall-response";
```

## Compatibility

`@jspsych-contrib/plugin-free-recall-response` requires jsPsych v8.0.0 or later.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-free-recall-response/docs/plugin-free-recall-response.md)

## Author / Citation

[Josh de Leeuw](https://github.com/jodeleeuw)
npm package: @jspsych-contrib/plugin-histogram-button-response
Description: Displays a histogram of results to show the participant on a trial
Author: Courtney B. Hilton
Latest version: 1.0.0

# plugin-histogram-button-response

## Overview

The `histogram-button-response` plugin displays a histogram chart and records responses generated by a button click. The chart is displayed until a response is given. The button itself can be customized using HTML formatting.

The histogram stimulus is generated from a numeric array of data, with optional parameters for setting the number of bins to use. You can also add an annotation to the chart by setting the bin corresponding to a particular score as a different colour, with a corresponding text annotation.

This plugin uses [Chart.js](https://www.chartjs.org/) under the hood, and supports features like axis labeling, legend display, and percentage formatting on the y-axis.

---

## Loading 

Using the CDN-hosted JavaScript file:

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-histogram-button-response"></script>
```

Using NPM:

```sh
npm install @jspsych-contrib/plugin-histogram-button-response
```

```js
import jsPsychHistogramButtonResponse from "@jspsych-contrib/plugin-histogram-button-response";
```

---

## Compatibility

- jsPsych version: **v8.0.0 or later**

---

## Author / Citation

[Courtney B. Hilton](https://github.com/courtney-bryce-hilton)  
If you use this plugin in your research, please cite the corresponding repository or paper when available.
npm package: @jspsych-contrib/plugin-html-choice
Description: This plugin displays clickable html elements that can be used to present a choice.
Author: Younes Strittmatter
Latest version: 2.0.0

# html-choice plugin

## Overview

This plugin displays clickable html elements that can be used to present a choice. The choices can be presented until a response is given, a fixed time, or a fixed time after the reponse to allow for animated feedback.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-choice@2.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-html-choice
```

```js
import jsPsychPluginName from '@jspsych-contrib/plugin-html-choice';
```

## Compatibility

jsPsych v8.0. For using jsPsych v7.0, use version 1.0.0.

## Documentation

See [documentation](docs/jspsych-html-choice.md)

## Author / Citation

This plugin was created by the [Autonomous Empirical Research Group](https://musslick.github.io/AER_website) (developer: [Younes Strittmatter](https://github.com/younesStrittmatter), PI: [Sebastian Musslick](https://smusslick.com)). This research program is supported by Schmidt Science Fellows, in partnership with the Rhodes Trust, as well as the Carney BRAINSTORM program at Brown University.
npm package: @jspsych-contrib/plugin-html-keyboard-response-raf
Description: This plugin uses the same functionality as the html-keyboard-response plugin, but uses requestAnimationFrame internally for timing
Author: Josh de Leeuw
Latest version: 2.0.0

# html-keyboard-response-raf

## Overview

This plugin implements the same functionality as the html-keyboard-response plugin, but uses requestAnimationFrame internally for timing.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-keyboard-response-raf@2.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-html-keyboard-response-raf
```

```js
import jsPsychHtmlKeyboardResponseRaf from '@jspsych-contrib/plugin-html-keyboard-response-raf';
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.1 of this plugin.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-html-keyboard-response-raf/docs/html-keyboard-response-raf.md)

## Author / Citation

Josh de Leeuw
npm package: @jspsych-contrib/plugin-html-keyboard-slider
Description: Sliders which allow for keyboard responses.
Author: Max Lovell
Latest version: 2.0.0

# html-keyboard-slider

## Overview

HTML slider which allows for keyboard responses

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-keyboard-slider@2.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-html-keyboard-slider
```

```js
import jsPsychHtmlKeyboardSlider from '@jspsych-contrib/plugin-html-keyboard-slider';
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-html-keyboard-slider/docs/html-keyboard-slider.md)

## Author / Citation

Max Lovell
npm package: @jspsych-contrib/plugin-html-multi-response
Description: This plugin collects responses to an arbitrary HTML string using both button clicks and key presses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# html-multi-response

## Overview

This plugin displays HTML content and records responses generated by both button click and the keyboard. The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-multi-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.2 of this plugin.

## Documentation

See [documentation](docs/jspsych-html-multi-response.md)

## Author / Citation

Created by [Adam Richie-Halford](https://github.com/richford)

Citation:

Pending
npm package: @jspsych-contrib/plugin-html-swipe-response
Description: This plugin collects responses to an arbitrary HTML string using swipe gestures and keyboard responses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# html-swipe-response

## Overview

This plugin displays HTML content and records responses generated by swipe gestures, keyboard, and button responses. This is ideal for two-alternative forced choice assessments that will be administered on both mobile and desktop platforms. The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.

Setting the `stimulus_duration` parameter while using the swipe modality can result in a user experience issue, wherein the user must swipe a stimulus div tag that has been hidden after the stimulus duration has elapsed. To solve this, this plugin wraps the stimulus div tag in another tag with the ID `#jspsych-html-swipe-response-stimulus-container`. This div tag can then be styled so that they user has some visual representation of the stimulus even after the `#jspsych-html-swipe-response-stimulus-container` div has been hidden.

The plugin now ensures that both the container (`#jspsych-html-swipe-response-stimulus-container`) and the stimulus (`#jspsych-html-swipe-response-stimulus`) move together when dragged, providing a unified and seamless interaction.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-swipe-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.1.2 of this plugin.

## Documentation

See [documentation](docs/jspsych-html-swipe-response.md)

## Author / Citation

[Adam Richie-Halford](https://github.com/richford), [Kruttika Bhat](https://github.com/KruttikaBhat)

Citation:

Pending
npm package: @jspsych-contrib/plugin-html-vas-response
Description: This plugin collects responses to an arbitrary HTML string using a point-and-click visual analogue scale.
Author: Isaac Kinley
Latest version: 3.0.0

# html-vas-response

## Overview

This plugin collects responses to an arbitrary HTML string using a point-and-click visual analogue scale.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-html-vas-response@3.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.2.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-html-vas-response.md)

## Author / Citation

Created by [Isaac Kinley](https://github.com/kinleyid)

Citation:

Kinley, I. (2022, March 7). "A jsPsych plugin for visual analogue scales." Retrieved from https://psyarxiv.com/avj92. DOI: 10.31234/osf.io/avj92
npm package: @jspsych-contrib/plugin-image-array-keyboard-response
Description: This plugin displays an arbitrary number of images and records responses generated with the keyboard.
Author: Younes Strittmatter
Latest version: 2.0.0

# plugin-image-array-keyboard-response

## Overview

This plugin displays images and records responses generated with the keyboard. The position and size of the images can be specified. The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.


## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-image-array-keyboard-response@2.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-image-array-keyboard-response
```

```js
import jsPsychImageArrayKeyboardResponse from '@jspsych-contrib/plugin-image-array-keyboard-response';
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-image-array-keyboard-response.md)

## Author / Citation

This plugin was created by the [Autonomous Empirical Research Group](https://musslick.github.io/AER_website) (developer: [Younes Strittmatter](https://github.com/younesStrittmatter), PI: [Sebastian Musslick](https://smusslick.com)). This research program is supported by Schmidt Science Fellows, in partnership with the Rhodes Trust, as well as the Carney BRAINSTORM program at Brown University.
npm package: @jspsych-contrib/plugin-image-click-response
Description: This plugin shows an image on which the user can place points by clicking/touching the image. The location of each point is recorded as data.
Author: Christophe Bossens
Latest version: 1.0.0

# image-click-response

## Overview

This plugin shows an image on which the user can place points by clicking/touching the image. The location of each point is recorded as data.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-image-click-response@1.0.0"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-image-click-response
```

```js
import jsPsychImageClickResponse from '@jspsych-contrib/plugin-image-click-response';
```

## Compatibility

jsPsych 8.0+

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-image-click-response/docs/jspsych-image-click-response.md)

## Author / Citation

[Christophe Bossens](https://github.com/ChristopheBossens)
npm package: @jspsych-contrib/plugin-image-hotspots
Description: A plugin for displaying an image with clickable regions
Author: Josh de Leeuw
Latest version: 1.1.0

# plugin-image-hotspots

## Overview

A plugin for displaying an image with clickable regions (hotspots). This plugin allows researchers to present an image to participants and define rectangular regions that can be clicked like buttons. When a region is clicked or touched, visual feedback is provided and the trial records which region was selected along with response time and click coordinates.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-image-hotspots@1.1.0"></script>
```

### Via NPM

```
npm i @jspsych-contrib/plugin-image-hotspots
```

```js
import jsPsychImageHotspots from '@jspsych/plugin-image-hotspots';
```

## Compatibility

`plugin-image-hotspots` requires jsPsych v8.0.0 or later.

## Documentation

See [documentation](packages/plugin-image-hotspots/docs/plugin-image-hotspots.md)

## Author / Citation

Claude
npm package: @jspsych-contrib/plugin-image-multi-response
Description: This plugin collects responses to an image stimulus using both button clicks and key presses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# image-multi-response

## Overview

This plugin displays image content and records responses generated by both button click and the keyboard.The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-image-multi-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.1 of this plugin.

## Documentation

See [documentation](docs/jspsych-image-multi-response.md)

## Author / Citation

Created by [Adam Richie-Halford](https://github.com/richford)

Citation:

Pending
npm package: @jspsych-contrib/plugin-image-swipe-response
Description: This plugin collects responses to an image stimulus using swipe gestures and keyboard responses.
Author: Adam Richie-Halford
Latest version: 2.0.0

# image-swipe-response

## Overview

This plugin displays image content and records responses generated by both swipe gestures and keyboard response. This is ideal for two-alternative forced choice assessments that will be administered on both mobile and desktop platforms. The stimulus can be displayed until a response is given, or for a pre-determined amount of time. The trial can be ended automatically if the participant has failed to respond within a fixed length of time.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-image-swipe-response@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-image-swipe-response.md)

## Author / Citation

Created by [Adam Richie-Halford](https://github.com/richford)

Citation:

Pending
npm package: @jspsych-contrib/plugin-ios
Description: This plugin implements a continuous version of the Inclusion of Other in the Self (IOS) Scale ([Aron et al., 1992](https://psycnet.apa.org/doiLanding?doi=10.1037%2F0022-3514.63.4.596)).
Author: Isaac Kinley
Latest version: 2.0.1

# Inclusion of Other in the Self (IOS)

## Overview

This plugin allows for continuous responses on the Inclusion of Other in the Self (IOS) scale.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-ios@2.0.1"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.0.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-ios.md)

## Author

Created by [Isaac Kinley](https://github.com/kinleyid) and [Floris van Vugt](https://scholar.google.com/citations?user=DN2z-twAAAAJ)
npm package: @jspsych-contrib/plugin-libet-intentional-binding
Description: This plugin measures intentional binding using a Libet clock, and allows the participant to estimate the timing of events by adjusting the clock hand themselves.
Author: Isaac Kinley
Latest version: 2.0.0

# libet-intentional-binding plugin

## Overview

This plugin measures intentional binding using a Libet clock, and allows the participant to estimate the timing of events by adjusting the clock hand themselves.

## Loading

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-libet-intentional-binding@2.0.0"></script>
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 1.2.0 of this plugin.

## Documentation

See [documentation](docs/jspsych-libet-intentional-binding.md)

## Author / Citation

Created by [Isaac Kinley](https://github.com/kinleyid)

Citation:

Galang, C. M., Malik, R., Kinley, I., & Obhi, S. S. (2021). Studying sense of agency online: Can intentional binding be observed in uncontrolled online settings? *Consciousness and Cognition*, 95, 103217. doi:[10.1016/j.concog.2021.103217](https://doi.org/10.1016/j.concog.2021.103217)
npm package: @jspsych-contrib/plugin-pipe
Description: jsPsych plugin to faciliate communication with [DataPipe](https://pipe.jspsych.org)
Author: Josh de Leeuw
Latest version: 0.6.0

# pipe plugin

## Overview

This plugin facilitates communication with DataPipe (https://pipe.jspsych.org), a service that enables sending data directly to an OSF component. This plugin is under v0.x to reflect that the API of DataPipe is still under development.

The plugin enables sending data collected by the experiment to DataPipe, which is then routed to an OSF component. This allows hosting an experiment without using a backend server, such as through a free service like [GitHub Pages](https://pages.github.com/). DataPipe also allows sending base64 encoded files (such as audio or video recordings), which are decoded into their original form before being sent to the OSF component. It also supports a simple balanced condition assignment, which allows for sequential assignment to conditions without the need for a backend server.

## Loading

### In browser

```js
<script src="https://unpkg.com/@jspsych-contrib/plugin-pipe@0.4"></script>
```

### Via NPM

```
npm install @jspsych-contrib/plugin-pipe
```

```js
import jsPsychPipe from '@jspsych-contrib/plugin-pipe';
```

## Compatibility

jsPsych v8.0. For compatibility with jsPsych v7.0, use version 0.4 of this plugin.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/blob/main/packages/plugin-pipe/docs/jspsych-pipe.md)

## Author / Citation

This plugin was developed by [Josh de Leeuw](https://github.com/jodeleeuw).
npm package: @jspsych-contrib/plugin-pursuit-rotor
Description: Motor tracking task requiring continuous tracking of a moving target with mouse or touch input
Author: Josh de Leeuw
Latest version: 1.0.0

# plugin-pursuit-rotor

## Overview

Motor tracking task requiring continuous tracking of a moving target with mouse or touch input

## Loading

### In browser

```html
<script src="https://unpkg.com/@jspsych-contrib/plugin-pursuit-rotor">
```

### Via NPM

```
npm install @jspsych-contrib/plugin-pursuit-rotor
```

```js
import jsPsychPursuitRotor from "plugin-pursuit-rotor";
```

## Compatibility

`@jspsych-contrib/plugin-pursuit-rotor` requires jsPsych v8.0.0 or later.

## Documentation

See [documentation](https://github.com/jspsych/jspsych-contrib/packages/plugin-pursuit-rotor/README.md)

## Author / Citation

Josh de Leeuw