Skip to content

Releases: NekoSuneProjects/KitsuNexus

v1.0.77

Choose a tag to compare

@github-actions github-actions released this 09 Sep 17:46

Changed

  • OBS Overlay moved server-side. The local HTTP overlay server (127.0.0.1, OBS Browser
    Source) is gone — the overlay now lives on your paired kitsunexus-server at a public,
    unguessable /overlay/<id> URL for your account, kept fed by a lightweight push every 5s
    instead of the app serving it directly. Settings ▸ Cloud Sync's Overlay tab shows your
    account's URL (with a copy button) once paired; style/box-background are just query params on
    that URL now. Requires pairing to a server — there's no local-only overlay anymore.
  • Community Rank leaderboard is now server-side. The old leaderboard could only ever show
    your own single row, since each install has its own isolated local database — it's not a
    leaderboard without a server to aggregate across users. Ranks now push to your paired
    kitsunexus-server on every "Refresh my rank", and the in-app leaderboard reads the real
    cross-user list from there (falls back to the old local-only list if unpaired).
  • Settings ▸ Cloud Sync's server URL field now defaults to the official KitsuNexus server —
    clear it and enter your own URL if you're self-hosting.

Fixed

  • Now Playing / Spotify detection failing entirely. Root cause was two stacked bugs in the
    Windows media-session PowerShell query: reading a WinRT thumbnail stream's .Size through
    PowerShell's late-bound COM interop is unreliable and highly variable in timing, and calling
    .Dispose() on the raw stream/reader COM objects threw on every single poll (silently caught,
    but still cost seconds each time). Removed native thumbnail extraction entirely — album art
    now comes solely from the existing Deezer/iTunes lookup, which was already reliable — and
    raised the detection timeout to actually cover the real, measured latency of a WinRT session
    query (previously tight enough to kill an otherwise-working query in progress).
  • Now Playing progress bar/timestamp feeling laggy/stale. They only updated once per (slow,
    PowerShell-based) poll. Now ticked locally every second from the last poll's cached data using
    simple time-math — no extra PowerShell calls, no extra load, just a smooth-feeling clock/bar
    between polls.
  • Local Favorites "Open" not showing details for avatars/worlds/groups/friends. The Favorites
    page's "Open" button used the Local Favorite's own database row id instead of the actual
    VRChat id, so it looked up the wrong thing every time for anything saved locally (official
    favorites, whose row id already is the VRChat id, weren't affected).
  • "✗ JSON failed to parse" on Wear. PUT /avatars/:id/select doesn't reliably return a JSON
    body, so the VRChat SDK's response parser threw even though the avatar swap had already
    succeeded. That specific parse failure (only possible after a successful HTTP response) is now
    treated as success instead of a false error.
  • [statusPush] backend rejected status push: 401 spamming forever. A stale/expired Discord
    session token made this retry every 20s indefinitely with no backoff. It now stops after one
    401, clears the dead session, and tells you to log in again instead of silently failing forever.
  • Community Ranks: avatar uploads always showing 0. Only counted avatars marked public —
    but keeping your main/personal avatars private is completely normal, so this scored almost
    everyone at 0 regardless of how many they'd actually uploaded. Now counts every avatar you own.
  • Community Ranks: "Years active" stuck near 0 for long-time VRChat accounts. It was purely
    a local-history proxy, so a brand-new KitsuNexus install had nothing to show no matter how long
    the account had actually played VRChat. Now blends in half-weight credit from VRChat account
    age, so long-time accounts aren't penalized on day one; real local play history still overtakes
    it naturally with continued use.
  • Community Ranks: event participation had no way to ever register. Now auto-detected from
    real VRChat Group instance visits (not just any public/friends instance of a world some group
    happens to use for hangouts), deduped per world+group+day to prevent farming.
  • Community Ranks: local-history stats were silently discarded on every recompute. The
    derived years-active/event stats computed during sync were being thrown away before the score
    was actually calculated, due to a stale re-fetch — fixed by passing them straight through.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.77.exe (installer), KitsuNexus-Portable-1.0.77.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.77-x64.exe: 0/65 engines flagged something — full report
  • KitsuNexus-Setup-1.0.77-x64.exe: 0/56 engines flagged something — full report
  • KitsuNexus-1.0.77-x64.zip: 0/49 engines flagged something — full report

Full Changelog: v1.0.76...v1.0.77

v1.0.76

Choose a tag to compare

@github-actions github-actions released this 09 Sep 10:06

Added

  • VRC+ gate on avatar Local Favorites. Local Favorites for avatars now requires the logged-in
    VRChat account to have an active VRC+ subscription (checked via the system_supporter tag on
    the account), mirroring VRChat's own avatar-favorites gating. The project owner's own paired
    device always bypasses this — kitsunexus-server gained GET /api/me (device-token
    authenticated) so a paired desktop app can read the KitsuNexus account role it's paired to;
    the Electron app caches that role (cloudSync.role, refreshed right after pairing) and skips
    the VRC+ check when it's 'owner'. This is a KitsuNexus-account check, unrelated to the
    VRChat account itself — non-owner users still need real VRC+ regardless of pairing. Applies to
    the "☆ Local Favorite" button on the avatar detail modal, "Add to Local Favorites by ID", and
    all three "☁ Move to Cloud" flows (single/per-group/bulk-selected) on the Favorites page.

Fixed

  • Favorite avatars/worlds all dumped into one group. The Favorites page showed every
    favorited avatar under "avatars1" (and every world under "worlds1") even when VRChat had
    them split across several groups (e.g. "Animations AVI", "My Friends AVI"). Root cause:
    /worlds/favorites and /avatars/favorites return the World/Avatar objects themselves,
    which don't carry a favorite-group field, so the group always fell back to the default.
    The actual group tag lives on the plain Favorite record from /favorites, so that's now
    fetched in parallel and merged in by id (matching VRCX's approach) — all groups now render.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.76.exe (installer), KitsuNexus-Portable-1.0.76.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.76-x64.exe: 0/45 engines flagged something — full report
  • KitsuNexus-Setup-1.0.76-x64.exe: 0/54 engines flagged something — full report
  • KitsuNexus-1.0.76-x64.zip: 0/54 engines flagged something — full report

Full Changelog: v1.0.75...v1.0.76

v1.0.72

Choose a tag to compare

@github-actions github-actions released this 10 Aug 01:01

Fixed

  • The standalone Windows updater now has a verified launch handoff before KitsuNexus closes.
    Update details use an environment payload, inherited ELECTRON_RUN_AS_NODE overrides are removed
    so Update.exe cannot silently run as plain Node, and a two-way ready/ack handshake confirms the
    real extracted updater window is alive. Windows updates now prefer the elevation-capable NSIS
    Setup asset, preserve /allusers uninstall context and the existing install directory, and
    refresh external Update.exe copies to helper version 1.0.3. NSIS now launches with Windows
    ShellExecute semantics instead of through a nested PowerShell process, its own manifest handles
    UAC, quoted /D= destinations containing spaces remain intact, and the updater waits for installed
    payload files to become stable before relaunching the app. The registry lookup that discovers the
    existing uninstaller was also corrected.
  • The Home dashboard's “Friends Online” tile no longer stays on an em dash while friends are
    online.
    The tile now refreshes when the asynchronous VRChat friends cache finishes loading,
    displays a real 0 when nobody is online, and clears stale counts after logout.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.72.exe (installer), KitsuNexus-Portable-1.0.72.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.72-x64.exe: 0/46 engines flagged something — full report
  • KitsuNexus-Setup-1.0.72-x64.exe: 0/45 engines flagged something — full report
  • KitsuNexus-1.0.72-x64.zip: 0/53 engines flagged something — full report

Full Changelog: v1.0.71...v1.0.72

v1.0.71

Choose a tag to compare

@github-actions github-actions released this 09 Aug 22:22

Fixed

  • The separate Windows updater no longer terminates itself while closing KitsuNexus. Process
    cleanup now targets only main-app executable names and protects the updater's real Electron PID
    instead of PowerShell's own $PID. External %LOCALAPPDATA%\KitsuNexus\Update.exe copies now
    carry a helper-version marker so installed apps refresh older updater binaries before launching
    them. The main app also waits for the separate updater's successful spawn event before quitting,
    so a launch failure leaves KitsuNexus open and reports the error.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.71.exe (installer), KitsuNexus-Portable-1.0.71.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.71-x64.exe: 0/61 engines flagged something — full report
  • KitsuNexus-Setup-1.0.71-x64.exe: 0/56 engines flagged something — full report
  • KitsuNexus-1.0.71-x64.zip: 0/49 engines flagged something — full report

Full Changelog: v1.0.70...v1.0.71

v1.0.70

Choose a tag to compare

@github-actions github-actions released this 09 Aug 21:25

Changed

  • Updated the official Discord Rich Presence/RPC Application ID. KitsuNexus now pins
    1536095795667795998 in both the Electron main process and renderer. Related setup and
    allowlist documentation now references the new application.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.70.exe (installer), KitsuNexus-Portable-1.0.70.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.70-x64.exe: 0/53 engines flagged something — full report
  • KitsuNexus-Setup-1.0.70-x64.exe: 0/51 engines flagged something — full report
  • KitsuNexus-1.0.70-x64.zip: 0/52 engines flagged something — full report

Full Changelog: v1.0.69...v1.0.70

v1.0.69

Choose a tag to compare

@github-actions github-actions released this 09 Aug 20:16

Added

  • Project support and donation information. The README now documents ways to support
    NekoSuneProjects, including hosting and maintenance goals, cryptocurrency options, GitHub
    Sponsors, network-safety guidance, and thanks for financial and community contributions.
  • Reusable GitHub Actions packaging prompt. Added a Markdown prompt that can be copied into
    other projects so Claude or another assistant asks for the current workflow first, explains
    planned changes, researches whether the requested package targets are supported for that
    project's stack, and then applies the same AMD64 Ubuntu self-hosted packaging approach where
    possible.
  • Self-hosted runner troubleshooting notes. Added guidance for repeated GitHub runner AAD/RSA
    credential messages and the Ctrl-C TaskCanceledException shutdown block. These are runner
    listener/service lifecycle logs rather than application packaging failures; running the runner
    through its service wrapper is recommended instead of using an interactive terminal.

Changed

  • The application is now KitsuNexus. Rebranded NekoSuneAPPSVRC throughout the desktop app,
    standalone updater, package/bin metadata, Electron and Microsoft Store identities, Discord and
    backend labels, release workflow, issue templates, documentation, policies, community-rank
    wording, and user-facing runtime messages. The release version is now 1.0.69.
  • Brand artwork and release filenames now match KitsuNexus. Updated the GitHub social preview,
    Microsoft Store hero, and cute README banner without changing their fox artwork, then renamed
    the three final PNGs from nekosuneapps-* to kitsunexus-* and updated their references.
  • The Windows updater now lives outside the install directory. The packaged helper is copied
    to %LOCALAPPDATA%\KitsuNexus\Update.exe, allowing normal app updates to replace files under
    Program Files without replacing the running updater. Windows updates prefer published ZIP
    packages and copy their contents in place while excluding the updater executable.
  • Portable installs keep their data beside the executable. A portable marker or existing
    Data directory now redirects Electron's user-data path to the portable installation folder.
  • Release workflow now cross-builds desktop packages from one AMD64 Ubuntu runner. The GitHub Actions build matrix now targets Windows x64, Linux x64 and Linux arm64 while running every leg on the Linux X64 self-hosted runner. It installs Ubuntu build dependencies including Wine/NSIS where available, caches npm plus Electron downloads, uploads all generated packages, and keeps the existing tag-based release, VirusTotal and Discord announcement flow with updated artifact labels.

Fixed

  • Updater handoff no longer depends on a helper inside the app being replaced. Startup now
    bootstraps the external updater before update checks, and relaunch errors identify the expected
    LocalAppData helper path clearly.
  • Language selection is easier to complete. The first-run language picker now has a compact,
    responsive card, an explicit button type, and Enter-key submission.

📦 Downloads

  • Windows: KitsuNexus-Setup-1.0.69.exe (installer), KitsuNexus-Portable-1.0.69.exe, or .zip
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • KitsuNexus-Portable-1.0.69-x64.exe: 0/51 engines flagged something — full report
  • KitsuNexus-Setup-1.0.69-x64.exe: 0/54 engines flagged something — full report
  • KitsuNexus-1.0.69-x64.zip: 0/54 engines flagged something — full report

What's Changed

  • Make updater external (LocalAppData), add portable mode, prefer zip updates, and fix language picker by @NekoSuneVR in #14

Full Changelog: v1.0.68...v1.0.69

v1.0.68

Choose a tag to compare

@NekoSuneVR NekoSuneVR released this 09 Aug 16:12
065469d

Added

  • New AI tab — AI features now live in one place. The IntelliChat (AI provider) settings and
    the Voice Assistant were previously split across two unrelated tabs: IntelliChat was defined in
    Settings but silently relocated at runtime onto the Translation tab, and the Voice Assistant sat
    on the Translation tab next to the TTS/STT/OCR cards despite not being a translation feature.
    Both now live on a dedicated AI tab, so configuring the AI provider and the assistant that
    uses it happens in one spot. Translation keeps TTS, Desktop STT, OCR and the Translator.

Changed

  • Sidebar regrouped into meaningful sections. The nav previously dumped 25 of its buttons
    under a single "VRChat" heading, with unrelated items ("Social" holding Translation, OAuth) in
    the wrong group. It's now split into VRChat, Friends & Social, Avatars & Media,
    AI & Speech, Games, Tools, Integrations and General, so each feature sits
    under a heading that describes it. No tabs were removed or renamed — only regrouped and
    reordered. (Anyone who has drag-reordered their sidebar keeps their saved order; the new AI
    button appends to the end.)
  • Tools and Games are now their own sidebar categories. Tools and Terrors were both sitting in
    the "General" catch-all next to Settings/Docs/About/OSC Log, which buried them. Tools is now
    its own heading holding Tools, VRChat Tools, OSC Apps and AudioLink — the utility tabs,
    previously scattered between "General", "Integrations" and "VRChat". Games is its own
    heading for Terrors of Nowhere, so game-specific pages have somewhere to live as more are added.
  • Heart Rate and Weather moved to Integrations. Both were listed under "VRChat", but neither
    is a VRChat feature — they pull from external services (Pulsoid and the weather API) and feed
    the result into VRChat, which is exactly what the other Integrations tabs do. Integrations now
    holds Live, Discord, OAuth Accounts, Heart Rate, Weather and the OBS Overlay (the last moved out
    of "General"), leaving General for Stats, Settings, Docs, About and OSC Log, and VRChat
    for the tabs that actually drive VRChat itself.

Fixed

  • Possible "Exception Processing Message 0xc0000005" crash dialog on launch. The VR Overlay's
    koffi FFI binding was imported at the top level of modules/vr/overlay/openvrOverlay.js,
    which is loaded at startup by main.js through vrOverlayController. Requiring koffi itself
    immediately LoadLibrarys its native koffi.node addon, so every user performed a native
    addon load on every launch just to have the VR Overlay available — with no headset and no
    SteamVR needed to trigger it. If that native load faulted (a corrupted or antivirus-quarantined
    .node, an ABI mismatch, or the binary missing from the packaged build) it took the whole app
    down before any window existed, surfacing only as a bare Windows access-violation dialog with
    no JS stack to diagnose. koffi is now loaded lazily on first actual VR Overlay use, matching
    the existing lazy pattern used for ffmpeg-static and vrnotications, so a broken koffi can
    now only ever disable the VR Overlay feature itself instead of preventing startup.
  • Packaging: koffi's native binary is now explicitly unpacked from the asar. asarUnpack
    listed node_modules/koffi/**/*, but koffi 3.x ships its actual native binary in a separate
    @koromix/koffi-win32-x64 package, which was only being unpacked by electron-builder's
    automatic .node detection rather than by intent. Added node_modules/@koromix/**/* so a
    future koffi restructure can't silently reintroduce the "can't dlopen from inside app.asar"
    bug that was already fixed once in 1.0.64.

📦 Downloads

  • Windows: NekoSuneAPPS-Setup-1.0.68.exe (installer) or .msi
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • NekoSuneAPPS-1.0.68-x64.exe: 0/53 engines flagged something — full report
  • NekoSuneAPPS-Setup-1.0.68-x64.exe: 0/47 engines flagged something — full report

What's Changed

Full Changelog: NekoSuneProjects/NekoSuneAPPS@v1.0.67...v1.0.68

v1.0.67

Choose a tag to compare

@github-actions github-actions released this 07 Aug 06:50

Fixed

  • Updater: fixed "Failed to uninstall old application files" (exit code 2) error. The NSIS
    uninstaller was failing because NekoSuneAPPS processes were still holding file locks. The
    updater now kills running NekoSuneAPPS instances before attempting uninstall, and if the
    uninstaller still fails (exit code 2), it manually cleans up the install directory so the new
    installer can proceed. Error messages also now suggest running the installer as Administrator.
  • Live Typing with Translation no longer lags while typing. Every keystroke was immediately
    triggering a translation API call plus a redundant IPC round-trip to fetch translator settings
    from disk. Added an 800ms debounce so translation only fires after the user pauses typing,
    and cached translator settings for 5 seconds to eliminate per-keystroke IPC overhead.
  • Audio slider persistence no longer floods disk with writes. Dragging the gain/boost sliders
    (and avatar scaling smoothing, background opacity/blur) was writing the entire electron-store
    config to disk on every pixel of drag. All slider input handlers now debounce their
    saveSetting calls by 300ms.
  • Rightbar friend search no longer freezes the UI on large friend lists. renderRightbar
    (which filters the full friend cache, builds HTML for all friends, and assigns innerHTML) was
    firing on every keystroke uncapped. Now debounced at 150ms.
  • ToN board search debounced at 150ms to prevent full DOM rebuilds on every keystroke.
  • World name resolution now runs in parallel instead of sequential IPC round-trips. N unique
    world IDs previously made N serial API calls; now uses Promise.allSettled for uncached IDs
    and a single DOM pass to apply results.
  • VR overlay capture no longer blocks the main process event loop. Replaced synchronous
    writeFileSync with await fs.promises.writeFile and added a minimized-window skip so captures
    don't run when the app is hidden.
  • Photo Relay no longer re-uploads old images on startup. fs.watch on Windows can fire
    spurious events for existing files when the watcher starts, and the seen Set was empty on
    startup, so every existing photo was treated as new. Now pre-scans the photos directory on
    startup to populate the seen Set, and clears it on restart.

Changed

  • Default NSIS install directory changed from AppData to Program Files (${PROGRAMFILES}\NekoSuneAPPS).
    Users can still choose a custom location during install. Existing installs in AppData are not
    affected — the updater will continue to use whichever directory the previous install used.

📦 Downloads

  • Windows: NekoSuneAPPS-Setup-1.0.67.exe (installer) or .msi
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • NekoSuneAPPS-Setup-1.0.67.exe: scan still in progress — check status
  • NekoSuneAPPS-Setup-1.0.67.msi: scan still in progress — check status

Full Changelog: NekoSuneProjects/NekoSuneAPPS@v1.0.66...v1.0.67

v1.0.66

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:57
781eaa8

Added

  • Discord Activity (live VRChat status panel) + an official shared Discord bot mode,
    backed by a new standalone backend service that lives on its own branch in this repo
    (feature/discord-backend-server,
    its own package.json/Docker deployment) rather than as a subfolder of the Electron app —
    it's never bundled into an installer. This exists because a bot token — and the OAuth client
    secret needed to identify users — can never be safely shipped inside a distributed Electron
    app (the asar is trivially unpackable), so both now live only on this backend, which the
    desktop app talks to over an authenticated HTTP API instead.
    • The backend runs a persistent discord.js gateway connection for the shared bot
      (discordBotGateway.js), a Discord OAuth2 "identify" code exchange that never leaves the
      server (auth.js, routes/oauth.js), a live VRChat status feed pushed by each desktop
      client and re-filtered server-side through the same join/active/ask/busy privacy gate
      already used for Rich Presence (statusStore.js, routes/status.js), and a static
      Discord Activity iframe frontend (public/activity/) using @discord/embedded-app-sdk.
    • Electron gained a "Log in with Discord" flow (modules/oauth/providers/discordIdentity.js,
      modeled on the existing Twitch loopback OAuth pattern), a periodic status pusher
      (modules/integrations/discord/statusPush.js, fed by a new getVrcContextSnapshot() getter
      on discord.js so it reuses rather than re-derives the existing Rich Presence data), and an
      "official bot" mode on the Voice Bot card (discordBot.js's new startOfficialBot/
      stopOfficialBot/setMuteOfficial/setDeafOfficial) that polls the backend instead of
      running a local token-based gateway client, producing the identical state shape so the
      existing OSC/chatbox pipeline needed no changes.
    • Defaults to the official https://nekosuneappsvrc.nekosunevr.co.uk deployment
      (DEFAULT_NEKOSUNE_BACKEND_URL in main.js), but — unlike the locked RPC app ID — this is
      intentionally user-overridable: a new "Backend URL" field on the Voice Bot card
      (nekosuneBackendUrl setting) lets self-hosters point the app at their own deployment
      instead, since a self-hoster runs their own bot/OAuth app entirely and needs nothing from
      the official one.
    • Not deployed by this session — implemented and locally verified in isolation (backend
      routes exercised directly over HTTP; every changed/new file passed node --check and a
      plain-Node require-resolution check), but end-to-end use requires actually deploying the
      official host, filling in that branch's .env secrets, and one-time Discord Developer
      Portal setup (OAuth redirect + Activities URL Mapping) documented in that branch's
      README.md.

Changed

  • Discord Rich Presence Application ID is now fixed and no longer user-editable. Previously
    the "Discord Application (Client) ID" field defaulted to a shipped ID but users could freely
    edit or clear it. It's now pinned to 1534208250046578790 at every layer — the input in the
    Discord tab (index.html) is disabled/readonly, renderer.js forces the saved config and every
    outgoing discord:start payload to this ID regardless of what's stored, and main.js's
    discord:start IPC handler overwrites clientId on the way into startDiscord() as a final
    backstop. The Discord Voice Bot's separate "Application ID (for invite)" field is unaffected —
    that's an optional user-supplied bot app ID, unrelated to Rich Presence.

Fixed

  • "Invite link" on the Voice Bot card always showed "Connect first, or enter the Application
    ID..." when the official NekoSuneAPPS bot mode was selected
    , even though that message only
    makes sense for the bring-your-own-bot mode. Root cause: the button's click handler always
    called the own-bot api.botInvite() path regardless of which mode was active, and the
    official bot mode never sets discordBot.js's internal appId (that only gets set by a real
    gateway login, which official mode doesn't do). Fixed by branching on the selected mode: in
    official mode, the button now opens the backend's web dashboard
    (<backend URL>/dashboard, new nekosune:getBackendUrl IPC handler + api.openExternal) in
    the system browser instead, since that's the actual way to add the official bot to a server.

📦 Downloads

  • Windows: NekoSuneAPPS-Setup-1.0.66.exe (installer) or .msi
  • Linux (x64): .AppImage / .deb
  • Linux (arm64): .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • NekoSuneAPPS-Setup-1.0.66.exe: 0/47 engines flagged something — full report
  • NekoSuneAPPS-Setup-1.0.66.msi: 0/51 engines flagged something — full report

What's Changed

Full Changelog: NekoSuneProjects/NekoSuneAPPS@v1.0.65...v1.0.66

v1.0.65

Choose a tag to compare

@github-actions github-actions released this 28 Jul 11:51

Added

  • Weather is now a first-class Chatbox source, same as Now Playing/Stats/Heart Rate: a
    "Weather" row on the Chatbox tab's per-source grid with its own Off / Own line / Rotate toggle
    (modules/vrchat/chatbox/chatboxComposer.js). Previously the only way to see weather in
    VRChat's chatbox was to manually type the undocumented {weather} token into a Status preset,
    where it silently competed with every other preset for the single shared rotation slot — easy
    to set up and still never actually see it show up. {weather} still works in presets too. Also
    added {weather} to the Chatbox tab's "Show all tokens" reference list, where it was missing
    entirely.

Fixed

  • Linux build could freeze into "Not Responding" when using OSCQR/ShazamOSC's capture-source
    picker. Root cause: oscApps:captureSources (main.js) called desktopCapturer.getSources()
    with no error handling and no timeout — under Wayland (GNOME/KDE's default now) without a
    PipeWire screen-cast portal available, that call can hang indefinitely instead of failing,
    leaving the awaiting main-process IPC handler stuck forever and freezing the whole app, not
    just erroring in the OSC Apps tab (which is the "Failed to get sources" message actually
    reported). Fixed by: enabling Chromium's PipeWire capturer + Ozone auto platform hint on Linux
    startup so capture has a real chance of working under Wayland; wrapping both
    desktopCapturer.getSources() call sites in a 6s timeout race so a missing portal fails fast
    instead of hanging forever; and having the IPC handler resolve with an error field instead of
    rejecting, so the renderer always gets an answer either way.
  • crashGuard.js (auto-rejoin after a real VRChat crash) had no platform guard and ran
    Windows-only commands (tasklist, reg query, PowerShell Get-WinEvent) unconditionally every
    15 seconds on every platform, including Linux/Mac, where those commands don't exist — each tick
    spawned a shell that just failed (ENOENT) for a feature that could never actually detect a
    crash there anyway. Now a no-op off Windows, matching every other Windows-only module in this
    codebase.
  • Packaging: koffi's native binaries (used by the VR Overlay's OpenVR bindings) weren't in
    asarUnpack
    , so on any platform they'd fail to dlopen from inside the packaged app.asar the
    moment that code path is required. Added node_modules/koffi/**/* to asarUnpack.
  • Packaging: the Linux build had no files override, unlike Windows, so it silently inherited
    the broad top-level files: ["**/*"] glob and shipped extra non-runtime files the Windows
    installer already excludes. Linux now uses the same explicit file whitelist as Windows.

📦 Downloads

  • Windows: NekoSuneAPPS-Setup-1.0.65.exe (installer) or .msi
  • Linux: .AppImage / .deb

Installers are unsigned, so Windows SmartScreen may warn on first run — click More info → Run anyway.

🛡️ VirusTotal

  • NekoSuneAPPS-Setup-1.0.65.exe: 0/55 engines flagged something — full report
  • NekoSuneAPPS-Setup-1.0.65.msi: 0/43 engines flagged something — full report

Full Changelog: NekoSuneProjects/NekoSuneAPPS@v1.0.64...v1.0.65