# Research

What we measure, how, and the latest results. Updated 2026-11-01. Only measured numbers are published; anything not yet measured is marked "pending".

## Methodology

- **Test suites** are automated end to end runs of the real app (Playwright driving a browser against the app, including runs against our cloud host before it was set to coming soon) and the server's own unit and integration tests. A result is the number of tests that passed out of the total, on the date of the run.
- **Member sandbox checks** are run on our cloud host (coming soon, not available to use yet) as one member trying to reach the host or another member. A result is what the system returned.
- **App sharing benchmarks** measure a shared app view (DaVinci Resolve playback, a heavy Blender viewport, a text editor): input to screen latency and frame rate. Machine: Mac15,6, Apple M3 Pro, 18 GB, macOS 26.3.1. How they are measured:
  - Input to photon on the viewer's clock: one input through the control path, injected into the app on the host, captured (ScreenCaptureKit through Electron), encoded, sent, and timed at the first painted frame whose 96x60 downsample changed.
  - Each input makes a large change (Blender's sidebar opening or closing, Resolve starting playback, one 160 pt character typed or deleted in TextEdit), 15 samples per row. The input is sent only after the picture has been still for 400 ms.
  - Hidden display rows: the shared window runs on a virtual display off the host's screen and input is posted to the app alone; the host's cursor and front app are untouched.
  - Frame rate: painted frames per second on the viewer over 10 s of constant motion. Capture only delivers frames when pixels change.
  - Host CPU: top's second sample, summed over the desktop app's processes and lp-appctl (100 = one core).
  - Baseline local-capture: the same input injected on the host and timed on raw capture frames, no encode or network.
  - Viewer and host are the same Mac (loopback), so the network adds nothing and the viewer's decode shares the CPU. No TURN relay exists yet; none is measured.

## Test suites

| Suite | What it covers | Result | Date |
| --- | --- | --- | --- |
| Cloud end to end (our cloud, coming soon) | Sign up, project from a real GitHub repo, invite, agent turns, sync. Run against our cloud host before it was set to coming soon in 0.1.10; the cloud is not available to use. | 9/9 passed | 2026-10-31 |
| Cloud end to end, joining by invite link (our cloud, coming soon) | The same flow joining through an invite link, without agent turns. | 7/7 passed | 2026-11-01 |
| Server tests, LogicPacks modules | Every test in the LogicPacks server modules. | 139/139 passed | 2026-11-01 |
| Any-app demo | Play, pause, window switching and the full 72 second timeline. | 19/19 passed | not recorded |

## Member sandbox (security checks, our cloud, coming soon)

| Check | How | Result | Date |
| --- | --- | --- | --- |
| Each member runs as their own sandbox user | Agent turns run as a separate Unix user per member, with a scrubbed environment and no host credentials. | In place | 2026-11-01 |
| One member cannot drive another member's agent server | Request to another member's local agent server without its password. | Refused (401) | 2026-11-01 |
| A member cannot read host secrets | Reading host credential files from a member sandbox. | pending |  |
| A member cannot read another member's files | Listing another member's home and project folders. | pending |  |

## App sharing benchmarks

| Benchmark | Setup | Metric | Result |
| --- | --- | --- | --- |
| DaVinci Resolve playback | Starting timeline playback in a shared Resolve running on the hidden display, viewer on the same machine (WebRTC). Includes Resolve's own playback start. | Input to screen latency | 360 ms |
| DaVinci Resolve playback | Starting timeline playback in a shared Resolve running on the hidden display, viewer on the same machine (WebRTC). Includes Resolve's own playback start. | Frame rate | 35.7 fps |
| Heavy Blender viewport | Orbiting a dense scene in Material Preview in a shared app view, viewer on the same machine (WebRTC). | Input to screen latency | 127 ms |
| Heavy Blender viewport | Orbiting a dense scene in Material Preview in a shared app view, viewer on the same machine (WebRTC). | Frame rate | 41.5 fps |
| Text editor | Typing in a shared TextEdit window, viewer on the same machine (WebRTC). | Input to screen latency | 79 ms |
| Text editor | Typing in a shared TextEdit window, viewer on the same machine (WebRTC). | Frame rate | 40.1 fps |

### Every run

| Scenario | App | Transport | Codec | Latency p50 / p95 (ms) | Frame rate (fps) | Host CPU (%) | Note |
| --- | --- | --- | --- | --- | --- | --- | --- |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | webrtc-p2p-loopback | VP8 | 127 / 203 | 41.5 | 74.3 |  |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | local-capture-baseline | none (raw capture) | 106 / 158 | 53.7 | 77.2 |  |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | jpeg-relay-via-server-loopback | jpeg q0.72, 15 fps cap | 345 / 381 | 13.4 | 100.5 | Measured before the relay queue fix (commit 27850b8cac): the server could queue frames for a viewer, so fast-changing pictures arrive late. |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | webrtc-p2p-loopback | VP8 | 79 / 128 | 40.1 | 28.1 |  |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | local-capture-baseline | none (raw capture) | 37 / 46 | 53 | 24.2 |  |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | jpeg-relay-via-server-loopback | jpeg q0.72, 15 fps cap | 166 / 215 | 13.2 | 28.9 | Measured before the relay queue fix (commit 27850b8cac): the server could queue frames for a viewer, so fast-changing pictures arrive late. |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | webrtc-p2p-loopback-hidden-display | VP8 | 169 / 258 | 37.2 | 76.7 |  |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | local-capture-baseline-hidden-display | none (raw capture) | 112 / 177 | 51.4 | 74.7 |  |
| blender-viewport-heavy | Blender 5.2.2, 16 subdivided monkeys, Material Preview | jpeg-relay-via-server-loopback-hidden-display | jpeg q0.72, 15 fps cap | 392 / 461 | 13 | 95.8 | Measured before the relay queue fix (commit 27850b8cac): the server could queue frames for a viewer, so fast-changing pictures arrive late. |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | webrtc-p2p-loopback-hidden-display | VP8 | 74 / 152 | 38.4 | 27.2 |  |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | local-capture-baseline-hidden-display | none (raw capture) | 37 / 69 | 48 | 28.2 |  |
| text-editor | TextEdit (macOS 26), 160 pt text, typing 20 keys/s | jpeg-relay-via-server-loopback-hidden-display | jpeg q0.72, 15 fps cap | 161 / 196 | 13.4 | 29.1 | Measured before the relay queue fix (commit 27850b8cac): the server could queue frames for a viewer, so fast-changing pictures arrive late. |
| resolve-playback | DaVinci Resolve 21.1.2 (free), Edit page, 1080p test clip | webrtc-p2p-loopback-hidden-display | VP8 | 360 / 634 | 35.7 | 58.7 |  |
| resolve-playback | DaVinci Resolve 21.1.2 (free), Edit page, 1080p test clip | local-capture-baseline-hidden-display | none (raw capture) | 232 / 815 | 52.1 | 44.1 |  |
| resolve-playback | DaVinci Resolve 21.1.2 (free), Edit page, 1080p test clip | jpeg-relay-via-server-loopback-hidden-display | jpeg q0.72, 15 fps cap | 3479 / 3755 | 12.8 | 72.3 | Measured before the relay queue fix (commit 27850b8cac): the server could queue frames for a viewer, so fast-changing pictures arrive late. Resolve playback shows it: about 3.5 s of queued frames. Not re-measured yet. |

Not measured: any over turn-relay: No TURN server is deployed (nothing paid; a self-hosted coturn is the documented next step), so relay beyond the LAN is not measured. resolve-playback over webrtc-p2p-loopback (on screen): Resolve was measured on the hidden display only, so the host's screen was not taken over.

Human page: [/research](/research).

---

Canonical URL: https://logicpacks.io/research

LogicPacks is developed by TechRealm (https://techrealm.online). Operated by Al Jash Trading (Establishment), Abu Dhabi, UAE, established 1994. Economic licence CN-1030597, Abu Dhabi Registration Authority. Address: Office 5, Bani Yas West 4, Bani Yas, Abu Dhabi, UAE. Website: https://aljashtrading.com. Contact: WhatsApp +1 713 632 2262 (https://wa.me/17136322262).

All pages for agents: [/llms.txt](/llms.txt). Plain facts: [/about.md](/about.md). Safety: [/safety.md](/safety.md).
