n-link/desktop
Your Name 09225b80c1 chore: drop element-plus dependency
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 21:05:02 -04:00
..
.cargo Move to workspace 2020-10-01 21:22:35 -04:00
src feat(ui): restyle file browser, file view, and home sidebar with tokens 2026-07-27 20:56:40 -04:00
src-tauri fix(desktop): run blocking USB commands on the blocking pool 2026-07-21 20:37:09 -04:00
.gitignore feat(desktop): replace Tauri 1 / Vue CLI tree with Tauri 2 + Vue 3 + Vite scaffold 2026-07-19 09:36:36 -04:00
app-icon.png Move to workspace 2020-10-01 21:22:35 -04:00
app-icon.svg Move to workspace 2020-10-01 21:22:35 -04:00
index.html fix(desktop): commit the app shell files Task 9 left unstaged 2026-07-22 08:16:58 -04:00
LICENSE Move to workspace 2020-10-01 21:22:35 -04:00
package.json chore: drop element-plus dependency 2026-07-27 21:05:02 -04:00
postcss.config.cjs feat(desktop): port app shell to Vue 3, replace verification harness 2026-07-22 07:35:33 -04:00
README.md fix(cx2): checksum NNSE packets over their declared length (#2) 2026-07-22 16:35:23 -04:00
tailwind.config.cjs feat(desktop): port app shell to Vue 3, replace verification harness 2026-07-22 07:35:33 -04:00
tsconfig.json feat(desktop): replace Tauri 1 / Vue CLI tree with Tauri 2 + Vue 3 + Vite scaffold 2026-07-19 09:36:36 -04:00
tsconfig.node.json feat(desktop): replace Tauri 1 / Vue CLI tree with Tauri 2 + Vue 3 + Vite scaffold 2026-07-19 09:36:36 -04:00
vite.config.ts feat(frontend): Vue 3 foundation — Tailwind 3, Vite alias, shared types 2026-07-21 20:44:28 -04:00
vitest.config.ts test: set up vitest for n-link-core components 2026-07-23 06:28:10 -04:00

N-Link

Free, cross-platform, CX-II compatible computer linking program for the TI-Nspire.

This package is a Tauri 2 + Vue 3 + Vite application. It was ported from Tauri 1.0.0-beta.8 / Vue CLI, which linked webkit2gtk-4.0 and could not build or run on current distributions (Ubuntu 26.04 ships only webkit2gtk-4.1).

Currently Linux-only: bundle targets are deb and appimage.

Prerequisites

  • Node.js 22+ (npm ships with it — this project uses npm workspaces, not yarn)
  • Rust 1.97+
  • System libraries (Ubuntu/Debian):
sudo apt-get install -y \
  libwebkit2gtk-4.1-dev \
  libjavascriptcoregtk-4.1-dev \
  libsoup-3.0-dev \
  librsvg2-dev \
  libxdo-dev \
  libayatana-appindicator3-dev \
  libusb-1.0-0-dev \
  build-essential curl wget file

Verify they resolve before building:

for p in webkit2gtk-4.1 javascriptcoregtk-4.1 libsoup-3.0 gtk+-3.0 libusb-1.0; do
  printf "%-24s " "$p"; pkg-config --modversion "$p" || echo MISSING
done

Setup

Run from the repository root (this is a workspace member):

npm install

--legacy-peer-deps is no longer needed — n-link-core is on Vue 3 as of the frontend port.

Note that the root package.json workspaces list contains only desktop and n-link-core. web/ is deliberately excluded: it is still on Nuxt 2 and pulls tailwindcss@1.9.6, which npm hoists to the root and which then shadows the tailwindcss@3 that desktop and @tailwindcss/forms require. Restore the entry when web is migrated.

Development

cd desktop
npm run tauri dev

Production build

cd desktop
npm run tauri build

Produces src-tauri/target/release/bundle/deb/*.deb and .../appimage/*.AppImage.

Headless CLI

The same binary works without a GUI:

./src-tauri/target/release/n-link --help
./src-tauri/target/release/n-link ls /

Notes and gotchas

  • cargo commands need dist/ to exist. Tauri's generate_context! macro validates the frontendDist path at compile time, so a bare cargo check / cargo build in src-tauri/ fails on a fresh clone until the frontend has been built once: npm run build --workspace desktop. npm run tauri build does this for you.
  • Do not run the binary from a snap-confined shell (for example, the integrated terminal of VS Code installed as a snap). Snap injects an LD_LIBRARY_PATH whose libpthread shadows the system one, producing undefined symbol: __libc_pthread_init. Use a normal terminal.
  • AppImage needs FUSE. Without it, run the AppImage with --appimage-extract and launch squashfs-root/AppRun instead.
  • vendor/libnspire-sys at the repo root is a locally patched crate wired in via [patch.crates-io]. It raises the CX II NNSE handshake retry limit (10 → 30), fixes the readPacket checksum length bug that made CX II transfers fail with a reported Busy, and adds NNSE retransmission. The build will not reproduce upstream behaviour without it. See nlink-cli/README.md for the details.