Native client · iOS · Android · macOS · Windows

SoundCloud,
reimagined.

Nuages is a fast, native SoundCloud client with offline caching, live lyrics, an equalizer and BPM detection — built on a hardened auth API that never ships your developer secrets to a device.

API status
4 platforms
0 secrets on device
Features

Everything you stream, refined.

A native experience across every platform — no web wrapper, no compromises.

Offline caching

Download tracks for true offline playback, with on-device decryption for soft-DRM streams.

Live lyrics

Synced, line-by-line lyrics pulled from LRCLIB, timed to the exact second of playback.

Equalizer & BPM

A real-time parametric EQ with presets, plus automatic tempo detection on every track.

Hardened auth

OAuth + PKCE with the developer secret kept server-side. Your credentials never leave the VPS, You only get the session.

Truly native

One .NET MAUI codebase, four native UIs — media sessions, system integrations and all.

Fast & fluid

GPU-accelerated carousels, virtualized lists and content-visibility — 60fps everywhere.

Security

The secret stays on the server.

Nuages used to embed the SoundCloud developer client_id and client_secret in the app. Anyone who unpacked a build could read them. Not anymore.

1

App asks the API

The client calls POST /api/v1/auth/start with a shared API key.

2

API builds the OAuth URL

The server generates the PKCE pair + CSRF state and returns the authorize URL.

3

Exchange & refresh

Code→token and refresh calls hit the API, which holds the secret — never the device.

Loopback-only Kestrel

The app listens on 127.0.0.1; nginx terminates TLS in front.

Hardened systemd unit

ProtectSystem=strict, NoNewPrivileges, syscall filtering.

15-minute PKCE TTL

In-memory sessions, one-shot consumption, automatic pruning.

Root-only secrets

Credentials live in /etc/nuagesapi/nuagesapi.env, never in the repo.

API

A small, well-defined surface.

Every endpoint lives under /api/v1. Auth routes require an X-Api-Key header; /health is open for probes.

GET /api/v1/health open

Liveness probe used by nginx / systemd. Returns { "status": "ok" }.

POST /api/v1/auth/start X-Api-Key

Generates the PKCE pair + state server-side, returns the authorize URL.

POST /api/v1/auth/exchange X-Api-Key

Validates the session/state, exchanges the code for tokens.

POST /api/v1/auth/refresh X-Api-Key

Exchanges a refresh token for a fresh access token.

POST /api/v1/auth/signout X-Api-Key

Best-effort revocation of an access token.

Live health check
curl https://nuages.ruuka.xyz/api/v1/health
No builds for this platform yet.
Download

Get Nuages on your platform.

Native builds for every desktop and mobile platform.

Install & updates

Install once. It updates itself.

No app store, no installer to babysit. Nuages installs to a per-user folder and updates silently in the background — no clicks, no prompts, no admin rights.

Windows

  1. Unzip Nuages_Alpha_Win.zip anywhere.
  2. Run Nuages.exe -install once (or install-windows.ps1).
  3. It copies into %LOCALAPPDATA%\Programs\Nuages, adds Start Menu + Desktop shortcuts, and launches.

Uninstall from Settings › Apps, or Nuages.exe -uninstall.

macOS

  1. Unzip the macOS build.
  2. Run ./install-macos.sh (or drag Nuages.app to Applications).
  3. Open it from Launchpad or Spotlight.

--user installs to ~/Applications without sudo.

Linux

  1. Unpack the Linux build.
  2. Run ./install-linux.sh (add --system for /opt).
  3. Launch it from your app menu or with nuages.

Creates a desktop entry & the nuages:// handler.

Command line — Windows

The install logic is built into the app itself, so there is no separate installer binary and nothing to run as administrator.

Nuages.exe -install
Copies the app into %LOCALAPPDATA%\Programs\Nuages, creates Start Menu and Desktop shortcuts, registers the nuages:// handler, adds an Add/Remove Programs entry, then launches the installed copy and exits.
Nuages.exe -uninstall
Removes the shortcuts, the protocol registration, the Add/Remove Programs entry and the install folder, then exits. Also reachable from Settings › Apps.
nuages://webtoken/…
Not typed by hand. Your browser hands this URI to the OS after a SoundCloud login, and it is forwarded to the running instance — no second window opens.

The leading prefix is trimmed before matching, so -install, --install, /install and install are all equivalent. An unrecognised argument is ignored and the app starts normally. install-windows.ps1 and uninstall-windows.ps1 ship in the zip as wrappers, since you can’t pass an argument by double-clicking.

Automatic updates — on every platform

On each launch Nuages checks this API for a newer build. If there is one it downloads it quietly in the background and installs it the next time you open the app — replacing itself in place and relaunching. No separate updater, no notification you have to act on. The current version is always the one served at /api/v1/app/version.