Programmatic Use#
Python#
import asyncio
from opendesk.remote import connect
async def main():
remote = await connect("mini") # peer name from `opendesk peers list`
try:
pixmap = await remote.capture()
print(pixmap.width, pixmap.height, len(pixmap.data))
finally:
await remote.aclose()
asyncio.run(main())
remote is a full Computer — drop it into any existing opendesk
ToolContext and every tool transparently targets the remote machine.
JavaScript / TypeScript#
Install the SDK:
npm install @vitalops/opendesk-sdk
Connect to a paired peer by name:
import { connect } from "@vitalops/opendesk-sdk";
const remote = await connect("mini"); // looks up ~/.opendesk/trusted-peers.json
const shot = await remote.capture();
console.log(shot.width, shot.height);
await remote.close();
Or connect to a DiscoveredPeer from discover():
import { discover, connect } from "@vitalops/opendesk-sdk";
const [peer] = await discover(2000);
const remote = await connect(peer); // { host, port, publicKey }
Or by explicit URL (useful without a paired key store):
const remote = await connect("ws://192.168.1.42:8423#<pubkey-hex>");
RemoteComputer exposes the same surface as the local computer — capture(),
cursor(), pointer(), key(), windows(), clipboard(), uiTree(),
shell(), and more. Auto-reconnect with exponential back-off is on by default.
Serve from Node.js#
import { OpendeskServer, Identity, TrustedPeers } from "@vitalops/opendesk-sdk";
import { createRegistry, allowAllContext } from "@vitalops/opendesk-sdk";
const identity = Identity.loadOrCreate(); // ~/.opendesk/identity.key
const trusted = new TrustedPeers(); // ~/.opendesk/trusted-peers.json
const registry = createRegistry();
const ctx = allowAllContext();
const server = new OpendeskServer(identity, trusted, {
dispatcherFactory: () => registry.makeDispatcher(ctx),
});
await server.start();
console.log("Listening on port", server.port);
Pairing from Node.js#
import { pairWith } from "@vitalops/opendesk-sdk";
const { remote, serverPubkey } = await pairWith(
"192.168.1.42", 8423, "428901",
{ name: "mini" },
);
// remote is a connected RemoteComputer; serverPubkey is a Buffer
Identity and peer storage#
Both Python and JS share ~/.opendesk/trusted-peers.json (same snake_case keys),
so pairing done with the Python CLI is immediately usable from the JS SDK and vice versa.
import { Identity, TrustedPeers, fingerprint } from "@vitalops/opendesk-sdk";
const identity = Identity.loadOrCreate();
console.log(fingerprint(identity.publicBytes)); // e.g. 9c2f:1abc:b3d4:8870
const peers = new TrustedPeers();
console.log(peers.list());
peers.setDefault("mini");
Running into issues? See Troubleshooting →