Most core plugins do not use jQuery. Dropdowns, overlays, tooltips, popovers, tabs, and similar components use plain JavaScript. Positioning behavior uses @floating-ui/dom.
Four plugins do reach for an optional third-party dependency, and each checks for it as a global at the moment preline/non-auto itself is evaluated, not lazily inside autoInit(). Datatable needs window.jQuery (from datatables.net's own dependency on jQuery) and window.DataTable (the constructor itself, referenced as a bare global inside Preline UI's own plugin code, not through an import). Datepicker needs window.VanillaCalendarPro and, less obviously, window._ (lodash) for a _.mergeWith() call buried in its options-merging logic, not visible from its public API. File Upload needs window.Dropzone and reuses the same window._ lodash requirement. Range Slider needs only window.noUiSlider, with no second dependency, because unlike the other three, Preline UI's own source imports nouislider's types only (import type, erased at compile time, nothing bundled), so the plugin genuinely has no bundled fallback and no lodash-equivalent second requirement either. If any of these globals is missing at that exact moment, its plugin is disabled for the rest of the page's JS session, and installing the library afterward and calling autoInit() again does not recover it.
Set these globals in a dedicated module that you import before preline/non-auto, not inline in the same file, even textually above the preline/non-auto import. ES modules fully evaluate each sibling import, including that sibling's own top-level code and not just its own imports, before the importing module's own statements run. So writing this directly in app.js does not work, even though the assignment reads "before" the Preline import:
import * as VanillaCalendarPro from 'vanilla-calendar-pro';
window.VanillaCalendarPro = VanillaCalendarPro; // too late
import { HSStaticMethods } from 'preline/non-auto';
Both imported modules (vanilla-calendar-pro, then preline/non-auto) fully evaluate first, in that order. Preline UI's dependency gate resolves while evaluating, before app.js's own window.VanillaCalendarPro = ... line ever runs. This is straightforward to confirm once you know to look: the collection Preline UI creates for the plugin (window.$hsDatepickerCollection, for Datepicker) exists but stays empty, and a manual HSStaticMethods.autoInit() call afterward doesn't populate it either, since the gate already resolved false, permanently, for this page load. Put the assignment in its own module instead, and import that module first:
import _ from 'lodash';
import * as VanillaCalendarPro from 'vanilla-calendar-pro';
import jQuery from 'jquery';
import DataTable from 'datatables.net';
import noUiSlider from 'nouislider';
import Dropzone from 'dropzone';
window._ = _;
window.VanillaCalendarPro = VanillaCalendarPro;
window.jQuery = window.$ = jQuery;
window.DataTable = DataTable;
window.noUiSlider = noUiSlider;
window.Dropzone = Dropzone;
// Must be imported before preline/non-auto
import './vendor-globals';
import { HSStaticMethods } from 'preline/non-auto';
Only include the imports for the plugins your pages actually use. vendor-globals.js's position relative to preline/non-auto is what matters; the order of the assignments inside it does not, since the whole module finishes evaluating before preline/non-auto does either way.
Range Slider's Tailwind CSS classes are fully custom through the cssClasses option, so you do not need to bring in noUiSlider's own CSS just to make Preline UI styling work. Datepicker's calendar popup styling is separate from variants.css; import the public preline/datepicker-styles-utility.css export when you use it.