9 April 2026
- Add
parse_pasteprop, fix shortcut defaults and select-all UX#407 - Add
oncreatereject/transform,onparsed_pasteevent,selectAllDisabledTitlei18n#408 - Reject whitespace-only input in
allowUserOptionsmode#410 - Fix whitespace guards, falsy value sync, paste reporting, sortable bugs, and type safety
#411 - Block option creation during
loadOptionsdebounce window#404 - Fix tooltip background not inheriting page theme
#405
19 March 2026
- Suppress user messages during async loading
#403 - Add left/right arrow key navigation between selected items
#402 - Replace pre-commit/prek with vp staged, enable pedantic linting category
6317a47 - Enable type-aware linting and fix all 168 errors
3fd9b2c - Migrate project tooling to vite-plus and align CI/test commands
9bfac33 - Fix spurious onopen/onclose events and vite plugin HMR reload
0ad83f8 - Add theme toggle and demo overview navigation pages
351baf9 - Replace svelte-preprocess with acorn, update deps, harden test assertions
6fe18c2
8 March 2026
- Tooltip: suppress native title, auto-flip placement, sync arrow
#398 - Fix live example CSS resolution during SSR
#399 - Enrich snippet props and event callback payloads
#400
19 February 2026
- add
CopyButtondisabled/reset/callback support with demo page#397 - fix hidden dropdown scroll height and dynamic
createOptionMsgsupport#396
3 February 2026
- fix: use value field for key function to prevent case-variant crashes
#392 - Add dropdown cooldown and CSS custom properties to Nav
#393 - Add tooltip shrink-to-fit algorithm and fix reactive content updates
#394 - Simplify syntax highlighting with starry-night common bundle
#395
- @davidamacey made their first contribution in
#392
25 January 2026
- Add fallback for crypto.randomUUID to prevent crash in non-secure contexts
#386 - Add pinned dropdown feature to Nav component
#387 - Add selection history with undo/redo support
#388 - Reduce live-examples dependencies by 4 packages
#390
- @AlessioBugetti made their first contribution in
#386
18 January 2026
- Enhance tooltip attachment with new options and accessibility
#378 - Use :where() for user-overridable CSS selectors
#381 - Add heading-anchors module for SSR-compatible heading links
#382 - Add 4 new event callbacks for user feedback and analytics
#383 - Enhance Nav component with extended route configuration
#384
4 January 2026
- Add
MultiSelectonreorderevent and fireonchangeevent on drag-drop reordering#373 - fix: prevent extra binding updates on init and selection
#374 - Option grouping with collapsible headers and per-group select all
#375 resizableattachment +MultiSelectkeyboard shortcuts + more test coverage#376- ARIA 1.2 combobox pattern for VoiceOver accessibility
#377
25 December 2025
- Add prop
selectAllOption: boolean = falsetoMultiSelect#345 - Change
closeDropdownOnSelectdefault from'if-mobile'tofalse#349 - Don't open dropdown when clicking on selected options
#355 - Add
MultiSelectpropselectedFlipParamsfor customizable flip animation#358 - Prevent mouse hover during scroll from overriding
MultiSelectarrow key navigation#359 - Overload
placeholderprop to supportobject | stringwithpersistentoption#360 - fix:
resetFilterOnAddfor Enter/selectAll, addcan_remove/is_objecthelpers, prevent spuriousremoveAllevents#361 - Fix enter key deselection now preserves
searchText(matching mouse behavior)#363 - fix: prevent infinite loops with array-cloning reactive wrappers (stores, Superforms)
#365 - fix: don't render message
<li>when duplicateOptionMsg/noMatchingOptionsMsg/createOptionMsg is empty#366 - v11.4.0 + fix Svelte Playground links and npm package compatibility
#368
9 November 2025
- Allow initializing
selectedfromvalueprop#338 - Fix generic type inference in
MultiSelect#340 - Better
Nav.sveltewith dropdown menus and a burger button for mobile views#341
4 October 2025
- Add prop
fuzzy: boolean = truetoMultiSelectandCmdPalettefor fuzzy option filtering (#334) by @janosh - fix broken mobile touch selection with portal enabled (#336) by @janosh
- immediately hide tooltip on scroll + icon fixes in MultiSelect + type fixes in CmdPalette and PrevNext by @janosh
13 August 2025
- Items can no longer be removed via backspace when that would violate minSelect
#328 - Add
/eventsdemo page#329 - Add MultiSelect prop
keepSelectedInDropdown: false | 'plain' | 'checkboxes'#331 - Add /attachments demo page + add arrow to tooltip
#332
12 July 2025
- Add Svelte attachments:
draggable,sortable,tooltip,highlight_matches,click_outside#325
Full Changelog: https://github.com/janosh/svelte-multiselect/compare/v11.2.1...v11.2.2
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
11 July 2025
- Drop accidental
highlight.jsdependency#324
Full Changelog: https://github.com/janosh/svelte-multiselect/compare/v11.2.0...v11.2.1
11 July 2025
- Better getting started docs
#312 removeAllevent timing: clearselectedbefore events fire#313- Open dropdown on programmatic focus and close it on blur
#314 - Fix
<input>adding unwanted width when options selected#315 - MultiSelect fire
oncreateevent for all user-created options#316 - Add new value
'retain-focus'for propcloseDropdownOnSelect#318 - Swap
nodefordeno#319 - migrate useful Svelte components:
CodeExample,CopyButton,FileDetails,GitHubCorner,Icon,PrevNext,RadioButtons,Toggle#323
Full Changelog: https://github.com/janosh/svelte-multiselect/compare/v11.1.1...v11.2.0
20 May 2025
- more playwright tests for active+inactive portal
66ebd8d - pnpm remove svelte-multiselect
bc6ee6c - replace
browserfrom @app/env import withtypeof windowcheck in portal() action to support non-sveltekit apps2a8f116 - remove unused link-check-config.json
c4f26ef
17 May 2025
15 May 2025
- Prevent empty style attributes on
ul.selected > liandul.options > li#304 - Breaking: Svelte 5
#295 - update and fix linting, fix 2 dead readme links
91f22d0
24 October 2024
- update
MultiSelect.sveltefor Svelte5 compatibility#293
8 April 2024
MultiSelectfix form validation not resetting whenrequiredprop changes#286- Update readme.md
#283 - Housekeeping
#282 - Improve docs around Events
#280 - Add props
style,inputStyle,liOptionStyle,liSelectedStyle,ulSelectedStyle,ulOptionsStyle#279 - Add props
liUserMsgClassandliUserMsgActiveClass#274 - link check treat 403 http status as alive, update deps
1b04c15
21 September 2023
- Breaking: rename
focusInputOnSelecttocloseDropdownOnSelect#267 - Fix empty
event.detail.optionspayload onremoveAll#266 - update deps
58cee43
18 July 2023
- Always show
createOptionMsgifallowUserOptionsis truthy and user entered text#254 - Add key
styletoObjectOptionfor per-option inline CSS#252 - Make
selectedandvalueeach reactive to each other#250 - [pre-commit.ci] pre-commit autoupdate
#246
1 July 2023
- v10.0.0
#245 - Add Multiselect prop
maxOptions: number#243 - Add
<slot name="user-msg">#240 - Rename prop
duplicateFunc()tokey()#238 - declare types
#236 - add <slot name="after-input">
0fe8e8d - add sentence on inputmode='none' use case for hiding on-screen keyboards to readme
466f0a1
1 June 2023
- Revert "Fix Svelte 3.57 a11y (#215)"
#232 - Add default slot
#231 - CmdPalette add prop close_keys
099e1ac - add copy buttons to all code fences
950dcf6
15 May 2023
- Remove circular import between
MultiSelectandindex.ts#230 - Automatically add "bug" label to bug report issues
#229 - Allow
createOptionMsg=nullto suppress console error whenallowUserOptionsthruthy#227 - Fix MultiSelect unable to deselect object options
#226 - Update pnpm instructions
#224
30 April 2023
- Fix
svelte-checkerrors#223 - fix: hide dropdown when custom messages are empty
#220 - DRY workflows
#218 - fix: allow object options to share the same label
#217 - delete wait_for_animation_end() and fix tests to use playwright auto-waiting correctly
2493029 - don't highlight noMatchingOptionsMsg <span> in sms-search-matches
a1feca7
19 March 2023
- Fix Svelte 3.57 a11y
#215 - Add prop
highlightMatchestoMultiSelect#212 - fix: add missing role attr for <li>
#211 - update deps, set TS moduleResolution=bundler
a12835e
9 March 2023
- Fix Lighthouse a11y issues
#210 - clear selected and searchText first, then trigger removeAll and change events in remove_all()
#208 - add props style, span_style, open, dialog, input, placeholder to CmdPalette + pipe through all other props to MultiSelect
97e6815 - fix /css-classes example not applying styles from external classes
aa1e28e
1 March 2023
- Make first matching option active automatically on entering searchText
#206 - add src/lib/NavPalette.svelte invoked with cmd+k for keyboard-only site navigation
e3f4ea9 - rename NavPalette to CmdPalette and make it execute generic actions on item select
b27cd80 - update to svelte-package v2
8d3df3e - fix selected options having cursor: grab (to indicate drag and drop support to change order) even if only single option selected
3309e1e
25 January 2023
- Don't error on removing options that are in
selectedbut not inoptionsarray#204 - Add class 'remove' to buttons that remove selected options
#202 - Add prop allowEmpty: boolean = false
#198 - Support
immutableSvelte compiler option#197 - group demo routes
e813e48 - breaking: rename addOptionMsg to createOptionMsg
f24e025
8 January 2023
- Coverage badges
#190 - feat: add type inference for the
optionsprop#189 - feat: add type inference for the
optionsprop (#189)#78 - merge ExampleCode.svelte with CollapsibleCode.svelte
56ff99b - pnpm add -D svelte-zoo to outsource some site components and icons
f2a387c - restore reactive searchText block in loading example
846da66 - fix bunch of TS errors, add playwright test for dragging selected options to reorder
a483217 - add update-coverage package.json script
1094f08 - add vite alias $root to clean up package.json, readme|contributing|changelog.md imports
c19cbe4 - mv src/components src/site
3683ed7
28 December 2022
- add 'Open in StackBlitz' links to example code fences
ac07557
18 December 2022
- Issue console warning if
sortSelected && selectedOptionsDraggable#187 - Add new slot named 'expand-icon'
#186
10 December 2022
- Fix
allowUserOptionspreventing dropdown list navigation with up/down arrow keys#184 - Mdsvexamples
#182 - Add changelog & contributing pages to site
#181 - tweak contributing.md and css-classes example
6f78033 - fix build error
b896d36 - fix readme badge for gh-pages.yml status
906b560
30 November 2022
- Add
changelog.md#180 - Draggable selected options
#178 - Set
<base href="/svelte-multiselect" />if !dev && !prerendering#172 - Publish docs to GitHub pages
#170 - Contributing docs plus issue and PR templates with StackBlitz repro starter
#169 - add missing about field to bug-report issue template (closes #171)
#171 - fix prop form_input: set default value null to make it optional
b150fe0
18 November 2022
- Add minSelect prop
#166 - Add
pnpm testto readme#168 - Add class for maxSelectMsg
#167 - Allow
required=1 | 2 | ...to set minimum number of selected options for form submission#161 - Add minSelect prop (#166)
#163#163#163 - mv /max-select example to /min-max-select
9838db8
15 November 2022
15 November 2022
- Test uncovered lines
#157 - Don't
console.errorabout missingoptionsifloading=true#156 - Measure
vitestcoverage withc8#155 - increase --sms-min-height 19->22pt
5d0e081
7 November 2022
- Pass JSON.stringified selected options to form submission handlers
#152 - Link check CI and readme housekeeping
#149 - REPL links for landing page examples
#148 - Add Collapsible code blocks to usage examples
#143 - REPL links for landing page examples (#148)
#144#145#146#147
30 October 2022
- Revert SCSS preprocessing
#141 - Add unit tests for 2-/1-way binding of
activeIndexandactiveOption#139
22 October 2022
- Add new prop
value#138 - New prop resetFilterOnAdd
#137 yarntopnpm#134- Rename prop
noOptionsMsg->noMatchingOptionsMsg#133 - remove props selectedLabels and selectedValues
ef6598e
13 October 2022
- Allow preventing duplicate options when allowUserOptions is thruthy
#132
8 October 2022
- Fix TypeError: Cannot read properties of null (reading 'get_label') - take 2
#131 - Fix selecting options with falsy labels (like 0)
#130
6 October 2022
- Fix single select with arrow and enter keys
#128 - Add SCSS preprocessing
#126 - [pre-commit.ci] pre-commit autoupdate
#124 - more unit tests
1adbc99 - test required but empty MultiSelect fails form validity check (i.e. causes unsubmittable form) and filled one passes it
fd8b377
3 October 2022
- Make selected a single value (not a length-1 array) if maxSelect=1
#123 - Fix TypeError: Cannot read properties of null (reading 'get_label') at MultiSelect.svelte:75
#122 - add stopPropagation to keydown handler (closes #114)
#114
30 September 2022
- Forward input DOM events
#120 - Props to manipulating inputmode and pattern attributes
#116 - docs: remove
userInputAsprop reference#115 - Fix top option not selectable with enter key
#113
20 September 2022
- Fix using arrow keys to control active option in dropdown list
#111 - eslintrc set @typescript-eslint/no-inferrable-types: off
c688773
17 September 2022
- Test readme docs on CSS variables
#109 - Fix selected array not being initialized to options with preselected=true
#108
13 September 2022
- Better props docs and test
#105 - fix breaking change sveltekit:prefetch renamed to data-sveltekit-prefetch
65ddbb9 - fix .svx demo routes
fde53f1 - revert from adapter-netlify to adapter-static
224144d
3 September 2022
2 August 2022
- Fix 'Cannot find module
scroll-into-view-if-needed'#99
2 August 2022
- Add
scroll-into-view-if-neededponyfill#97
17 July 2022
- Convert E2E tests from
vitestto@playwright/test#95 - Allow empty Multiselect
#94 - Add new slot
'remove-icon'#93 - [pre-commit.ci] pre-commit autoupdate
#92
1 July 2022
- Reset
activeOptiontonullif not inmatchingOptions#90
27 June 2022
- Replace
li.scrollIntoViewIfNeeded()withli.scrollIntoView()#88 - Add new prop
parseLabelsAsHtml#84 - try fix flaky test 'multiselect > can select and remove many options'
2b0c453 - bump netlify node to v18, update readme + deps
586c724 - remove plausible.js analytics
cd4c9f6
23 April 2022
- Strongly typed custom events
#79
21 April 2022
- v5 release
#76 - Work with string options as is, don't convert to objects internally
#75 - v5 release (#76)
#57
7 April 2022
- Fix backspace deleting multiple selected options if identical labels
#72 - Several fixes for
allowUserOptions#69 - [pre-commit.ci] pre-commit autoupdate
#70
2 April 2022
- Fix MultiSelect
localStoragebinding#66
30 March 2022
- Move examples to new
src/routes/demosdir#63 - make ToC position fixed (closes #64)
#64 - check for undefined (not falsy) value in rawOp processing (fixes #65)
#65 - LanguageSnippet change SVG icons src repo to vscode-icons for more coverage
92390e9 - more preselected slots in Examples.svelte
cd0a01a
23 March 2022
- Add
aria-labelto hidden.form-controlinput#62 - Add
aria-labelto hidden.form-controlinput (#62)#58#35 - fix dropdown closing when clicking between list items (closes #61)
#61 - svelte.config.js add kit.prerender.default: true, mv src/{global,app}.d.ts
4a84913
13 March 2022
- Improve a11y
#60 - Convert tests to Playwright
#59 - Convert tests to Playwright (#59)
#58 - add and document prop invalid (closes #47)
#47 - set width (not height) on svg icons and as px (not em) so they don't shrink with fluid typography on mobile screens
ba77f93
5 March 2022
- Rename readonly to disabled
#55 - CSS and UX tweaks
#52 - Readme document test runner config to avoid transpiling errors in downstream testing
#54 - More tests
#51 - Add
vitest#50 - Rename readonly to disabled (#55)
#45 - close options dropdown list on input blur (fixes #53)
#53 - CSS and UX tweaks (#52)
#44#44#44 - Readme document test runner config to avoid transpiling errors in downstream testing (#54)
#48
21 February 2022
- Implement
allowUserOptions,autoScrollandloading(closes #39)#41 - define DispatchEvents type used to annotate createEventDispatcher()
#32 - add prop required to prevent form submission if no options selected (closes #42)
#42 - Implement
allowUserOptions,autoScrollandloading(closes #39) (#41)#39#39
20 February 2022
- by default, only show maxSelectMsg if maxSelect != null and > 1 (closes #37)
#37 - add CSS var --sms-options-shadow defaults to subtle black shadow around dropdown list (0 0 14pt -8pt black) (closes #36)
#36 - add prop liActiveOptionClass = '' (closes #35)
#35 - turn searchText = and showOptions = false into bindable props (closes #33)
#33 - document missing noOptionsMsg prop (closes #34)
#34 - ensure custom class names (outerDivClass, ulOptionsClass) come last (closes #38)
#38 - fix ToC scroll to heading (closes #31)
#31 - only show remove all btn when maxSelect !== 1 (for #37)
64cfd8a
19 February 2022
- Fixes for focus on click and wiggle on hitting maxSelect
#30
16 February 2022
- Expose filter method
#29 - readme improve docs on css variables and granular control through :global() selectors (closes #27)
#27
7 February 2022
- mv input outside ul.selected for better HTML semantics (closes #26)
#26
3 February 2022
- apply id prop to <input> instead of outer div (closes #25)
#25 - add eslint commit hook + update deps
6ad44b8 - v.3.2.0
71ff2d1 - add readme badge to document minimum svelte version (for #24)
7d9fe5a
25 January 2022
- wiggle the maxSelect msg on hitting selection limit (closes #19)
#19 - readme better docs for CSS variables, rename slots {options,selected}Renderer -> render{options,selected}
c8ab724
22 January 2022
- add selectedRenderer + optionRenderer named slots (closes #21)
#21 - docs site use unmodified readme with slot to insert examples, yarn add svelte-github-corner
1072691 - readme add note on type exports for TS users, add error page that redirects to index
dde76c8
7 January 2022
- favorite web framework show Confetti.svelte on:add Svelte
8d109ee - bump svelte@3.45.0 to silence warning: MultiSelect has unused export property 'defaultDisabledTitle' (sveltejs/svelte#6964)
f80a7a6 - update readme + svelte-toc@0.2.0
40013ba - [pre-commit.ci] pre-commit autoupdate
0d05864 - iOS Safari prevent zoom into page on focus MultiSelect input
44f17be
29 December 2021
- ensure active option is scrolled into view if needed (closes #15), breaking change: renames tokens to options
#15
24 December 2021
- Convert options from simple strings to objects
#16 - Add local to transition:fly
#14 - add onClickOutside action, used to replace input.on:blur() for hiding options (closes #18)
#18 - update deps
fb90f93 - more keyboard friendliness by showing remove button focus and triggering on space bar or enter key
b87d22b - add plausible
0557c0f
27 October 2021
- set <input> width back to 1pt as it's only needed to tab into, focus and blur <MultiSelect> (closes #12)
#12 - update readme
45c7993
21 October 2021
- make internal CSS easily overridable (sveltejs/svelte#6859)
d15a445
12 October 2021
- add src/lib/index.ts for package path export '.' (closes #11)
#11
12 October 2021
- add src/lib/index.ts for package path export '.' (closes #11)
#11
11 October 2021
- Add new prop disabledOptions
#9 - add pre-commit hooks
dfb6399 - [pre-commit.ci] pre-commit autoupdate
b69425d
3 September 2021
- fix removeAll button not dispatching remove and change events (closes #7)
#7 - remove @tsconfig/svelte, update deps
9b2c231 - add type=(add|remove) detail to 'change' event dispatch
8290458
12 August 2021
- add on:change event and document events in readme (closes #5)
#5
12 July 2021
- convert to typescript
bd391c5 - update to @sveltejs/kit@1.0.0-next.124+ to use svelte field in package.json
2367e38
7 July 2021
- turn hard-coded remove button titles into props
c35162b - guard against selected being nullish, keep ul.options in the DOM even if showoptions is false to allow selecting in dev tools for styling
b9bd576
5 July 2021
- add css classes as props for use with tailwind (closes #3)
#3
23 June 2021
- fix: don't remove tags if search string is non-empty, open options on clicking selected tags (#2)
5ffed50 - update svelte-toc to fix deploy
d5279dd
22 June 2021
- convert to svelte-kit package
9db3cfb
21 June 2021
- fix setting initial value for selected, fix setting class 'selected' in single mode
16d11de
20 June 2021
- replace prop single with maxSelect to specify any number of selectable options, add class single to div.multiselect if maxSelect===1 (#2)
36e916f - add linked headings
2eedf9a
28 May 2021
- add css var props
f591814
25 May 2021
- add GitHubCorner.svelte for link to repo
e80a402 - remove selected tokens with backspace
c5d7495 - add readme badges
992eaa4 - demo site fix stripping start of readme for docs
107273d - add svelte-toc table of contents to demo site
36aa1c5
9 May 2021
- import readme on demo site instead of duplication
c0e4924 - remove unused example.svx
2138caa - rename package dir, improve readme
0150378
8 May 2021
- remove hidden input for storing currently selected as JSON
802a219
7 May 2021
- initial commit
14dd38a