Highlights
* Routine settings: Routines now have parameters of their own, giving control over their max duration, skipping the Routine altogether, or changing the way the window looks just for that Routine.
* Sort by priority: Columns in the data file can now be given a "priority" value, with the option to sort by priority instead of chronologically.
* Whisper transcription PLUGIN for Microphone: Using the OpenAI backend, Microphone transcriptions can be done quicker and more accurately, and include timing info for each word.
* Progress bar component: A visual component to show progress along an axis.
* Builder search dialog: Search for values across your whole experiment, then jump to the specific Routine/Component where it's present. Makes debugging much easier.
* Most stimuli now support a `draggable` attribute. If set to `draggable=True` then that stimulus should check/update position on each frame using `stim.doDragging()`
Behaviour changes
* Eyetrackers (Tobii, SRR Eyelink, Gazepoint, PupilLabs) are now plugins rather than built-in, in keeping with the drive to cut down the dependencies of core PsychoPy
New features and enhancements
* PsychoJS: Mobile-friendly viewport settings. by lightest in https://github.com/psychopy/psychopy/pull/5380
* Allow experiment to run with different clocks (e.g. wall clock time instead of starting at t=0) by TEParsons in https://github.com/psychopy/psychopy/pull/5621
* PsychoJS ShapeStim from Builder now supports custom vertices by TEParsons in https://github.com/psychopy/psychopy/pull/5522
* Numerous improvements to plugins system and dialog
* Added `abortCurrentTrial` (Python only for now) method to `TrialHandler2` and `MultiStairHandler` by mdcutone in https://github.com/psychopy/psychopy/pull/5423
* Better performance and fixes to FFPyPlayer movie engine
* Added `letterSpacing` attribute to Textbox by TEParsons in https://github.com/psychopy/psychopy/pull/5487
* New `Session` class to run multiple experiments - create your stimulus window once and run multiple experiments in it, with the ability to pause/resume/stop the experiment. (Python only for now) Session can be controlled over `websockets` using the Liaison server
* Full support for Python 3.10, wxPython 4.2, and PyQt6
* Preserve tab order for Routines when saving/loading an experiment by TEParsons in https://github.com/psychopy/psychopy/pull/5517
* Added audio settings to Camera component by mdcutone in https://github.com/psychopy/psychopy/pull/5681
* Improved streaming of camera to disk by mdcutone in https://github.com/psychopy/psychopy/pull/5551
* Window now explains it is performing timing test by mdcutone in https://github.com/psychopy/psychopy/pull/5511
* Keyboard Components from Builder will store duration if available (if release has already occurred) by TEParsons in https://github.com/psychopy/psychopy/pull/5569
* Show status text for objects in Flow panel by TEParsons in https://github.com/psychopy/psychopy/pull/5443
* Make psychopy.Window title (and icon in pyglet) settable by TEParsons in https://github.com/psychopy/psychopy/pull/5540
* UI enhancements to Coder and Runner by TEParsons in https://github.com/psychopy/psychopy/pull/5539
* Multihead support for X11/Linux by mdcutone in https://github.com/psychopy/psychopy/pull/5520
* Plugins Dialog now checks for version compatibility with PsychoPy by TEParsons in https://github.com/psychopy/psychopy/pull/5649
* Install plugins to subdirectories by mdcutone in https://github.com/psychopy/psychopy/pull/5398
* Make Save & Edit/View buttons on README window more explicit by TEParsons in https://github.com/psychopy/psychopy/pull/5523
* New option to abbreviate long component names in Preferences, fixes 5574 by TEParsons in https://github.com/psychopy/psychopy/pull/5586
* Highlight selected Routine in Flow panel by TEParsons in https://github.com/psychopy/psychopy/pull/5588
* Better Builder visualisation very large experiments by TEParsons in https://github.com/psychopy/psychopy/pull/5618
* Lock Flow panel buttons to the left when scrolling by TEParsons in https://github.com/psychopy/psychopy/pull/5620
* ExperimentHandler.addData() now has optional `row` argument to specify previous entry by TEParsons in https://github.com/psychopy/psychopy/pull/5652
* Fixed useVersion warning untracked working tree files would be overwritten by peircej in https://github.com/psychopy/psychopy/pull/5670
* Add param to control whether movies/sounds end when the Routine does, by TEParsons in https://github.com/psychopy/psychopy/pull/5415
* Add "transparent" as named color by TEParsons in https://github.com/psychopy/psychopy/pull/5689
* Radio button styling was not work in Slider component in 2023.1, fixes 5661 (dev) by TEParsons in https://github.com/psychopy/psychopy/pull/5691
* Allow expInfo fields to be marked as required (*) by ainazay in https://github.com/psychopy/psychopy/pull/5543
* Fix VlcMovieStim by marcpabst in https://github.com/psychopy/psychopy/pull/5702
* Added data file separator to expInfo by EitanHemed in https://github.com/psychopy/psychopy/pull/5607
* Minor Textbox bugfixes by ollie-d in https://github.com/psychopy/psychopy/pull/5723
* Extended autotranslate functions supported by py2js by roelofsaj in https://github.com/psychopy/psychopy/pull/5713
* Submitting GitHub issues now supports templates by shun2wang in https://github.com/psychopy/psychopy/pull/5732
* Numerous Documentation improvements by fboers kimDundas patrickabolger EitanHemed larsoner pmolfese
Bug fixes
* Fixed missing comma in Brush component code by TEParsons in https://github.com/psychopy/psychopy/pull/5564
* Mouse position incorrect when desktop scaling not 100% on Windows by mdcutone in https://github.com/psychopy/psychopy/pull/5758
* Fixed `AttributeError: 'SoundPTB' object has no attribute 'isFinished'` by mdcutone in https://github.com/psychopy/psychopy/pull/5541
* Better handling of missing audio libraries - allow the app to load always and fallback to PsychToolBox if possible
* Better handling of Mouse.getPos() when no windows open by peircej in https://github.com/psychopy/psychopy/pull/5763
* Param updates code for Sound in JS was using Python syntax by TEParsons in https://github.com/psychopy/psychopy/pull/5762
* More informative error when useVersion fails to write script by TEParsons in https://github.com/psychopy/psychopy/pull/5761
* saveAsWideText was using deprecated DataFrame.append function by TEParsons in https://github.com/psychopy/psychopy/pull/5507
* Polygon/ROI vertices caused error if trying to set each frame by TEParsons in https://github.com/psychopy/psychopy/pull/5686
* Don't crash if user attempts to initialise ioHub more than once by TEParsons in https://github.com/psychopy/psychopy/pull/5533
* Added log file entry for Keyboard.clearEvents() by peircej in https://github.com/psychopy/psychopy/pull/5558
* Fixed missing movie file in MoviePause.py demo by EitanHemed in https://github.com/psychopy/psychopy/pull/5583
* Coder source tree thought any variable name beginning with `def` was a function def by TEParsons in https://github.com/psychopy/psychopy/pull/5581
* README filename wasn't being updated for new frames by TEParsons in https://github.com/psychopy/psychopy/pull/5593
* Fix Markdown parsing on README files by TEParsons in https://github.com/psychopy/psychopy/pull/5572
* Ignore Escape in Keyboard component if needed to end experiment by TEParsons in https://github.com/psychopy/psychopy/pull/5598
* Joystick component - SyntaxError in generated code by EitanHemed in https://github.com/psychopy/psychopy/pull/5601
* Error `got an unexpected keyword argument "reset"` when trying to pause using PTB sounds by peircej in https://github.com/psychopy/psychopy/pull/5619
* PsychoPJS: Fix issue with first frame of image being shown as default.png in JS by TEParsons in https://github.com/psychopy/psychopy/pull/5716
* Add `self` to list of disallowed Component names by TEParsons in https://github.com/psychopy/psychopy/pull/5742
* Split compound Survey answers into individual columns by TEParsons in https://github.com/psychopy/psychopy/pull/5734
* Fixed audio file not resetting during (Python) experiment by mdcutone in https://github.com/psychopy/psychopy/pull/5712
* If trying to load previously open file that is corrupted, do at least open the app (with an empty window) by TEParsons in https://github.com/psychopy/psychopy/pull/5696
* Better catching of name errors in conditions file by TEParsons in https://github.com/psychopy/psychopy/pull/5654
New Contributors
* ranibaron made their first contribution in https://github.com/psychopy/psychopy/pull/5394
* patrickabolger made their first contribution in https://github.com/psychopy/psychopy/pull/5414
* fboers made their first contribution in https://github.com/psychopy/psychopy/pull/5482
* gtosh4 made their first contribution in https://github.com/psychopy/psychopy/pull/5609
* ainazay made their first contribution in https://github.com/psychopy/psychopy/pull/5543
* marcpabst made their first contribution in https://github.com/psychopy/psychopy/pull/5702
**Full Changelog**: https://github.com/psychopy/psychopy/compare/2023.1.2...2023.2.0rc7