openpls.app · engine: github.com/jojacobsen/openpls-engine
What it is
OpenPLS is a web app for Partial Least Squares Structural Equation Modeling (PLS-SEM), a method widely used in business research, marketing, and the social sciences. It centers on a visual path-diagram editor with live recomputation, backed by an open compute engine that researchers can audit and self-host.
Two pieces
OpenPLS ships as a hosted web app plus a standalone open-source engine that anyone can install from PyPI or run on their own infrastructure.
openpls-engine is the compute core, a Python library for PLS-SEM. It is a maintained fork of plspm-python that keeps the original algorithm intact and adds the metrics modern PLS-SEM reporting needs: HTMT, SRMR, d_ULS, adjusted R², BIC, Stone-Geisser Q², Cronbach α, Dijkstra-Henseler ρ, multi-group analysis, and a streaming long bootstrap with BCa intervals. It also ships advanced analyses that go beyond the upstream: PLSpredict out-of-sample validation, IPMA, two-stage moderation, FIMIX-PLS finite-mixture segmentation, and two additional inner-weighting schemes (quasi-Newton BFGS and Lohmöller PCA). Stable as of 1.0.0, on PyPI, with a Zenodo DOI for citation.
openpls.app is the hosted product: a Nuxt 3 + Vuetify 3 web app with a Vue Flow editor for path diagrams, project storage, validated computation against the engine, and exports to PDF, XLSX, LaTeX, and SmartPLS swap format.
Features
Modeling
- Interactive path-diagram editor with live computation
- Reflective and formative measurement models (Mode A / Mode B)
- Five inner-weighting schemes: centroid, factorial, path, BFGS, Lohmöller PCA
- Bootstrapping with BCa confidence intervals
- Multi-group analysis and permutation tests
- Moderation (two-stage), IPMA, PLSpredict, FIMIX-PLS segmentation
Platform
- Free tier in the cloud, login + project storage
- Self-host via Docker for sensitive datasets
- Validated against SmartPLS reference results
- Team mode, shared projects, version compare (planned)
- Multilingual landing (8 languages, including German, English, Spanish, French, Italian, Portuguese, Japanese, Chinese)
Architecture
- App: Nuxt 3 + Vuetify 3 + Pinia
- Landing: Astro 5 + React + Tailwind 4
- Backend: Firebase Functions (Python) + Firestore + Auth + Storage
- Engine:
openpls-engine(Python, GPL-3.0-or-later, PyPI) - Diagram: Vue Flow
- Mail: Resend; Monitoring: Sentry
Tech highlights
app | Nuxt 3 (Vue, TypeScript), Vuetify 3 |
engine | Python 3.10+, pandas, numpy, scipy |
data | Firestore, Firebase Auth, Firebase Storage |
landing | Astro 5, React, Tailwind 4 |
... | and more |
My role
Full-stack and product: forking and maintaining the engine (HTMT, SRMR, advanced analyses, two new schemes), validation against SmartPLS, app architecture, path-diagram editor, Firebase backend, multilingual landing, open-source release on PyPI with Zenodo DOI.