Detail proyek
Avatar ardli-firman

ardli-firman/

sha-print

The Simplest & Most Reliable LAN / Cross-VLAN Virtual Printer Sharing Solution for Windows

Rust★ 50⑂ 16Update 24 Okt 2026Rilis v3.4.4

ardli-firman/

sha-print

The Simplest & Most Reliable LAN / Cross-VLAN Virtual Printer Sharing Solution for Windows

#android#desktop-app#linux#linux-desktop
Lisensi —0 issue0 PR0 watcherHealth 42%Sejak 2026

★ 50⑂ 1624 Okt 2026

README

GitHub ↗

ShaPrint

Modern, Standards-Based LAN & Cross-VLAN Printer Sharing for Windows, Linux, and Android

Desktop (Tauri 2, React, Rust) & Mobile (Android, Kotlin)

Latest Desktop Release Linux Desktop Support Latest Desktop Nightly Latest Android Release


ShaPrint is a modern printer-sharing solution for local area networks (LAN) and cross-VLAN environments. It allows computers and mobile devices to share and access physical printers securely and transparently without relying on problematic Windows SMB printer sharing, third-party cloud services, or shared domain accounts.

Communication runs entirely over standard IPPS (Internet Printing Protocol over TLS) on dedicated high port TCP 48631, local client queue routing via proxy on TCP 48632 (127.0.0.1:48632), and zero-configuration multicast DNS discovery on UDP 48633 (ADR 0001–0018).


📥 Downloads & Supported Platforms

Platform Channel / Role Package / Format Download / Instructions
🪟 Windows (10 / 11) Stable (Server & Client GUI) .msi, .exe Installer ⬇️ Download Windows Installer
(Includes x64 Setup .exe & MSI Installer)
🐧 Linux (Universal) Stable (Portable Desktop GUI) .AppImage (x86_64) ⬇️ Download Linux AppImage
(Runs out-of-the-box on Ubuntu, Fedora, Debian, Mint, Arch, etc.)
🐧 Ubuntu / Debian Stable / Nightly (Desktop GUI & System Daemon) .deb (Ubuntu 22.04+ / Debian 11+) ⬇️ Download DEB Package
(Installs desktop application menu launcher, icons & background daemon)
📦 Signed Repositories Guide
🐧 AlmaLinux / Fedora / RHEL Stable / Nightly (Desktop GUI & System Daemon) .rpm (AlmaLinux 9 / 10, Fedora, RHEL) ⬇️ Download RPM Package
(Installs desktop application menu launcher, icons & background daemon)
📦 Signed Repositories Guide
📱 Android (8.0+) Client (Direct & PrintService) .apk (Direct Install) ⬇️ Download Latest APK
(View all Android releases)
🌙 Desktop Nightly Nightly (Bleeding-Edge Test) .exe, .deb, .AppImage ⬇️ Browse Nightly Builds (q=nightly)
(Automated test builds & prerelease verification)

👉 Browse all releases, nightlies, and changelogs on GitHub Releases


🌐 Dedicated Network Ports

ShaPrint binds fixed, dedicated high ports to eliminate collisions with Windows system responders or common local developer servers (ADR 0014):

Service Protocol / Transport Port Purpose Reference
Server Sharing Endpoint IPPS (TLS) TCP 48631 Encrypted IPP server (/ipp/print/...) answering printer queries and processing raster print jobs ADR 0003, ADR 0014
Client Loopback Proxy IPP (HTTP loopback) TCP 48632 Local Windows spooler routing (127.0.0.1:48632) attaching Network Channel credentials ADR 0005, ADR 0014
Discovery Responder / Querier mDNS (UDP multicast) UDP 48633 Advertising and discovering nearby servers (_shaprint-ipps._tcp.local., TTL = 32) ADR 0004, ADR 0014

If a port is held by a stale shaprint process on startup, ShaPrint automatically reclaims it; third-party conflicts are reported cleanly without killing foreign processes.


