Skip to content

Releases: HakuSystems/EasyExtractUnitypackage

V2.9.0

11 Mar 20:08

Choose a tag to compare

V2.9.0

V2.9.0 - Security Limits & Sync Auth

We beefed up the security again so your systems don't just go rip, and properly secured the sync services.

Core Extraction & Security (Anti-Spam)

  • Entry & State Limits: Slammed EnsureTarEntryLimit and EnsureTrackedAssetStateLimit in there. If a package spams an absurd amount of entries to break your shit, it gets blocked instantly. It catches the ExtractionSecurityException and directly throws an InvalidDataException. this trash is sorted out now.
  • Log Spam Fix: Loading invalid packages doesn't nuke your entire error log anymore. Downgraded that shit to warnings. No need to panic just because a package is completely broken lmao.

Sync Services & Auth

  • Anonymous Session Tokens: HakuAnonymousSessionTokenProvider is in. HakuWebhookClient and HakuSyncService are finally using proper tokens for authorization now. API requests are save and not just yolo anymore.
  • Unit Tests: Wrote massive tests for all of this, basicly to ensure the error handling and token validation actually work.

📥 Installation Guides

View Platform Installation Docs

Full Changelog: V2.8.9...V2.9.0

V2.8.9

09 Mar 17:25

Choose a tag to compare

V2.8.9

V2.8.9 - The Anti-Nuke & UI Update

we fixed some major security flaws that could nuke your system if you were doing dumb shit. Plus some much needed UI responsiveness upgrades.

Here is all the stuff we fixed:

Core Extraction & Security (Anti-Drive-Nuking)

  • Path Validation: Some of you somehow managed to extract packages directly to root directories or used completely unsafe paths. basicly suicide for your file system. I implemented robust directory root normalization now.
  • ExtractionSecurityException: Introduced a new custom exception. If a path collides, is unsafe, or tries some byte overflow script-kiddie trash, the app just instantly blocks it and throws the error. Rollback handling is also in.

Search & UI Fixes

  • Shortcut Handling overhaul: The old keybindings were complete trash and made everything laggy. Replaced all of it with a DeferredTextBoxShortcutHandler. Keyboard shortcut processing is way faster now and the UI is actually responsive.
  • Everything SDK Bootstrap: Refactored the Everything SDK startup logic again. Threw a semaphore in there to handle concurrent operations. So if you spam open multiple app instances, the DLL reuse is actually safe now and the app doesn't just go rip.

📥 Installation Guides

View Platform Installation Docs

Full Changelog: V2.8.8...V2.8.9

V2.8.8

04 Mar 23:08

Choose a tag to compare

V2.8.8

V2.8.8 - The Sync & File Lock Update

hey, we are back. We basicly eliminated all those disgusting race conditions and lock errors that were nuking your settings.

Here is all the stuff we fixed:

Settings & Locks (No more nuked configs)

  • Settings File Access RIP: If the settings file was locked for a second, it instantly went "rip" and the app just crashed. We slapped some proper retry logic in there for read and write operations now. Plus: Settings now save atomically and clean up temp files. Nothing breaks anymore, save.
  • Legacy Settings Parsing Trash: Some old, malformed ExtractedUnitypackages entries literally killed the entire deserialization and reset everything to default. Bruh. The parser now just skips the broken trash, deduplicates the file paths, and actually handles Unix timestamps properly.

Search & Core Fixes

  • Everything SDK Race Condition: If you started multiple app instances at the same time, they boxed each other for the Everything SDK DLL and the initialization completely died. I secured that shit with a named mutex and lock retries now. The DLL is shared properly, no more startup fails tho.
  • Fake Gzip Checksum Errors: The core engine previously logged legit every normal tar parse failure as a "Gzip Checksum Mismatch". That was complete trash and didn't help with debugging at all. It now throws the real InvalidDataException and the Discord error log is finally clean from those fake messages. gg.

