Work

OpenPLS

Web
Full-Stack
Open Source

Modern PLS-SEM platform with a visual path-diagram editor and an open-source compute engine. Free in the cloud, self-hostable for sensitive data.

Structural equation model with four latent variables on a dark navy background, the OpenPLS wordmark in the corner

openpls.app · engine: github.com/jojacobsen/openpls-engine

What it is

OpenPLS is a modern alternative to SmartPLS for Partial Least Squares Structural Equation Modeling, a method widely used in business research, marketing, and the social sciences. SmartPLS is the standard, but it is paid, visually dated, and hard to use collaboratively. OpenPLS reframes the workflow around a visual path-diagram editor with live recomputation, and pairs it with 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

appNuxt 3 (Vue, TypeScript), Vuetify 3
enginePython 3.10+, pandas, numpy, scipy
dataFirestore, Firebase Auth, Firebase Storage
landingAstro 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.