Skip to content

Releases: AetherAssembly/Attyre

v4.1.0

17 Jun 03:07
ff8c2e2

Choose a tag to compare

What's new in v4.1.0

Security fix: Electron image path traversal

The app:// image protocol handler and the save-image IPC handler were not validating filenames, which could allow reads or writes outside the intended images/ folder via crafted paths (e.g. ../../). Both handlers now reject any filename containing path separators or .. sequences.

Bug fixes

  • Silent data loss on corrupted storage: if localStorage held data that was neither valid compressed nor plain JSON, the app would silently reset to an empty wardrobe. It now logs a clear error to the console instead of failing invisibly.
  • Import rejects invalid categories: importJSON previously accepted any string for category. It now validates against the allowed values (top, bottom, outerwear, shoes, accessory) and throws a descriptive error on mismatch.
  • Case-insensitive category matching in suggestions: items with uppercase category values in existing data were silently excluded from outfit suggestions. Matching is now case-insensitive.
  • Calendar outfit save errors are now surfaced: if saving an outfit failed (e.g. storage quota exceeded), the UI gave no feedback. The error message is now shown to the user.
  • API errors no longer shown raw: the suggest page was forwarding raw geocoding and weather API error text to users. Errors now show a clean message while the raw error is logged to the console.

Downloads

Platform File SHA256
Linux (AppImage) Attyre-4.1.0.AppImage 842b288ad500fe93492ba73d28b003004c53f2c335286c3625bfa752ae195648
Linux (deb) attyre_4.1.0_amd64.deb 95097a0922cc2a56140a1bdb8c31b5f9ae9f0bbffbe0aa24b0d7876ce98abea7
Linux (rpm) attyre-4.1.0.x86_64.rpm 575920f8af036739687a26a262e180d4b1fec20300d83ca7c82e85a14575acc3
Windows Attyre.Setup.4.1.0.exe df1dc37044e33e327eb149d5f9b6bbe9ea7605114d1dc8aeaee9c039cef9deb9
macOS Attyre-4.1.0-arm64.dmg 79e311a7910bdd0b20a18334cee8424d76c8588ec5006a6048c95bd5e16cdfec

Changelog

Full Changelog: v4.0.2...v4.1.0

No account needed. All data stays on your device.

v4.0.2

11 Jun 20:37
de83fb0

Choose a tag to compare

What's new in v4.0.2

Electron build fix

The packaged desktop app was showing a blank white window on launch. vite.config.js was missing base: './', so Vite emitted absolute asset paths (/assets/index.css) that Electron's loadFile() can't resolve — the CSS and JS simply never loaded. This is now fixed.

PWA removed

Attyre is now desktop-only. The Cloudflare Pages deployment and all PWA infrastructure (service worker, web manifest, wrangler) have been removed.

Downloads

Platform File SHA256
Linux (AppImage) Attyre-4.0.2.AppImage 9e21f908415fdf64ce4ca3f3b4c170ec788ec56713bc47ae35d6c5a89da8aa5d
Linux (deb) Attyre_4.0.2_amd64.deb 214c44138586d3dcad779161eaa289945230e3d597b165394f750240ae1f3af3
Linux (rpm) Attyre-4.0.2-1.x86_64.rpm b77d9d57318c2a998149ed8542c351126cdc71a058339609a61e6bd3963a893a
Windows Attyre.Setup.4.0.2.exe 6c8ffb419da5471bd58e0339ca5a70926021ffe86ab25034efdb995c41e28dd6
macOS Attyre-4.0.2-arm64.dmg ce550af9cea9824e9d72ab7c587c08269b9839dda3142d0909b536ab69ab31d6

Changelog

Full Changelog: v4.0.1...v4.0.2

No account needed. All data stays on your device.

v4.0.1

11 Jun 18:55
3b1e870

Choose a tag to compare

What's new in v4.0.1

The desktop app has been rebuilt on Electron, replacing the previous Tauri/Rust shell.

macOS is back

macOS support returns after being dropped in v2.0.1. Download the .dmg from the assets below.

Attyre is not notarized. On first launch, right-click the app → OpenOpen to allow it. You only need to do this once.

Changes

  • Desktop shell switched from Tauri 2 (Rust + WebKitGTK) to Electron (Node.js + Chromium)
  • Auto-update active on Linux and Windows — macOS shows a link to GitHub releases instead (auto-update requires code signing on macOS)
  • Fixes RUSTSEC-2024-0429, a soundness bug in the glib crate that could cause crashes on optimized builds

Downloads

Platform File SHA256
Linux (AppImage) Attyre-4.0.1.AppImage b764352e32ceb4801fb18ad6c0f0f60013f23da281aa0d37e8fad3ac4f10bd17
Linux (deb) Attyre_4.0.1_amd64.deb 019771925e33effc1a89670ad2a7d05e8a03a967403f4c58391f438301145710
Linux (rpm) Attyre-4.0.1-1.x86_64.rpm 90141ee14b20e910a40408e2a82845b638ed6912d7681bc70337d2a627cfcd3c
Windows Setup.exe 8e8cd8f9274df1a5eeb974c7c558512d9f8ca1a032b822703011ad334179a2c4
macOS .dmg e876a22fb373897f40ae8910c42aab3c7aae18e55f32158f36b4ed482b0833cb