✨ Key Capabilities

  • 🖨️ Standards-Based IPPS: Server shares queues using standard RFC 8010/8011 IPP over TLS with pinned SHA-256 certificate fingerprints (Trust-On-First-Use) and a dedicated TCP 48631 listener (ADR 0001, ADR 0003, ADR 0014).
  • 🎨 Driver Fidelity & Fixed Media Catalog: Renders client PWG Raster pages directly through the server's installed manufacturer driver (e.g., Epson, Canon, HP), preserving media size, color, duplex, and copies (ADR 0010). Publishes a fixed media catalog with 0.5 mm geometry matching to prevent driver capability mismatches (ADR 0017).
  • 🔍 Zero-Config Discovery & Cross-VLAN Reachability: Nearby servers advertise shared queues over multicast DNS (_shaprint-ipps._tcp.local., UDP 48633) across all active non-loopback IPv4 interfaces with TTL = 32 for mDNS reflection (ADR 0004, ADR 0014). Manual host:port entry, persistent trusted server storage, and live unicast polling enable seamless cross-VLAN printing.
  • 📱 Native Android Mobile Client: Lightweight client application in apps/android (io.shaprint.client) connecting directly over IPPS (TCP 48631) with client-side 300 dpi PWG raster rendering via PdfRenderer, battery-friendly on-demand discovery (UDP 48633), hardware-backed Android Keystore credential encryption, system PrintService integration, and Share Sheet target (ADR 0016).
  • 🔒 Defense-in-Depth Security: Network Channel passwords are never sent in plaintext or stored raw; servers authenticate clients with salted SHA-256 verifiers, and credentials are encrypted using Windows DPAPI or Android Keystore (ADR 0003, ADR 0007, ADR 0016).
  • 🪟 Native Windows Queues & One-Click Repair: Installs native Windows print queues via Add-Printer -IppURL routing through a transparent local loopback proxy (ADR 0005). Features a dedicated "Repair paper sizes" action to refresh cached driver capabilities cleanly without manual deletion (ADR 0017).
  • 🛡️ Automated Inbound Firewall Provisioning: Verifies effective Windows Firewall inbound policy on Server Sharing start (TCP 48631, UDP 48633) and prompts for UAC elevation only when rules are missing or restricted (ADR 0013).
  • ⚡ Intent-Driven UI & Unified Add Printer Wizard: Background services automatically start and stop based on user intent. Includes a streamlined 4-step AddPrinterDialog wizard with visual SHA-256 fingerprint chunking (XXXX • YYYY • ZZZZ • AAAA), system status pills, and contextual diagnostics (ADR 0009).
  • 🔄 Persistent Server Sharing Across Reboots: Server shared printer selections and sharing state persist across system reboots (sharing_state.json), ensuring workstations acting as print servers resume sharing after Windows updates or power cycles (ADR 0012, superseding ADR 0006).
  • 📦 Desktop Auto-Updater & Drain Guard: Unprivileged per-user background updates via tauri-plugin-updater with active-job drain protection (8s cooldown), idle tray auto-restart (15-min idle), and mDNS version advertisement (v= TXT record) (ADR 0012).
  • 🚀 Manual Nightly Releases: Maintainer-dispatched nightly builds published as public GitHub prereleases with dedicated update feeds and SemVer prerelease versioning (ADR 0015).
  • ⚠️ Classified Print Failure Reporting: Surfaces actionable error cards with stable error codes and single-click recovery steps, while strictly omitting secrets and document content from logs and UI (ADR 0008).
  • 👻 Tray & Lifecycle: Starts silently on Windows login (per-user Run key, no elevation required) and minimizes cleanly to the system notification area (ADR 0006).
  • 🔄 Legacy Transition: Seamlessly imports configured Network Channels from previous .NET ShaPrint installations read-only without disturbing existing setups (ADR 0007), while legacy .NET WPF is retired to legacy/wpf-lts (ADR 0011).

