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 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

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.