Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

FWS — Fairino Web Services

A REST + WebSocket gateway for Fairino collaborative robots. FWS puts an ordinary HTTP API in front of the controller, so you can read live state and drive the robot from any language — no vendor SDK, no Python dependency in your client, no direct exposure to the robot network.

It is, in spirit, what ABB's Robot Web Services is for ABB controllers: a language-agnostic web layer for a robot that did not ship with one.

pip install --pre fairino-fws   # early alpha — --pre selects the pre-release
fws --simulator                 # run the whole gateway with no robot

Then open http://127.0.0.1:8000/docs for the interactive API.


Safety

FWS is not a safety device. No endpoint is an emergency stop; the only emergency stop is the physical button wired per ISO 13850. FWS carries no safety-rated function and is not certified to ISO 10218, ISO/TS 15066, IEC 61508 or ISO 13849. Its stop endpoints are software functional stops that depend on a network link, a host, a Python process and controller firmware — any of which can fail. Read SAFETY.md before connecting it to a robot.


What it does

  • Live telemetry — joint angles, TCP pose, force/torque, joint torques, program and fault state, over REST and a 10 Hz WebSocket stream.
  • Bounded motion — jogging with server-side limits and an inverse-kinematics pre-flight, on top of the controller's own soft limits.
  • Programs — upload, load, run/pause/resume/stop Lua programs, with whole-path validation before a program is started.
  • Files — list, read, write (with optimistic concurrency), delete, and version history for controller programs and point tables.
  • Force & sensors — read the force/torque sensor, set payload and centre of gravity, zero and activate the sensor.
  • Backup & restore — full controller backup and verified point-table restore.
  • The command surface — the controller's RPC commands are browsable and, where safe, directly callable through a gated invoker.
  • A control lock — motion / config / program domains held by lease with a heartbeat and a disconnect watchdog.

Requirements

  • Python 3.11+ (3.11 is the Raspberry Pi OS Bookworm system Python and the documented deployment target)
  • A Fairino FR-series controller on the network — or none at all, using --simulator

Install

pip install --pre fairino-fws    # from PyPI (early alpha; --pre selects it)
# or, from source:
pip install .
# or with Docker:
docker compose up

Quick start

Against the simulator (no hardware):

fws --simulator
curl http://127.0.0.1:8000/api/v1/state

Against a real controller:

fws --robot-ip 192.168.58.2

By default FWS binds to 127.0.0.1. Reach it from another host over an SSH tunnel, or bind elsewhere with authentication configured — it refuses to start on a non-loopback address without an API-key file.

Configuration

Configure by file, environment variable, or CLI flag. Copy fws.toml.example and edit it, or set FWS_-prefixed environment variables (e.g. FWS_ROBOT__IP=192.168.58.2). Every setting is documented inline in the example file.

The API

All routes are under /api/v1. The full, live specification is served at /openapi.json, with interactive docs at /docs. Domains:

Prefix What it covers
/state, /motion, /ws/state live state, jog, stop, preview, the WebSocket stream
/robot, /io, /frames control layer: pose, I/O, tool/work frames, payload
/programs, /execution program CRUD, load, run/pause/resume/stop
/files controller file manager
/sensors, /force force/torque, payload, sensor setup
/backup, /points backup and point-table restore
/commands, /invoke the RPC registry and the gated invoker
/system version, health, ports baseline

Stop and health are never authenticated: a client whose key is wrong or missing must still be able to stop the arm and probe health.

Development

The whole gateway runs against an in-process simulator, so you can develop with no hardware:

pip install -e ".[dev]"
pytest -q            # no robot required
ruff check fws tests
fws --simulator

See CONTRIBUTING.md.

License

FWS is licensed under the Apache License 2.0 — see also NOTICE. Copyright © 2026 Meraj Safari.

FWS is an independent project and is not affiliated with or endorsed by Fairino / FAIR Innovation.

Release files for fairino-fws 0.1.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fairino-fws 0.1.0a3
File Size Uploaded
fairino_fws-0.1.0a3.tar.gz 254.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fairino-fws 0.1.0a3
File Interpreter ABI Platform
fairino_fws-0.1.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 458.9 kB

Release files / fairino_fws-0.1.0a3.tar.gz

Download URL fairino_fws-0.1.0a3.tar.gz
Size 254.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8418751f5f34561ab1dbac1fb8a359bd2664500cb77fe079b2fe44e188f743cf
BLAKE2b-256 checksum
How to use checksums
3d15d67a9af801d7a56096abc5badfd86be45ed77623cf3bb8aa4ade223c3ae5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

Release files / fairino_fws-0.1.0a3-py3-none-any.whl

Download URL fairino_fws-0.1.0a3-py3-none-any.whl
Size 204.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c47a15868f6a5ae705d2f6f2bbbd08340186e08f3252b0de3420da685583c76f
BLAKE2b-256 checksum
How to use checksums
c8d26a263a393bb518f146b274044616bf2330d1b065b54d79df2e256d19d86b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page