No account needed. All data stays on your device.

v3.1.0

08 Jun 06:00
badfeec

Choose a tag to compare

This is a bug fix release.

What's Changed

  • Settings links (GitHub, AetherAssembly, Get help, Contact us) now correctly open in the system browser and mail client on the desktop app
  • Privacy Policy is now rendered in-app at #/privacy instead of linking to a separate HTML file that couldn't be reached from the desktop build
  • Updater now shows a clear message with a link to GitHub releases when no update package is available for your platform, instead of a raw error
  • Added missing @tauri-apps/plugin-opener JS package required for desktop link handling

Full Changelog: v3.0.1...v3.1.0

Attyre v3.0.1

03 Jun 06:42
d63ab85

Choose a tag to compare

This is a maintenance release with dependency updates.

What's Changed

  • chore(deps): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #20
  • chore(deps-dev): bump the non-major group with 2 updates by @dependabot[bot] in #21

No new features or bug fixes. If you missed v3.0.0, that release brought smarter weather-aware suggestions (wind chill, WMO weather codes), occasion scoring, laundry tracking, outfit history, a packing list generator, drag-and-drop wardrobe reordering, and toast notifications. See the CHANGELOG for the full list.

Full Changelog: v3.0.0...v3.0.1

v3.0.0

30 May 10:00
bcdcf1e

Choose a tag to compare

Release date: May 30, 2026


What's new

Smarter suggestions

  • Wind speed and WMO weather code are now fetched from Open-Meteo alongside temperature (same free endpoint, no extra key)
  • Wind chill adjustment using the Environment Canada formula shifts clothing bands on cold, blustery days
  • WMO weather codes mapped to weather tags: sunny, cloudy, foggy, rain, heavy-rain, snow, wind — merged with temperature-band tags for much more accurate item scoring
  • Occasion toggle (Casual / Work / Formal) on the Suggest page re-ranks results in memory without a re-fetch
  • Items worn in the last 3 days receive a -2 score penalty so the engine favors fresher picks
  • Dirty items receive a -1 score penalty as a soft nudge toward clean clothes

Laundry tracking

  • Marking an outfit as worn on the calendar now sets laundryStatus: dirty and stamps lastWorn on each item
  • A "needs wash" filter chip in the wardrobe shows only items that need cleaning
  • Item detail page shows a "Mark as Clean" button when an item is dirty

History page

  • New History page shows all past calendar outfits in reverse-chronological order, grouped by month
  • Each entry shows item thumbnails and names
  • "Wear again" button copies a past outfit to today and increments usage

Packing list

  • New Pack page: enter a destination city and date range (up to 14 days)
  • Fetches a multi-day forecast from Open-Meteo, runs the suggestion engine per day, deduplicates across days
  • Output is a grouped checklist by category (tops, bottoms, outerwear, shoes, accessories) with checkboxes to mark items as packed
  • Occasion toggle carried over from the Suggest page

Wardrobe improvements

  • Drag-and-drop item reordering: drag cards to rearrange when no filters are active; order persists to localStorage
  • Item cards now show a "Last worn X days ago" / "Never worn" label and a laundry badge when dirty

UI polish

  • Item grid cards fade and slide up on render, with staggered delays on the first eight items
  • Toast notification system: slide-in toasts auto-dismiss after 3 seconds
  • History and Pack added to sidebar and mobile-accessible via the hamburger menu

Versioning

  • Version bumped to 3.0.0 across package.json, tauri.conf.json, Cargo.toml, app.js, service-worker.js, and README

Full changelog

See CHANGELOG.md for the complete history of changes across all releases.

Version Changelog: v2.0.1...v3.0.0

v2.0.1

21 May 03:08
f19251e

Choose a tag to compare

Release date: May 20, 2026


What's new

  • Tauri 2 desktop app (Linux, macOS, Windows)
  • Vite dev server replacing python http.server
  • Filesystem image storage via Rust save_image command
  • Service worker with network-first PWA caching
  • Per-page error boundaries
  • Auto-updater: tauri-plugin-updater + tauri-plugin-process wired up
  • Settings page shows Check for Updates button (desktop only); silent startup check shows dismissible banner if update available
  • GitHub Actions release.yml: builds Linux/Windows in parallel, generates latest.json update manifest, publishes release on version tag push
  • Add Item UX: photo required (moved to top), color auto-detected via Canvas API, name optional with auto-generation (Shirt_001, etc.), warmth buttons show temp ranges, weather tags auto-suggested by warmth
  • Warmth scale flipped: 1=Freezing (<=0C) -> 5=Hot (25C+) left to right
  • Add cross-platform build test workflow
  • Lint script: strip template literal expressions before extracting class names (fixes false positive on 'level')
  • Remove dead classList.remove('colorblind-mode'); legacy name before renaming to accessibility-mode
  • saved-outfits: replace delete-outfit-btn class with data-action attribute for JS selection
  • wardrobe: move tag-filter-chip inline styles to style.css
  • style.css: add .error, .success, and .tag-filter-chip rules

