Skip to content

fix: v1.1.1 — deb conflict with input-sync + Illegal instruction (clo… #11

fix: v1.1.1 — deb conflict with input-sync + Illegal instruction (clo…

fix: v1.1.1 — deb conflict with input-sync + Illegal instruction (clo… #11

Workflow file for this run

name: Build & Release InputSync
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
create_release:
description: 'Create GitHub Release'
type: boolean
default: false
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# ── Linux binary ─────────────────────────────────────────────────────────────
build-linux:
name: Linux x86_64 (native binary)
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update -q
sudo apt-get install -y \
libgtk-3-dev \
libayatana-appindicator3-dev \
libx11-dev libxtst-dev libxi-dev \
libxdo-dev libxkbcommon-dev \
libwayland-dev \
libglib2.0-dev \
build-essential curl wget file \
libssl-dev patchelf \
cmake nasm
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-gnu
- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
- name: Build Linux release binary
working-directory: src-tauri
run: cargo build --release
- name: Package binary
working-directory: src-tauri/target/release
run: |
mkdir -p pkg
cp inputsync pkg/inputsync-linux-x86_64
sha256sum inputsync-linux-x86_64 > pkg/SHA256SUMS-linux.txt
cat pkg/SHA256SUMS-linux.txt
- name: Upload Linux artifact
uses: actions/upload-artifact@v4
with:
name: linux-binary
path: src-tauri/target/release/pkg/
if-no-files-found: error
# ── Windows binary ────────────────────────────────────────────────────────────
build-windows:
name: Windows x86_64 (.exe)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-pc-windows-msvc
- name: Rust cache
uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
- name: Build Windows release binary
working-directory: src-tauri
run: cargo build --release
- name: Package binary and compute checksum
shell: pwsh
working-directory: src-tauri/target/release
run: |
Copy-Item inputsync.exe inputsync-windows-x86_64.exe
Get-FileHash inputsync-windows-x86_64.exe -Algorithm SHA256 | `
ForEach-Object { "$($_.Hash) inputsync-windows-x86_64.exe" } | `
Out-File -FilePath "SHA256SUMS-windows.txt"
Get-Content SHA256SUMS-windows.txt
- name: Upload Windows artifact
uses: actions/upload-artifact@v4
with:
name: windows-exe
path: |
src-tauri/target/release/inputsync-windows-x86_64.exe
src-tauri/target/release/SHA256SUMS-windows.txt
if-no-files-found: error
# ── GitHub Release ─────────────────────────────────────────────────────────────
release:
name: Publish GitHub Release
needs: [build-linux, build-windows]
runs-on: ubuntu-latest
if: (startsWith(github.ref, 'refs/tags/') || github.event.inputs.create_release == 'true') && always() && (needs.build-windows.result == 'success' || needs.build-linux.result == 'success')
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download Linux artifact
uses: actions/download-artifact@v4
if: needs.build-linux.result == 'success'
with:
name: linux-binary
path: release-assets/linux
- name: Download Windows artifact
uses: actions/download-artifact@v4
if: needs.build-windows.result == 'success'
with:
name: windows-exe
path: release-assets/windows
- name: List release assets
run: find release-assets -type f | sort
- name: Publish release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: "InputSync ${{ github.ref_name }} — Native Rust KVM Switch"
draft: false
prerelease: false
files: |
release-assets/linux/inputsync-linux-x86_64
release-assets/linux/SHA256SUMS-linux.txt
release-assets/windows/inputsync-windows-x86_64.exe
release-assets/windows/SHA256SUMS-windows.txt
body: |
## InputSync ${{ github.ref_name }} — Native Rust KVM Switch
Control multiple computers with one keyboard and mouse over your local network — end-to-end encrypted, no browser engine, no installer, no runtime dependencies.
**Pure Rust + egui. Single portable binary. ~9 MB.**
---
### What's New in ${{ github.ref_name }}
**Architecture — Full migration from Tauri/WebView2/React to pure Rust + egui:**
- Replaced the entire Tauri + React frontend with a native egui (eframe 0.31 + glow) UI — no browser engine, no WebView2, no Node.js required at build or runtime
- Single portable native binary (~9 MB stripped) replaces the old .deb/.exe installer packages
- Windows no longer requires WebView2 Runtime — completely self-contained executable
**New features:**
- Screen edge switching — move the cursor to any configured screen edge to automatically forward control to the connected client
- Dead corners — configurable corner regions that block edge triggers to prevent accidental switching
- Dead zones — configurable rectangular screen regions that suppress edge activation
- Optional TLS transport — self-signed TOFU certificate via rcgen + rustls + tokio-rustls, layered on top of the existing ChaCha20 session encryption
- Settings persistence — all configuration saved to `~/.local/share/inputsync/config.json`
- In-app log viewer — real-time log output in the Logs tab
- Mini screen-map widget — clickable widget in Settings for configuring edge targets
- Tabs: Main | Settings | Logs
**Bug fixes:**
- Server restart after stop — `Start Server` now auto-stops any running server; no stale state
- Stopped TCP listener now releases port immediately on shutdown
---
### Downloads
| Platform | File | Notes |
|----------|------|-------|
| **Linux** (x86_64) | `inputsync-linux-x86_64` | Run directly — no install needed |
| **Windows** (10/11 x64) | `inputsync-windows-x86_64.exe` | Run directly — no installer, no WebView2 |
Checksums: `SHA256SUMS-linux.txt` / `SHA256SUMS-windows.txt`
---
### Quick Start
1. **Server (keyboard/mouse machine):** Run InputSync → Start Server → note the 6-character code + IP
2. **Client (machine to control):** Run InputSync → Enter code + IP → Connect
3. **Switch control:** Move cursor to a configured screen edge, or press **ScrollLock**, or click the Forwarding toggle
4. All input events are encrypted end-to-end (X25519 ECDH + ChaCha20-Poly1305)
---
### System Requirements
**Linux:** `libx11`, `libxtst`, `libxdo`, `libwayland` (most distros include these)
**Windows:** Windows 10+ x64 — no additional runtime required
**Network:** TCP :24800 + UDP :24801-24802 open on the server machine
---
### Verify Downloads
```bash
# Linux
sha256sum -c SHA256SUMS-linux.txt
chmod +x inputsync-linux-x86_64 && ./inputsync-linux-x86_64
# Windows (PowerShell)
Get-FileHash inputsync-windows-x86_64.exe -Algorithm SHA256
# Compare against SHA256SUMS-windows.txt
```
---
*Built with Rust + egui — no WebView2, no Electron, no Node.js*