WEISS is a no-code, drag-and-drop system for building web-based EPICS operation interfaces. It provides a responsive editor, live PV communication, and a lightweight deployment model.
If you are in a hurry: Getting Started.
Try it out: https://demo.weiss-controls.org.
The demo connects to a real IOC. For the demo, all edits stay in your browser only. Use Load Demo anytime to restore.
- Client-side rendering: the client browser performs most work; backend load stays minimal.
- Ease of access: use any modern browser—no remote desktops or local tools required. Access control relies on standard security mechanisms (network restrictions, authentication, reverse proxies, etc).
- Built for scale: concurrent users do not require dedicated VMs or graphical sessions.
- Global ecosystem: web technologies have one of the largest developer ecosystems, offering libraries, tools, and best practices beyond the scientific environment niche.
- Integration friendly: easy to connect with authentication systems (LDAP), GitHub/GitLab, and other modern tools.
- Drag-and-drop editor with grid snapping, alignment, grouping, layering, keyboard shortcuts.
- Live EPICS PV communication: supports both Channel Access (CA) and PV Access (PVA) protocols via community-validated implementations p4p and PyEpics.
- Runtime vs edit mode: instantly start and stop communication with a switch button.
- Extensible widget library: ready-to-use components for common controls and displays, others can be easily created.
- Designed for usability : responsive UI, straightforward layout logic, modern development stack.
- Portable JSON format: import/export or create OPIs programatically using simple JSON files.
Planned improvements (access control, OPI distribution, repository integration, etc.) are tracked in the WEISS Project Dashboard.
- Install Docker
Instructions: https://docs.docker.com/engine/install/.
Tested with Docker Engine 28.1.1, but other versions should work.
Tested with Docker Engine from 28.1.1, but most versions are expected to work fine.
- Clone the repository:
git clone https://github.com/weiss-controls/weiss.git- Create your
.envfile: You can start by just copying .env.example:
cp .env.example .envAdjust EPICS variables as needed (DEFAULT_PROTOCOL, EPICS_XXX_ADDR_LIST, etc.). Other options
can remain at default values if desired.
The production setup is configured entirely through .env. HTTP and HTTPS are both supported.
If using HTTPS, set:
ENABLE_HTTPS=true
SSL_CERT_FILE=/path/to/fullchain.pem
SSL_KEY_FILE=/path/to/privkey.pemAnd start the system:
docker compose up -dOnce built, two services should be launched:
weiss-epicsws: the EPICS communication layer.weiss: WEISS front-end application - accessible at http://<server_addr>:80 for HTTP or https://<server_addr>:443 for HTTPS (default ports).
Nginx handles routing and proxying. Configuration files are under ./nginx.
💡 TIP: you can test connectivity by loading the demo OPI from the development setup (see below).
The development version mounts the source code so you can see live changes. It also provides a demoioc for convenience.
Run:
docker compose -f docker-compose-dev.yml upThis launches three services:
weiss-demoioc: EPICS demonstration IOC (see examples/exampleIOC).weiss-epicsws: EPICS WebSocket / PV communication layerweiss-dev: The WEISS front-end application. It should be accessible inhttp://localhost:5173.
Optional: Use example-opi.json to test the demo IOC.
This can be done manually:
- Upload via the navbar "Upload File" button
- Edit as desired
- Click Preview to start EPICS communication
Or automatically by setting VITE_DEMO_MODE in your .env file:
VITE_DEMO_MODE=true # Optional: set if you want the "Load demo" button as the live demoThis will make your app show a button that automatically does the example OPI.
- Built with React + TypeScript
- UI components are based on Material UI: https://mui.com/material-ui/
- Some references used for this project: Taranta, React Automation Studio, PVWS, pyDM, Phoebus.