📁 Repository Structure

sha-print/
├── apps/
│   ├── desktop/            # Tauri 2 desktop application (React, TypeScript, Rust)
│   │   ├── src/            # Frontend UI (Tailwind CSS, shadcn-ui)
│   │   └── src-tauri/      # Rust backend: IPPS server, proxy, mDNS discovery, Windows adapters
│   └── android/            # Native Android mobile client (Kotlin, Jetpack Compose)
│       └── app/            # Android app module (io.shaprint.client, minSdk 26, targetSdk 35)
├── docs/
│   ├── adr/                # Architecture Decision Records (ADRs 0001–0017)
│   └── agents/             # Agent guidelines and triage conventions
├── scripts/
│   └── nightly/            # Automated nightly release tooling
└── package.json            # Monorepo root Bun workspace

🏗 Architecture & Documentation

All architectural decisions are documented under docs/adr/:


💻 Development Setup

Desktop Application (apps/desktop)

Prerequisites:

  • Bun (v1.0+)
  • Rust (stable)
  • Windows: Windows 10/11 with Visual Studio C++ Build Tools
  • Linux: WebKitGTK 4.1 development libraries, GTK 3, and build essentials:
    • Ubuntu / Debian: sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
    • Fedora / AlmaLinux: sudo dnf install -y webkit2gtk4.1-devel gtk3-devel openssl-devel libappindicator-gtk3-devel
# Install frontend dependencies
bun install

# Run frontend development with hot-reload
bun run dev

# Run full desktop app in development
bun run tauri dev

# Typecheck and run frontend tests
bun run typecheck
bun run test

# Rust backend checks and unit tests (from apps/desktop/src-tauri)
cd apps/desktop/src-tauri
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test

Android Mobile Client (apps/android)

Prerequisites:

  • JDK 17+
  • Android SDK (API 35, minSdk = 26)
cd apps/android

# Run unit tests
./gradlew test

# Build debug APK
./gradlew assembleDebug

Landing page (apps/landing)

The English landing page and setup guide target Cloudflare Pages at sha-print.pages.dev. To preview them with the local download counter:

make landing-dev     # http://localhost:8788
make landing-build   # Build only
make landing-deploy  # Refresh releases, validate, and publish with local Wrangler login

See the landing page README for release-link refresh, Cloudflare deployment, and analytics setup. Root frontend checks include the landing package.

Product Hunt launch copy is available as a draft for the maker to review before submission.


📦 Building Releases

Desktop Application (Windows & Linux)

# Tauri desktop bundles:
# - Windows: NSIS Setup .exe and .msi installer
# - Linux: Portable .AppImage and .deb bundle
bun run tauri build

# Linux System packages (ships shaprintd daemon, shaprintctl CLI, shaprint-desktop GUI, .desktop launcher & icons):
# Debian / Ubuntu (.deb):
bash packaging/linux/deb/build-deb.sh

# AlmaLinux / Fedora / RHEL (.rpm):
bash packaging/linux/rpm/build-rpm.sh

Built desktop artifacts are output to apps/desktop/src-tauri/target/release/bundle/, apps/desktop/src-tauri/target/deb/, and apps/desktop/src-tauri/target/rpm/.

Android Mobile Client

cd apps/android
./gradlew assembleRelease

🚀 Release Channels

  • Stable Channel: Released as official GitHub Releases (vX.Y.Z) from the main branch.
  • Nightly Channel: Dispatched manually via make release-nightly or GitHub Actions workflow dispatch. Publishes public GitHub prereleases with unique SemVer prerelease tags (e.g. v3.4.0-nightly.8) and an isolated update feed (ADR 0015).

📜 Legacy Version

The legacy .NET 8 WPF application has been frozen at v2.0.0-community and archived to the permanent legacy/wpf-lts branch (ADR 0011).


ShaPrint Open Source Project