Skip to content
julienmerconsulting edited this page May 14, 2026 · 11 revisions

Visual automation for the real world — JVM, MIT, no commercial pitch

OculiX looks at the screen the way a human does. No DOM, no accessibility API, no driver dependency.


OculiX OpenCV Java PaddleOCR License Air-gap


Locales Sectors Contributors Lineage Heritage


OculiX is the active fork of SikuliX1 (archived March 2026) — picking up 23 years of MIT-origin visual automation and bringing it to production-grade JVM tooling for regulated, legacy, and cross-platform environments where DOM-based tools cannot reach.


🎯 Why OculiX

Most modern automation tools (Selenium, Appium, Playwright) need a DOM, an accessibility API, or a vendor driver. That covers maybe 60% of real software. OculiX covers the rest.

🏦 Banking & Finance 🖥️ Mainframes 🏪 Retail POS 📱 Android fleets 🔀 Hybrid flows
SAP, Oracle EBS, legacy thick clients IBM 5250 / 3270 terminals VNC over SSH, distant fleets Android 12+ via ADB, no proprietary cloud Selenium handles the browser, OculiX the native dialogs

Visual matching + OCR + VNC + ADB, all from the same JVM library. Free, MIT, no telemetry, no per-seat licence.


⚡ 30-second example

☕ Java (native)

Maven dependency:

<dependency>
    <groupId>com.sikulix</groupId>
    <artifactId>sikulixapi</artifactId>
    <version>3.0.3</version>
</dependency>

Drive any screen:

Screen s = new Screen();
s.click("login_button.png");
s.type("login_field.png", "admin");
s.wait("dashboard_logo.png", 10);

Same code runs on Windows, macOS, Linux, and over VNC to remote machines.

🐍 Jython (in the OculiX IDE, no install)

Open the OculiX IDE, paste, hit Run :

click("login_button.png")
type("login_field.png", "admin")
wait("dashboard_logo.png", 10)

Identical primitives as the Java API, exposed as global functions in the IDE's Jython runtime.

🟢 Node.js / TypeScript via Operix
npm install oculix
const { Screen, App, VNCScreen } = require('oculix');

const screen = await Screen.create();
await screen.click('login.png');
await screen.type('admin');
await screen.wait('dashboard.png', 10);

The oculix npm package auto-downloads the OculiX JVM bridge JAR on first use into ~/.oculix/lib/. Zero node-java dependency.

🐍 Python via Operix (in progress)

The Python wrapper follows the same architecture as the Node.js one — JSON-RPC over stdio to a tiny JVM bridge. See oculix-org/Operix for the current state.

🔵 .NET via Operix (in progress)

The .NET wrapper is published in the same family. See oculix-org/Operix.


📊 What's different from SikuliX1

Area SikuliX1 OculiX
OpenCV openpnp 4.5.4 (JNI) Apertix 4.10.0 (JNA)
Java baseline 8+ 17+
VNC Basic / broken Full stack with TigerVNC + SSH tunnel
SSH None Embedded JSch tunnel for ADB / VNC
Android Experimental Production-ready (12+)
OCR Tesseract only PaddleOCR + Tesseract (pluggable, bundled server)
DPI / Retina None 5-mode cascade matching pipeline
Headless (-r) Broken in many cases Fixed, tested, CI-enforced
CI Travis CI, Java 11 GitHub Actions, Java 17, multi-platform
Recorder Legacy (NPE-prone) Modern Recorder (beta), AI-assisted
i18n Partial 22 locales, native-reviewed via community

For SikuliX core API documentation (Region, Screen, Pattern, Match, OCR…), see sikulix.github.io. This wiki documents what OculiX adds or changes.


🪶 Free, MIT, no commercial pitch

OculiX stays open-source MIT by design. The companion article "23 ans après le MIT, l'automatisation visuelle n'a plus besoin d'être commerciale" (in English: "23 years after MIT, visual automation no longer needs to be commercial") lays out the position. Concretely:

  • 📦 Bundled, not licensed — OpenCV 4.10 (via Apertix), Tesseract, JSch, VNC, ADB. One jar, nothing else.
  • 🚫 No agent, no port to open, no cloud telemetry. Air-gap-ready by default.
  • ⚖️ MIT licence — relevant for AI Act compliance, defense, biotech, healthcare, banking deployments.
  • 🤝 No commercial fork, no enterprise tier with paywalled features. The platform is one and the same for everyone.

🧩 Ecosystem

OculiX is the JVM core. Around it, a small family of focused projects:

Operix
Language wrappers — Node.js, Python, .NET that bridge to the OculiX JVM core via a tiny JSON-RPC server. Same primitives, idiomatic API in each language.

Apertix
OpenCV JVM fork — adds Apple Silicon (aarch64) support, used by OculiX directly. Replaces the legacy openpnp JNI bindings.

paddleocr-server
Multi-language OCR HTTP server — bundled when PaddleOCR is preferred over Tesseract. Self-contained PyPi install.

MCP server (in this repo, MCP/ module)
JSON-RPC over stdio / Streamable HTTP for QA frameworks (Robot Framework, pytest, Playwright) that prefer a thinner wire than legacy XML-RPC.


🗺️ Wiki Navigation

🚀 Getting Started

🔄 What Changed

✨ Features

🏗️ Infrastructure

📜 About

  • Heritage — MIT CSAIL 2003 → UIST 2009 → Raimund Hocke 2010–2023 → oculix-org March 2026

🤝 Community

OculiX is community-driven and welcomes contributions of all sizes — bug reports, native i18n review, fork-and-fix PRs, design discussions.

Active maintainers and contributors include:

Where to discuss:


🌐 External resources

OculiX is MIT-licensed and developed in the open by the oculix-org community.

Clone this wiki locally