{"id":47603168,"url":"https://github.com/bestlux/boundless","last_synced_at":"2026-04-13T01:42:00.464Z","repository":{"id":342926208,"uuid":"1158205164","full_name":"bestlux/boundless","owner":"bestlux","description":"Rust-first alternative to Mouse Without Borders","archived":false,"fork":false,"pushed_at":"2026-03-31T01:37:25.000Z","size":3907,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T04:39:36.926Z","etag":null,"topics":["clipboard","mouse-without-borders","remote-input","rust","windows"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bestlux.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T00:47:46.000Z","updated_at":"2026-03-31T01:34:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"1f54f31d-f270-4b5e-a081-81c2b50d8a6b","html_url":"https://github.com/bestlux/boundless","commit_stats":null,"previous_names":["bestlux/boundless"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/bestlux/boundless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bestlux%2Fboundless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bestlux%2Fboundless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bestlux%2Fboundless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bestlux%2Fboundless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bestlux","download_url":"https://codeload.github.com/bestlux/boundless/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bestlux%2Fboundless/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clipboard","mouse-without-borders","remote-input","rust","windows"],"created_at":"2026-04-01T18:58:51.980Z","updated_at":"2026-04-01T18:58:53.182Z","avatar_url":"https://github.com/bestlux.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# boundless\n\nBoundless is a Rust-first, performance-oriented alternative to Mouse Without Borders.\n\nBoundless is currently an alpha-stage project. Windows is the primary target today; cross-platform runtime coverage is still in progress.\n\n## Quick start\n\nFor local development:\n\n```bash\ncargo fmt\ncargo test\n```\n\nFor the Windows desktop flow:\n\n```bash\ncargo run -p boundless-daemon\ncargo run -p boundless-tray\n```\n\n## Project scope\n\n- Primary target: Windows\n- First-run UX: tray dashboard + local daemon\n- Public status: alpha, APIs and runtime behavior may still change\n- License: MIT; see [LICENSE](LICENSE)\n\n## Community\n\n- Contributions: see [CONTRIBUTING.md](CONTRIBUTING.md)\n- Bug reports and feature requests: use GitHub Issues\n- Security reports: see [SECURITY.md](SECURITY.md)\n- Support and triage guidance: see [SUPPORT.md](SUPPORT.md)\n\n## Current status\n\nThis repository now contains an alpha-oriented workspace scaffold with:\n\n- `boundlessd`: daemon process exposing local control APIs over gRPC\n- `boundlessctl`: CLI for pairing, topology, features, hotkeys, diagnostics, and safe reset\n- Shared core crates for protocol, security, transfer policy, input switching logic, discovery helpers, and clipboard policy\n- Versioned local config + structured rotating logs + diagnostics dump baseline\n\n## Workspace layout\n\n- `crates/core-protocol`\n- `crates/core-security`\n- `crates/core-discovery`\n- `crates/core-input`\n- `crates/core-clipboard`\n- `crates/core-transfer`\n- `crates/ipc-api`\n- `crates/daemon` (`boundlessd`)\n- `crates/cli` (`boundlessctl`)\n- `crates/tray` (`boundlesstray`, Windows)\n- `docs/architecture` (v1 architecture maps and ownership boundaries)\n\n## Build and test\n\n```bash\ncargo fmt\ncargo test\n```\n\nUnified test suite (PowerShell):\n\n```powershell\n./scripts/dev/test-suite.ps1 -Profile smoke\n```\n\nProfiles:\n\n```powershell\n./scripts/dev/test-suite.ps1 -Profile quick   # fmt + test + clippy\n./scripts/dev/test-suite.ps1 -Profile smoke   # quick + 2-node smoke\n./scripts/dev/test-suite.ps1 -Profile full    # smoke + 3-node smoke\n./scripts/dev/test-suite.ps1 -Profile trace -EndpointA http://127.0.0.1:50051 -EndpointB http://192.0.2.10:50051\n./scripts/dev/test-suite.ps1 -Profile trace -TraceEnforceBudgets -TraceCaptureToApplyP95BudgetMs 45 -TraceCaptureToReceiveP95BudgetMs 20 -TraceCaptureToApplyJitterP95BudgetMs 18\n./scripts/dev/test-suite.ps1 -Profile recovery -EndpointA http://127.0.0.1:50051 -EndpointB http://192.0.2.10:50051\n```\n\n`-Profile trace` now also exports matrix artifacts beside the trace log by default:\n- `\u003ctrace\u003e.matrix.csv`\n- `\u003ctrace\u003e.matrix.json`\n\nStandalone matrix export for one or more trace logs:\n\n```powershell\n./scripts/dev/input-trace-matrix.ps1 -TraceDir ./artifacts/input-trace -Scenario edge_handoff -Topology topology_a\n```\n\nAutomated pairing recovery matrix (reject + timeout + recovery success) with captures and diagnostics:\n\n```powershell\n./scripts/dev/s4-recovery-automation.ps1 -EndpointA http://127.0.0.1:50051 -EndpointB http://192.0.2.10:50051 -ResponderHost 192.0.2.10\n```\n\nIf responder verification codes are hidden over remote API, the recovery script prompts once for the 6-digit success code shown on the responder tray. You can also pass `-RecoverySuccessCode \u003ccode\u003e` / `-SuccessCode \u003ccode\u003e` to avoid prompts.\nFollow-up modes:\n- `-Mode success-only`\n- `-Mode lockout-only`\n- `-Mode success-and-lockout`\n\nCompatibility wrapper (legacy command still works):\n\n```powershell\n./scripts/dev/validate.ps1\n```\n\n## Run locally\n\nStart daemon:\n\n```bash\ncargo run -p boundless-daemon\n```\n\nQuery status:\n\n```bash\ncargo run -p boundless-cli -- daemon status\n```\n\nInteractive all-in-one terminal flow (auto-start daemon by default):\n\n```bash\ncargo run -p boundless-cli -- console\n```\n\nThe `console` command shows daemon health, mDNS discovery status, discovered endpoints, trusted/connected peers, feature toggles, input owner/capture target, and pending pairing requests. It also provides quick commands for toggles and nearby pairing actions.\n\nInside console, use `pair request \u003cindex|machine_id\u003e` to start guided nearby pairing for a discovered peer without manually typing host/port (pairing port is derived automatically from discovered transport endpoint).\n\nCLI setup wizard (automation/debug fallback):\n\n```bash\ncargo run -p boundless-cli -- setup\n```\n\nThe setup wizard auto-checks daemon reachability, guides pairing (discovered peer or manual host fallback), and can apply initial left/right/up/down orientation for the newly paired peer. The tray dashboard is the canonical first-run UX on Windows.\n\nWindows tray dashboard UI (Windows):\n\n```bash\ncargo run -p boundless-tray\n```\n\n`boundlesstray` provides:\n- tray icon + dashboard window (`Dashboard` / `Quit` menu)\n- close-to-tray behavior on window `X`; use tray `Quit` for full exit\n- `Status \u0026 Pairing` tab for discovered peers, manual connect, paired peers, and pending requests\n- first-run `Get Started` guidance for fresh installs\n- guided challenge-confirm pairing dialog (request code, submit code, retry affordances)\n- `Layout Manager` tab for orientation (`left/right/up/down`) and apply action\n- `Settings` tab for machine/runtime diagnostics and reconnect action\n- API-first background refresh + optional daemon auto-start attempts (`--start-daemon`, default `true`)\n\nOn Windows, the daemon defaults to a local named pipe control endpoint (`npipe://./pipe/boundlessd-api`) and the tray/CLI default endpoint matches that.\n\nIf your local daemon config is TCP (`\"api_transport\": \"tcp\"`), launch tray/CLI with explicit TCP endpoint:\n\n```bash\ncargo run -p boundless-tray -- --endpoint http://127.0.0.1:50051\ncargo run -p boundless-cli -- --endpoint http://127.0.0.1:50051 daemon status\n```\n\nYou can inspect daemon config path with:\n\n```bash\ncargo run -p boundless-daemon -- print-config-path\n```\n\nWindows installer smoke/validation:\n\n```powershell\n./scripts/dev/installer-smoke.ps1 -KeepArtifacts\n```\n\nBuild a local Windows installer:\n\n```powershell\ncargo build --release -p boundless-daemon -p boundless-cli -p boundless-tray\npowershell -NoProfile -ExecutionPolicy Bypass -File .\\scripts\\release\\package-windows.ps1 `\n  -Version 1.0.0-local `\n  -DaemonPath .\\target\\release\\boundlessd.exe `\n  -CliPath .\\target\\release\\boundlessctl.exe `\n  -TrayPath .\\target\\release\\boundlesstray.exe `\n  -OutputPath .\\artifacts\\package-validation\\Boundless-1.0.0-local-windows-x64.msi\n```\n\nInstall locally from the packaged MSI:\n\n```powershell\nStart-Process msiexec.exe -Wait -ArgumentList @(\n  '/i',\n  (Resolve-Path .\\artifacts\\package-validation\\Boundless-1.0.0-local-windows-x64.msi),\n  '/qn',\n  '/norestart'\n)\n```\n\nThe Windows release artifact is an MSI that installs:\n- `boundlesstray.exe`\n- `boundlessd.exe`\n- `boundlessctl.exe`\n- `Boundless.ico`\n- `Boundless-Reset.ps1`\n- `README.txt`\n- `LICENSE.txt`\n- `CHANGELOG.md`\n\nRelease signing policy:\n- Windows signing is optional during the current alpha phase.\n- Set release environment variable `WINDOWS_SIGN_REQUIRED=true` and configure the signing secrets/vars to enforce signed stable releases.\n- If signing material is configured while `WINDOWS_SIGN_REQUIRED` is unset, the workflow still signs available Windows artifacts without making signing a release gate.\n\nInstall behavior:\n- default per-user install root: `%LocalAppData%\\Programs\\Boundless`\n- Startup shortcut: `%AppData%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\Boundless.lnk`\n- Start Menu shortcut: `%AppData%\\Microsoft\\Windows\\Start Menu\\Programs\\Boundless.lnk`\n- Desktop shortcut: `%UserProfile%\\Desktop\\Boundless.lnk`\n- installed shortcuts and ARP metadata use the packaged Boundless icon asset\n- tray launch is the primary entrypoint and auto-starts `boundlessd` when needed\n- first MSI releases intentionally block over legacy script-installed layouts; remove the old script-based install before running the MSI\n\nRecovery helpers:\n\n```powershell\npowershell -NoProfile -ExecutionPolicy Bypass -File \"$env:LOCALAPPDATA\\Programs\\Boundless\\Boundless-Reset.ps1\" -NetworkOnly\npowershell -NoProfile -ExecutionPolicy Bypass -File \"$env:LOCALAPPDATA\\Programs\\Boundless\\Boundless-Reset.ps1\" -All\nStart-Process msiexec.exe -Wait -ArgumentList @(\n  '/x',\n  (Resolve-Path .\\artifacts\\package-validation\\Boundless-1.0.0-local-windows-x64.msi),\n  '/qn',\n  '/norestart'\n)\n```\n\nNearby pairing (approval-based, no trust-bundle file copy):\n\n```bash\ncargo run -p boundless-cli -- pair create-code --ttl 120\ncargo run -p boundless-cli -- pair nearby-join 123456 --host \u003ctarget-host-or-ip\u003e --port 15200\ncargo run -p boundless-cli -- pair discover\ncargo run -p boundless-cli -- pair request \u003cindex|machine_id|display-name\u003e\ncargo run -p boundless-cli -- pair request \u003cindex|machine_id|display-name\u003e --request-id \u003crequest_id\u003e --code 123456\ncargo run -p boundless-cli -- pair pending\ncargo run -p boundless-cli -- pair approve \u003crequest_id\u003e\n```\n\n`pair request \u003cselector\u003e` starts a guided request-code flow and prints a `request_id`.\nThe target tray/CLI shows the generated 6-digit verification code.\nUse `--request-id` and `--code` to submit and complete pairing.\n`nearby-join` remains available and waits for remote approval before importing trust.  \nThe daemon nearby pairing listener defaults to `network_port + 100` (for example `15200` when transport network port is `15100`).\n\nExport/import trust bundles (fallback or offline workflow):\n\n```bash\ncargo run -p boundless-cli -- pair export-trust --output node-a.json\ncargo run -p boundless-cli -- pair import-trust --input node-b.json --alias node-b\n```\n\nTwo-node smoke test (PowerShell):\n\n```powershell\n./scripts/dev/two-node-smoke.ps1\n```\n\nThe smoke harness forces daemon control API transport to TCP for deterministic multi-node testing.\n\nQueue transport payloads and inspect events:\n\n```bash\ncargo run -p boundless-cli -- transport send-text \u003cpeer_id\u003e \"hello\"\ncargo run -p boundless-cli -- transport send-image \u003cpeer_id\u003e ./path/to/image.bmp\ncargo run -p boundless-cli -- transport send-file \u003cpeer_id\u003e ./path/to/file.txt\ncargo run -p boundless-cli -- transport events --limit 100\n```\n\nManage input ownership control-plane:\n\n```bash\ncargo run -p boundless-cli -- input owner\ncargo run -p boundless-cli -- input capture-target\ncargo run -p boundless-cli -- input capture-start \u003cpeer_id\u003e\ncargo run -p boundless-cli -- input capture-stop\ncargo run -p boundless-cli -- input send-move \u003cpeer_id\u003e 3 2\ncargo run -p boundless-cli -- input send-key \u003cpeer_id\u003e 30 down\ncargo run -p boundless-cli -- input claim \u003cpeer_id\u003e\ncargo run -p boundless-cli -- input release \u003cpeer_id\u003e\n```\n\nConfigure hotkeys (examples):\n\n```bash\ncargo run -p boundless-cli -- hotkey toggle_easy_mouse Ctrl+Alt+Shift+E\ncargo run -p boundless-cli -- hotkey reconnect Ctrl+Alt+Shift+R\ncargo run -p boundless-cli -- hotkey lock_machine Ctrl+Alt+Shift+L\n```\n\nConfigure topology-driven edge handoff (tokens can be `self`/`local`/`me`, machine id, device name, or connected peer display names / peer id tokens):\n\n```bash\ncargo run -p boundless-cli -- layout set \"left,self,right\"\ncargo run -p boundless-cli -- layout preview\ncargo run -p boundless-cli -- layout orient --left \u003cpeer\u003e --right \u003cpeer\u003e\ncargo run -p boundless-cli -- layout wizard\n```\n\n## Release model\n\n- Conventional Commits drive semver intent\n- manifest-mode `release-please` prepares version bumps, tags, and draft GitHub Releases\n- merges to `main` build the Linux tarball and Windows MSI from the tagged release commit\n- release assets are validated, checksummed, attached to the draft release, and then published automatically\n- If `release-please` cannot open PRs with `GITHUB_TOKEN`, either:\n  - enable repository setting `Allow GitHub Actions to create and approve pull requests`, or\n  - add a `RELEASE_PLEASE_TOKEN` secret (PAT with `contents` + `pull_requests` write access)\n\n## Notes\n\nAlpha scope emphasizes reliability primitives and now includes TLS transport with heartbeat/reconnect, trust-bundle pairing, real clipboard runtime sync for text and bitmap image payloads (watch/apply with echo suppression), queued file payload transfer primitives, and input routing groundwork (ownership control-plane + runtime capture target + synthetic input frame transport + runtime injection queue with pluggable backend). Windows runtime injection uses `SendInput`, and Windows capture now uses low-level keyboard/mouse hooks (with polling fallback) to drive outbound input frames, including wheel/hwheel events. Layout-driven edge handoff for capture target switching is now wired behind `easy_mouse`/`wrap_mouse` policy, and a Windows hotkey runtime executes configured `toggle_easy_mouse`, `reconnect`, and `lock_machine` actions on combo press edges. Broader cross-platform capture remains in progress. mDNS runtime discovery with manual address fallback is also in place.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbestlux%2Fboundless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbestlux%2Fboundless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbestlux%2Fboundless/lists"}