Under the Hood

  • HakuSyncService API Spam: When concurrent SyncActivityAsync calls came in for the exact same entry, the app just pointlessly spammed the API. Slapped some deduplication in there so it doesn't send everything twice. Also refactored it to inject HttpClient via DI for easier testing.
  • Code Cleanup: Threw out unused references and fixed the formatting. Code is looking fresh again ^^

Full Changelog: V2.8.7...V2.8.8

V2.8.7

27 Feb 00:23

Choose a tag to compare

V2.8.7

V2.8.7 - The Anti-Crash & Garbage Handling Update

Yo, V2.8.7 is live. Realtalk, this update was pain, massive headache because of all these random exceptions, but hey, the shit is running now. We basicly fixed all the trash that was nuking your extractions and previews.

Major Fixes (No more random crashes)

  • Garbage Data in Unitypackages: MacOS and some random third-party tools just slap complete trash at the end of .unitypackage files (trailing garbage). That completely killed the TarReader before (EndOfStream rip). The app doesn't care anymore tho. If there's garbage at the end, it just ignores it and saves the assets it already got.
  • Background Scan Crash: If you cancelled the security scan, the unobserved exception in the background literally nuked the garbage collector and killed the whole app. It's fixed, doesn't crash anymore lmao.
  • Settings Deserialization RIP: The AppSettings sometimes nuked themselves when loading WindowStates ("read too much or not enough" exceptions). Threw out the broken try-catch trash and fixed it clean with reader.Skip().
  • Notification Access Denied: Powershell (Windows), notify-send (Linux), and osascript (Mac) threw random Access Denied errors because the working directory was missing. gg. Fixed it and they have the right paths now.

OS-Specific Stuff

  • Mac Context Menu Fix: Mac users got an Access Denied error when installing the Context Menu Service. Why? Because the app thought your home directory was the "Documents" folder. Bruh. Fixed it to point to the actual $HOME directory now.
  • Linux Search Save: If you entered paths with slashes (or backslashes) in the search on Linux, the fd search completely crashed. Hardened that, runs save now.

Under the Hood

  • Cleaner Errors: Error messages don't spam your logs with the full stacktrace anymore. You just get the actual exception message now.
  • Smarter Updates: The update checker got completely refactored and uses a new state system now, so checking and error handling is way smoother.

Full Changelog: V2.8.6...V2.8.7

V2.8.6

21 Feb 00:44

Choose a tag to compare

V2.8.6

V2.8.6 - The QoL & Speed Update

Yo, V2.8.6 is live. Realtalk, this update gives you the Quality of Life features you actually need so you don't have to waste time doing basic file management. We skipped the boring internal CI/CD notes and only listed what actually matters for you.

Features you actually want

  • Open Output Folder Button: Finally added a button directly in the main window. No more digging through your file explorer like a boomer just to find your extracted stuff. (or the settings bruh)
  • Export Asset Button: You can now export single assets directly from the Preview Window. If you just need one specific file, you can pull it straight out without extracting the whole trash, save.
  • Web Dashboard Integration: Added a "Web Dashboard" button. It syncs your last 25 history entries to our API.

Performance & Under the Hood

  • Speed & Memory Boost: We completely reworked how extraction and the Malicious Code Detection handle files. It uses heavy async operations and span-based processing now. Basicly: way less RAM usage, faster extraction, and the UI won't choke.
  • 0-Byte Asset Fix: The app used to be lost when it encountered empty 0-byte files. Now it handles them properly instead of just deleting them, lmao.
  • Smarter Asset Handling: Streamlined how we classify assets. You won't see the code, but it makes everything run smoother under the hood.

Full Changelog: V2.8.5...V2.8.6

V2.8.5

25 Jan 16:39

Choose a tag to compare

V2.8.5

V2.8.5 - The "Check Your Drive" Update

