PEBL 2.2 Release Notes

Released November 2025

PEBL 2.2 represents a major milestone with WebAssembly support, enhanced internationalization, modern audio capabilities, and comprehensive improvements across the entire platform.

WebAssembly/Emscripten Build Improvements

  • Full Emscripten/WebAssembly support with Asyncify for proper async/await handling
  • IDBFS persistent storage for web-based experiments with data retention
  • Token-based authentication system for secure data uploads from web experiments
  • Fixed event loop timer handling to match native behavior
  • Fixed memory leak causing visual objects to persist across experiments
  • Fixed break statement propagation in if/else control flow
  • Fixed lexer to handle PEBL files without trailing newlines
  • Fixed JPEG image loading in web builds
  • Fixed UTF-8/Unicode text rendering in web builds
  • Web launcher with fullscreen support and zoom-independent canvas sizing
  • Comprehensive upload-battery directory with web-enabled test battery tasks
  • JavaScript Fetch API integration for file uploads
  • Participant-specific directory structure for organized data collection
  • Enhanced error reporting with full call stack traces

Audio Input and Voice Key Capabilities

  • SDL2-based audio input system with reference-counted memory management
  • New audio input functions: RecordToBuffer(), StartAudioMonitor(), StopAudioMonitor(), GetAudioStats()
  • Experimental ROC-based voice key calibration system
  • Fixed WAV file format generation for audio recordings
  • Real-time audio monitoring with ring buffer support
  • Voice key response time collection with energy/power/RMSSD statistics

Internationalization and Text Rendering

  • Comprehensive RTL (right-to-left) text support for Arabic and Hebrew
  • Unicode script detection with ISO 15924 codes
  • New text/locale functions: DetectTextScript(), IsRTL(), GetFontForText(), GetSystemLocale(), IsSystemLocaleRTL()
  • Automatic font selection based on detected text script
  • Unified GetTranslations() function replacing GetStrings(), with system locale fallback
  • All battery tasks migrated to JSON translation format
  • 20+ new task translations added across multiple languages

Font System Modernization

  • Replaced Bitstream Vera, FreeSans, and SIL fonts with DejaVu 2.37 series
  • Added Noto fonts for comprehensive international character coverage
  • gPEBLBaseFont, gPEBLBaseFontMono, gPEBLBaseFontSerif now use DejaVu by default
  • Automatic fallback to Noto fonts for scripts not covered by DejaVu
  • Removed deprecated Korean (UnBatang) and Chinese (ukai) fonts in favor of Noto

Compiler and Build System Improvements

  • Fixed buffer overflow warning in lexer (Pebl.l) with larger buffer and snprintf
  • Fixed dangling pointer warning in Variant.cpp string assignment
  • Updated deprecated Emscripten canvas API to new emscripten_get_canvas_element_size()
  • Replaced deprecated ostrstream with ostringstream in PEBLMath.cpp
  • Fixed extern variable initializer warnings by converting to proper definitions
  • Updated utfcpp library to version 4.0.8, eliminating deprecation warnings
  • Updated parser/lexer generation to Bison 3.8.2 and current Flex
  • Enabled HTTP support by default in Makefile (requires libcurl)
  • All major compiler warnings eliminated for modern C++ compilers
  • Comprehensive Windows build support via MSYS2/MinGW with detailed guide
  • Refactored preprocessor macros to separate platform from evaluator concerns
  • Separate object directories (obj-native, obj-emscripten) for cleaner parallel builds
  • AppImage build support for portable Linux distribution

Launcher Improvements

  • Fixed Linux launcher functionality: removed Windows-only freopen("CON") calls
  • Launcher now runs automatically when pebl2 invoked with no arguments
  • Fixed launcher to use GetPEBLVersion() instead of hardcoded version string
  • Improved config file persistence and handling
  • Enhanced AppImage launcher compatibility

Documentation

  • Complete Sphinx-based reference documentation system
  • Added 9 new built-in functions to official documentation
  • All historical PEBL manuals (0.09-2.2) now tracked in git
  • Comprehensive Windows compilation guide
  • Updated and reorganized documentation structure
  • LaTeX/PDF manual generation from Sphinx RST sources
  • C++ API documentation via Doxygen

Network and Data Management

  • Stub implementations for network functions when USE_NETWORK disabled
  • Minimal single-admin PEBL data server for experiment data collection
  • Enhanced file upload capabilities with UploadFile() and SyncDataFile()
  • New filesystem functions: DirToText(), AppendDirList(), Dirlisttotext()
  • Token-based authentication for secure remote data uploads

Battery Tasks and Translations

  • All battery parameter schemas converted from .schema to .json format
  • 20+ new translations across multiple battery tasks
  • Updated KSS (Karolinska Sleepiness Scale) in tiredness/fatigue measures
  • Added TLX (NASA Task Load Index) to scales/
  • Added Berlin Numeracy Test (BNT) and SUS (System Usability Scale) to scales/
  • Fixed SNARC task translation lookup
  • Updated physioscales to fix data save bug
  • Updated Manikin task with improved stimulus images
  • Added Center() function to Reitan points in ptrails to center the points
  • Updated SRT to allow mouse input as alternative to keyboard
  • Fixed gonogo to work with custom stimuli and show stimuli in instructions
  • Fixed survey task crash with missing Likert options
  • Minor scoring fixes to WFT and probedigit tasks
  • Added options for random/fixed interval generation in time wall (made this the default)

New Test Battery Tasks

  • Maze task prototype added
  • Eyechart basic discriminability test (demo, not normed)

New Functions

  • WaitForButtonClickOnTarget() - Wait for click on specific widget
  • WaitForDownClick() - Wait for mouse button press
  • GetNewSubnum() - Generate new participant ID
  • RecordToBuffer() - Record audio to pre-allocated buffer
  • StartAudioMonitor() - Create ring buffer for real-time audio monitoring
  • StopAudioMonitor() - Release audio hardware
  • GetAudioStats() - Return [energy, power, rmssd] statistics from audio buffer
  • DetectTextScript() - Detect Unicode script (returns ISO 15924 codes)
  • IsRTL() - Check if text or script code is right-to-left
  • GetFontForText() - Auto-select appropriate font for text based on script
  • GetSystemLocale() - Get operating system locale setting
  • IsSystemLocaleRTL() - Check if system locale uses RTL text

Other Improvements

  • WritePNG() screenshot capabilities restored
  • Fixed JSON parser errors on nested lists and complex structures
  • HTML formatting library for structured output
  • Improved scrolling textbox UI for non-standard font sizes
  • Added --upload command-line argument for automatic data sync
  • Multiple windows capability improvements
  • Filepicker.pbl demo showcasing multiple windows and file selection
  • Fixed bad font-height for font-size 12 impacting scrollboxes (hardcoded fix on Linux)
  • Fixed errant header line in torontonounpool.txt

Community Translations

Special thanks to the following contributors for new translations:

  • Dutch translation to digit span from Ruth Van Hecke
  • Portuguese translation of hungry donkey task by Ana Rita Cruz
  • French translation of BST from Ilse Coolen

Download PEBL 2.2

Ready to try the latest version?

Visit Download Page