Upgraded

  • Domain updated to attyre.org
  • contact@aetherassembly.org added to Settings
  • Semver versioning (was date-based)
  • CHANGELOG and README updated for v2.0.0 & v2.0.1

Full changelog

See CHANGELOG.md for the complete history of changes across all releases.

Version Changelog: v2.0.0...v2.0.1)

Attyre v2026.05.18

18 May 20:21

Choose a tag to compare

Release date: May 18, 2026


What's new

Fixed

  • Mobile pages appeared static (critical): add-item.js, item-detail.js, and saved-outfits.js were all referencing CSS class names that don't exist in style.css — buttons rendered as bare browser defaults, forms had no padding or structure, warmth buttons didn't flex, and checkboxes were unstyled. Fixed all three files to use the correct classes: .page-wrap, .warmth-row, .checkbox-item, .btn-stack, .btn-group, .btn.btn-primary, .outfit-section, etc.
  • Warmth validation silently failed on Edit Item (critical): item-detail.js called showError('warmth-error', ...) but no element with that ID existed in the DOM — users could submit with no warmth level selected and received no feedback. Added the missing <p> error element.
  • Crop modal rendered unstyled (critical): Both add-item.js and item-detail.js used .crop-modal-content on the crop modal container, but the stylesheet defines .crop-modal-inner. Fixed the class name in both files.
  • Calendar delete bypassed store error handling: The delete-outfit handler in calendar.js hardcoded the localStorage key directly instead of going through the store, skipping all error handling. Added a deleteOutfitDate(date) helper to store.js and updated calendar.js to call it.
  • Shuffle button didn't shuffle: The shuffle button on the Home page re-navigated to #/, which just re-ran suggestForTemp(18) and produced the same result every time. Now performs a Fisher-Yates shuffle over all wardrobe items and updates the chip row in-place.
  • Offline indicator offset on desktop: The offline banner used top: var(--topbar-height) in the desktop media query, but the topbar is display: none on desktop — pushing the banner 56px down from where it should be. Fixed to top: 0.
  • Crop button missing on Edit Item page: item-detail.js had no crop button wired up for the existing image or newly uploaded images. Now consistent with add-item.js.
  • QuotaExceededError silently swallowed in add/edit forms: Both forms now catch storage quota errors and surface them to the user via the name field error element instead of failing silently.

Known bugs

  • Mobile version appears static, working on fix

Upgrading

No migration needed. Data stored in localStorage is fully compatible with this release. If you have the app installed as a PWA, it will update automatically on next launch.


Full changelog

See CHANGELOG.md for the complete history of changes across all releases.

Version Changelog: v2026.05.11...v2026.05.18

Attyre v2026.05.11

17 May 05:41
a3d382d

Choose a tag to compare

Attyre v2026.05.11

Release date: May 11, 2026


What's new

Accessibility overhaul

This release is a big one for keyboard and screen reader users. Item cards are now proper <button> elements, which means screen readers announce them correctly and keyboard users get Enter/Space activation for free. The calendar grid has been rebuilt with full ARIA semantics (role="grid", role="gridcell", aria-selected), and day cells respond to keyboard navigation.

A hidden aria-live region now announces page titles on every navigation, filter result counts in the wardrobe, and calendar date selections, so screen reader users always know what changed without hunting around.

Other additions:

  • Skip-to-content link visible on Tab from any page
  • Global :focus-visible ring on all interactive elements, with a thicker blue variant in accessibility mode
  • aria-pressed state on outfit selector cards so selection state is readable without relying on color
  • aria-describedby wiring on name and category form inputs to their inline error messages
  • prefers-reduced-motion support: all CSS transitions and animations are suppressed when the OS setting is on

Accessibility mode itself also got expanded. Beyond the color swap, it now bumps the base font size to 16px, strengthens border contrast, and thickens nav icon strokes.


Bug fixes

Mobile app shell invisible on older phones

.app-shell used height: 100dvh with no fallback. The dvh unit is unsupported on iOS older than 16 and Chrome older than 108, which caused the shell to collapse to zero height and render nothing. A height: 100vh fallback has been added immediately before the dvh line.

Initial page never renders on slow mobile connections

app.js registered a DOMContentLoaded listener unconditionally. Because ES modules are fetched asynchronously, the event can fire before the module finishes loading on real phones, leaving #app permanently empty. The router now guards with a document.readyState check so renderPage() always runs.

PWA start_url mismatch on iOS

manifest.json had "start_url": "/" while the app uses hash routing. Launching from the iOS home screen landed on a bare static file instead of the app. Changed to "/index.html#/".


Known bugs

  • Mobile version appears static, working on fix

Upgrading

No migration needed. Data stored in localStorage is fully compatible with this release. If you have the app installed as a PWA, it will update automatically on next launch.


Full changelog

See CHANGELOG.md for the complete history of changes across all releases.