Yo, V2.8.5 is live. This isn't a massive core rewrite like the last one, but it saves you from your own bad decisions. We focused on stability and making sure the app doesn't choke when you run out of space.

Disk Space Safety (Don't explode your SSD)

Previously, if you tried to extract a huge package on a full drive, the app would just try its best and then crash or error out mid-way. That's trash UX.

  • Pre-Flight Checks: We implemented a DiskSpaceHelper in UnityPackageExtractionService. Before we even touch a file, we calculate if you actually have enough space.
  • No More Silent Fails: If you're broke on storage, the MainWindow will slap you with a proper error message before you waste your time.
  • Logic: Basic math checks. If Required > Available, we stop. Simple.

Architecture & Assets

  • Platform Configs: Added proper x64 and x86 configurations to the solution. Just keeping the build pipeline clean and ready for whatever hardware you throw at it.
  • New Look: Updated the app icon to logo-flat.ico. Modern, flat, clean.

What's Next (The Ecosystem)

Real talk: We are cooking heavily in the background. While this update is small, we are working on a massive ecosystem upgrade. The website is currently getting a total overhaul to match the quality of the tools. We are building something huge, so stay tuned.

Full Changelog: V2.8.4...V2.8.5

V2.8.4

20 Jan 00:20

Choose a tag to compare

V2.8.4 - The Security Hardening & Core Migration

Yo, V2.8.4 is live. We didn't just fix bugs, we tore the architecture apart and put it back together the right way.
Why? Because the old codebase was getting too messy and I have zero patience for maintaining unoptimized code.

The Great Core Migration

We ripped the entire logic out of the Desktop App and shoved it into a dedicated library (EasyExtract.Core).

  • Single Source of Truth: The entire extraction and security logic is now centralized. No more scattered code, just one solid core library driving everything.
  • No more Spaghetti: UnityPackageExtractionService, MaliciousCodeDetectionService, and all models are now cleanly sitting in the Core lib.
  • Modernization: We yeeted the old trash (legacy extraction code) and polished everything to .NET 9 standards.

Safety by Default (Don't get pwned)

Before, the scanner just said "Eh, might be a virus, go ahead". That's trash.

  • Blocking UI: If our scanner detects malware or suspicious scripts, the "Extract" button gets blocked immediately. Red banner, full alert.
  • Force Extract: If you really want to destroy your PC (or you know exactly what you're doing), you have to explicitly click "Force Extract (Danger)". We won't stop you, but we warned you.

Under the Hood

  • MVVM Upgrade: Upgraded ViewModels to CommunityToolkit.Mvvm v8 standards. No more RaiseCanExecuteChanged boomer code, we use NotifyCanExecuteChanged now.
  • Command Fixes: The RelayCommand type check was a bit lost, fixed that.
  • Scanner Cleanup: Cleaned up the IEasyExtractLogger interface and killed unnecessary dependencies. The code is lean and fast now.

Full Changelog: V2.8.3...V2.8.4

V2.8.3

16 Jan 23:19

Choose a tag to compare

V2.8.3

V2.8.3 - The Native Comeback (Done Right) & Linux Love

Yo, V2.8.3 is live. We did a 180° turn on the engine room... again. If you've been following the changelogs, you know we tried native .NET extraction before and ditched it for SharpZipLib. Well, turns out SharpZipLib started causing more headaches than it solved (RIP Illegal rep dist code).

So we went back to Native .NET 9, but this time we actually cooked. The implementation is fully rewritten, optimized, and way better than our first attempt.

The "Native" Refactor

  • SharpZipLib is Gone: We yeeted the entire library. We rewrote the Core Extraction Engine using pure .NET 9 System.Formats.Tar & System.IO.Compression.
    • Done Right: Unlike our first native attempt way back, this implementation is fully robust and battle-tested.
    • Stability: The crashes caused by weird GZip streams are history.
    • Zip Slip Protection: Added strict validation to ensure no package can extract files outside the target folder.
    • Responsive Cancellation: We plumbed CancellationToken support all the way down. If you click "Cancel" now, the extraction stops immediately. No more waiting for the current file to finish.

Linux Improvements

  • X11 Compatibility: We added specific X11PlatformOptions for our Linux users.
  • DBus Fixes: Disabled the DBus menu and file picker integration to prevent crashes and weird behavior on certain distros. It should run much smoother now.

Fixes & Stability

  • Settings Amnesia Fixed: The app sometimes reset your settings to default because it choked on date formats from different system locales. We added a SafeDateTimeOffsetConverter that makes the JSON parsing bulletproof. No more data loss.
  • Legacy Encoding Support: Added CodePagesEncodingProvider to the startup logic. If you have ancient .zip files from 2005 using Windows-1252 encoding, they will finally extract correctly without broken Umlauts.
  • Dev Workflow: Fixed a NotInstalledException from Velopack that was annoying us in the logs when running in a dev environment.

Full Changelog: V2.8.2...V2.8.3

V2.8.2

16 Jan 01:02

Choose a tag to compare

V2.8.2 - Velopack Auto-Updates & Zip Support

Yo, V2.8.2 is here. This is a massive one. We finally killed the legacy update system (rest in piss) and replaced it with Velopack. This means actual, robust auto-updates that don't suck. Also, because some of you keep downloading .zip files containing Unity packages instead of .unitypackage files, we added support for that too.

Features

  • Velopack Integration (Auto-Updates): The old UpdateService was spaghetti trash, so we nuked it. We integrated Velopack.
    • Updates are now delta-based (faster downloads).
    • Installation is handled automatically on restart.
    • Added a proper Setup.exe for Windows. No more manual extracting like it's 2010.
  • Zip-Based Unity Package Support: You can now drop a .zip file that contains a .unitypackage directly into the app.
    • Implemented DetectPackageFormat to figure out if you're feeding us a gzip tar or a zip.
    • ResolveFromZip handles the extraction and cleanup automatically.
    • Temporary directories are wiped clean via CleanupTemporaryDirectory after we're done. No clutter left behind.

Refactors & Cleanup

  • Codebase Purge: Removed the entire legacy update logic (UpdateService, UpdatePhase, UpdateManifest). Thousands of lines of dead code gone. The app is lighter and cleaner.
  • Dependency Cleanup: Removed unused namespaces and dependencies related to the old installer.

📥 Installation Guides

View Platform Installation Docs

Full Changelog: main@{1day}...main

V2.0.8.1

01 Jan 21:52

Choose a tag to compare

V2.0.8.1 - Error Handling on Steroids & Disk Space Checks

Yo, V2.0.8.1 is live. We completely overhauled the error handling because the old system was basically trash. If things go south now, you get proper feedback instead of a silent crash. We also finally check if your drive is full before trying to write files.

Features

  • New Error Dialog System: We built a full ErrorDialogService and ErrorDialogWindow. If the app crashes or throws an error, you now get a clean window. You can copy error details or open the logs directly. Way better for debugging, trust me.
  • Disk Space Protection: We implemented a DiskSpaceHelper. Before writing files (in UnityPackageExtractionService or AppSettingsService), we check if there is actual space left. If your SSD is full, we tell you via a clean IOException instead of just dying completely lost.

Fixes & Improvements

  • Everything SDK Stability: The initialization for the Everything SDK was a bit moody. We now catch ServiceUnavailable and HttpRequestException properly. If the service is down, you'll know why.
  • Logging Control: The LoggingService now has granular control for webhooks. We don't spam everything blindly anymore; we can decide what's important via forwardToWebhook. Less spam, more value.
  • UI Cleanup: Removed some test buttons (ERR-Test) we used for debugging. Code is clean again.

📥 Installation Guides

View Platform Installation Docs

Full Changelog: main@{1day}...main