Skip to content

Repository files navigation

Odysync

Safe, fast software & driver updates for Windows, macOS, and Linux

Release License: MIT Tauri React TypeScript Rust TailwindCSS


CI Security Audit cargo-deny SBOM Tests Clippy Discord


Support me on Ko-fi

Overview

Odysync is a complete Rust rewrite of the original Python updater, built with a strict safety policy engine, a CLI, and a Tauri v2 + React desktop GUI. It fixes four defects from the original that could corrupt installations, and adds cross-platform support.

CLI

odysync scan
odysync apply --yes
odysync daemon --interval 60

GUI

cd apps/gui
npm install
npx tauri dev

Stats

Metric Value
Language Rust + TypeScript
Crates 5
Unit Tests 439
Backends 6 (winget, msstore, Windows Drivers, Homebrew, apt, Flatpak)
Binary Size ~1 MB (CLI)
Platforms Windows, macOS, Linux
GUI Framework Tauri v2 + React 19
License MIT

Repository Activity

Commit Activity Last Commit Contributors Repo Size Issues Closed Issues Stars Forks

Language Count Top Language Code Size Downloads

Language Breakdown

Rust       ████████████████████████████████████████████████████  68.4%
TypeScript ██████████████████████                               21.2%
CSS        ████                                                  4.8%
HTML       ██                                                    2.1%
Other      ████                                                  3.5%

Why v2?

The original Python updater had four defects that could corrupt installations:

# Defect Fix in v2
1 Upgraded packages with Unknown installed versions, causing sidegrades/downgrades Policy engine refuses unknown versions by default
2 Compared versions as strings (1.10 < 1.9) Proper semver ordering via odysync-core
3 On failed upgrade, fell back to reinstalling from scratch, wiping state No reinstall fallback; convergence verified post-apply
4 Installed third-party PowerShell module from PSGallery as Admin Built-in Windows Update Agent COM API, no third-party deps

Features

  • Six backends: winget, Microsoft Store, Windows Drivers (COM API), Homebrew, apt, Flatpak
  • Safety policy: stable-only by default, semver version comparison, holds/pins, exclusions, elevation rules
  • Verification: installer digest verification and signature checking (odysync-verify crate)
  • Restore points: system restore point before applying (Windows)
  • Maintenance: temp cleanup, recycle bin, DISM/SFC, startup programs
  • Scheduling: Task Scheduler (Windows), launchd (macOS), systemd (Linux)
  • Diagnostics: zip bundle for troubleshooting
  • GUI: Tauri v2 + React + TypeScript + TailwindCSS desktop app with dark/light mode
  • Daemon: background scan mode with system tray icon
  • Cross-platform: Windows, macOS, and Linux from a single codebase

Architecture

odysync-core      Policy engine, version algebra, planner, runner, config
    |
odysync-verify    Installer digest and signature verification
    |
odysync-backends  winget, msstore, Windows drivers, homebrew, apt, flatpak
    |
    +-- odysync-cli      The `odysync` command-line tool
    |
    +-- odysync-gui      Tauri v2 + React desktop app

Every safety decision lives in odysync-core. The CLI and GUI are thin shells over the engine -- they cannot drift apart in what they consider safe.

See ARCHITECTURE.md for details.


Quick Start (CLI)

# Scan for available updates
odysync scan

# Apply all safe updates
odysync apply --yes

# Hold a package (prevent updates)
odysync hold Mozilla.Firefox

# Schedule daily scans
odysync schedule --daily --time 09:00

# Run maintenance
odysync maintain --action temp-cleanup

# Background daemon
odysync daemon --interval 60

# Create diagnostics bundle
odysync diagnostics --out bundle.zip

Quick Start (GUI)

cd apps/gui
npm install
npx tauri dev

Building

# CLI only
cargo build --release -p odysync-cli

# GUI (requires Node.js 20+)
cd apps/gui && npm install
npx tauri build

# Run tests
cargo test --workspace --lib

# Lint
cargo clippy --workspace --all-targets
cargo fmt --all -- --check

Tech Stack

Layer Technology
Core Engine Rust, tokio, serde, clap
Windows APIs windows crate (COM, Update Agent, Restore Points)
GUI Framework Tauri v2
Frontend React 19, TypeScript 6
Styling TailwindCSS 3
Icons Lucide React
Build Tool Vite 8
CI/CD GitHub Actions
Security cargo-audit, cargo-deny, CycloneDX SBOM

Security

  • Policy engine refuses downgrades, same-version reinstalls, and pre-releases by default
  • Store apps refused while elevated (cannot update from elevated context)
  • Driver updates refused without elevation
  • cargo-audit and cargo-deny run on every CI build
  • CycloneDX SBOM generated per build
  • SHA-256 checksums published for every release artifact

License

MIT


Migration from v1

v1 profiles map to v2 config profiles entries. Holds and pins use the same backend:id syntax. The config file lives at:

Platform Path
Windows %APPDATA%\Odysync\config.json
macOS ~/Library/Application Support/Odysync/config.json
Linux ~/.config/odysync/config.json

Support the Project

Support me on Ko-fi



Made with Rust by SenseiIssei

About

Safe, fast software & driver updates for Windows, macOS, and Linux. Rust + Tauri v2 + React.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages