github RamazanKara/nightjar v4.0.0
Nightjar 4.0.0

2 hours ago

Nightjar 4.0.0 is the client for Rubylight 3.0, on Android, Android TV, Windows and Linux. It covers everything since Nightjar 3.2.3, including the two previews, 4.0.0-alpha.1 and alpha.2. It brings split-screen co-op, Dolby Vision, HDR10+ and HLG, clipboard sync, files and USB forwarding, streams that survive trips out of the app and short network drops, 7.1.4 surround, and a desktop app that now matches Android in frame pacing, PIN lock, screen readers and microphone echo cancellation. Most new features need a PC with Rubylight 3.0. With any other Moonlight host Nightjar works as before, and Sunshine-based PCs that support them now also take the Error correction setting and automatic bitrate.

Highlights

  • Split-screen co-op. Join a free slot in a PC's co-op game; every player gets their own game window, controller and sound.
  • Dolby Vision, HDR10+ and HLG. Dolby Vision on HEVC and AV1, HDR through "Render through Vulkan", HLG on PyroWave, and HDR that no longer freezes on MediaTek TVs.
  • Streams that survive interruptions. Trips to Files or Home come back to the running game, and a Wi-Fi drop says "Network lost" and picks the stream up where it was.
  • Clipboard, files, shared folders and USB. Copied text and images go both ways, files go to and from the PC, and USB devices can be handed to it.
  • The keyboard follows text fields. Tap into a text field on the PC and the keyboard opens, fitting the field, and closes after.
  • Sound for your setup. 7.1.4 surround, PCM and Dolby for receivers, fewer crackles at the start, and microphone effects with a mute button.
  • AI enhancement on Windows. The graphics card's own video upscaler sharpens the stream, and HDR streams are tone mapped frame by frame.
  • The desktop app catches up with Android. Frame pacing modes, PIN lock, screen readers, microphone echo cancellation, installers, and controller hints that name your controller's buttons.

Upgrading from 3.2.x

Updates install over 3.2.3 and keep your PCs and settings. Recover interrupted streams is now on by default, automatic bitrate is now called Device controls bitrate, and Profiles moved to the Settings overview.

Network and streaming

  • Trips out of the stream don't end it. Leaving the stream for Files, Home or another app, even several times in a minute, comes back to the running game every time.
  • Network drops say so and recover. After a short Wi-Fi drop the stream says "Network lost" at once instead of a frozen picture. A network back on the same address picks the stream up where it was; otherwise Nightjar reconnects to the same game as soon as the network has an address toward the PC.
  • A stream that never started says why at once. A blocked port or a firewall shows its error right away instead of retrying for a minute.
  • Error correction (Android and desktop): leave it to the PC, follow this device's losses, or fix it at 10 to 50 %. Rubylight PCs and Sunshine-based PCs that accept it take it. Nightjar tells the PC once a second how much video it lost, so a PC that adapts follows this device's network.
  • Automatic bitrate with Sunshine-based PCs that adjust the bitrate themselves: the PC follows the network reports Nightjar sends every three seconds, and Android says so when the PC's automatic bitrate doesn't start. Rubylight PCs keep Nightjar's own automatic bitrate.
  • Speed tests where the PC offers one. The connection test (Android) and Test speed (desktop) measure the speed from any PC that has a speed test, and only from those.
  • Change bitrate and frame rate mid-stream on a Rubylight PC that allows it, from Change bitrate / frame rate or the bitrate slider in the stream menu. The PC's answer, a limit or a refusal shows as a message.
  • PyroWave starts at its own bitrate. With the bitrate on automatic, a PyroWave stream starts at PyroWave's default, about 400 Mbps at 1080p60, instead of the 20 Mbps meant for H.264 and HEVC. On a known wired link it stays within 90 % of the link, so 2.5 and 10 Gbit/s links get the full default (1.6 Gbps at 4K60); with the link unknown, such as on Wi-Fi, it stays at or below 900 Mbps. It never goes below PyroWave's minimum (about 187 Mbps at 1080p60).
  • A bitrate you choose is kept. With PyroWave selected, the bitrate setting warns when it is below PyroWave's minimum, also in a PC's, a game's or a profile's own settings. The mobile data limit still caps the bitrate.
  • PyroWave says when another codec streams, with the codec it uses and why: this device can't run it, the PC doesn't offer it, or Full chroma is on.
  • Network priority. Audio, microphone and video packets are marked for priority (DSCP) on Android and Linux, and the control connection on Windows, so routers that honor it send them first.
  • VPN and remote PCs. Desktop: a PC reached through a VPN streams as remote, with packets that fit the tunnel. A PC found on your network also gets its internet address, so it can be reached away from home when its router forwards the ports. At home Nightjar keeps using the local address, also after the PC was reached remotely.
  • Pin a PC to one address. A pinned address stays when the PC is found again on the network; Automatic brings back the usual choice.
  • Clearer statistics. The overlay shows the bandwidth on the wire, error correction and audio included. "Why did my stream stutter?" says when the network delivers frames in bursts, and on Linux when the receive buffer was capped and how to raise it.
  • Loss-based bitrate (off by default, under Advanced) lowers the bitrate when frames are lost and raises it after clean seconds, within your mobile data limit. The link test before the first bitrate stays off by default, because it started lower with more loss in our tests.

Video and HDR

  • Dolby Vision. With a Dolby Vision screen and decoder, Nightjar asks a Rubylight PC for Dolby Vision 8.1 or 8.4 on HEVC, or 10.1 on AV1 where the decoder handles it, as TCL's MediaTek TVs do. If the decoder fails, the stream goes on as HDR10 or HLG and the overlay says so.
  • HLG. A screen that shows HLG and not HDR10 gets HLG on HEVC, AV1 and PyroWave. Nightjar checks each display before the stream.
  • HDR through Vulkan. "Render through Vulkan" shows HDR10 on Android 10 to 14 instead of tone-mapping to SDR, HLG where the screen takes it, and HDR10+ on a screen that has it. When it can't keep up on a display, a message says so once.
  • Dolby Vision and HLG on Windows. With HDR on, Nightjar asks a Rubylight PC for Dolby Vision (8.1 on HEVC, 10.1 on AV1), and the tone map follows each frame's Dolby Vision brightness data. HLG streams are drawn as HLG for the display's brightness, on HDR and SDR displays.
  • HLG on Linux. HLG pictures from VAAPI, NVDEC and V4L2 are drawn as HLG instead of as PQ.
  • MediaTek TVs such as TCL's. Dolby Vision and HDR10+ now show as such, and HDR streams no longer freeze shortly after they start.
  • A decoder that gives up says so. When the video decoder stops working and can't be brought back, the stream ends with a message that says what failed and what to change, instead of the app closing or the picture freezing.
  • PC display scaling sets the text and interface size of a Rubylight virtual display, on Android and desktop, without changing its resolution: the PC's own scale or 100 % to 500 %, per PC. If you raised PC render resolution to get bigger text, set it back to 100 % and use this instead.
  • Variable refresh on Android. A screen without Android 16's adaptive refresh keeps its top rate unless the game's frame rate would judder there; with a Rubylight PC it then switches to a matching lower rate, such as 90 Hz for a 90 fps game. On screens with adaptive refresh, the stream asks for its own frame rate.
  • HDR brightness. A display that reports no peak brightness gets one estimated from Android's HDR headroom (Android 14 and later), and the display's brightness range now also goes to other hosts at launch.
  • Decoders: Snapdragon decoders get extra low-latency options, MediaTek decoders ask for shorter queues first, and HEVC low-latency flags is now Auto, On or Off. A frame too large for the decoder's buffer restarts it with a bigger one instead of ending the stream.

Audio

  • 7.1.4 surround (12 channels), on Android 12L or later and on Windows where the audio output has 12 channels. Nightjar asks a Rubylight PC that streams 7.1.4 for it; other PCs and outputs keep 7.1.
  • 7.1.4 needs Rubylight 3.0. Against a 3.0 release candidate, Nightjar reads the layout that release used.
  • Sound for your receiver. A Rubylight PC can send PCM, Dolby Digital or Dolby Digital Plus to a receiver, soundbar or TV (Android 10 and newer with the New streaming engine; PCM on the desktop). Opus stays the default.
  • Night mode and Headphone surround in the stream menu, on Android and desktop, when the Rubylight PC offers them and this device may view or launch there. They show the PC's current state, change the running stream right away, and say when the PC's audio settings can't be read. Headphone surround says so when it applies only from the next stream.
  • Fewer crackles at the start on phones and handhelds with a small audio buffer: it now starts at 14 ms instead of 8 ms on a Retroid Pocket 6. A Wi-Fi dropout longer than the buffer can cover no longer raises the audio delay for minutes.
  • Steadier sound on patchy Wi-Fi. A gap is filled in from the sound before it, and audio that arrives late is skipped, so latency stays where it was. On MediaTek TVs, late audio after a Wi-Fi stall is cut back in one step: on a TCL TV, dropped audio fell from 233 to 34 in a minute, with the same latency.
  • Microphone (#42): echo cancellation, noise suppression, automatic gain and a gain slider on Android, and a round button that mutes with one tap. Desktop: echo cancellation, on by default (Windows turns it off for headphones and headsets), and the stream says when it is off.

Co-op, clipboard and files

  • Join co-op in a PC's menu (Android) or on its details page (desktop) lists the PC's co-op games with their free slots, joins one or returns you to yours, and shows the PC's reason for any refusal. End session and Disconnect work for a co-op player too.
  • Clipboard sync (off by default): text copied here goes on the PC's clipboard and back, without opening the stream menu. The stream menu copies images both ways. Desktop: files you copy stay on this computer's clipboard.
  • Files and shared folders. Send files to a PC and download from it, from the PC menu, Home, the stream menu, or by sharing files to Nightjar. Browse the folders a PC shares with this device, download, and with a write grant upload.
  • USB forwarding (off by default): hand a USB device such as a drawing tablet to the PC from the stream menu or the desktop's stream controls. On Linux, webcams and USB audio devices work too, through your distribution's usbip tools.

Input and controllers

  • The keyboard follows text fields on a Rubylight PC: digits for number fields, no suggestions for passwords, and the stream moves up so the field stays visible. Nightjar also tells the PC its keyboard layout.
  • Send system keys (Android, on by default): Esc, Alt+Tab and the Windows key go to the PC, and a keyboard's Back key sends Esc. Alt+Tab and the Windows key need Android 16 QPR2 or newer, or many Samsung devices (#50).
  • Back button as Guide (Android) for handhelds such as the Retroid Pocket: Back on the built-in controls sends Guide (#49).
  • Choose the controller combination that leaves the stream. Off by default on Android; Start+Select+LB+RB stays the default on Windows and Linux. The stream menu also has a Controller mouse switch.
  • Modern on-screen controller, beside Classic: face buttons that take two at once, floating or fixed sticks, and an in-stream editor for each control.
  • Extra controller buttons (#45) can press the touchpad click, Share or paddles on the PC.
  • Pair with a QR code. Scan the code on the PC's Devices page (Android) or paste its link (desktop). A used or expired code says to show a new one.
  • A confirmed game switch. Starting a game while another runs on a Rubylight PC closes the running one only when you confirm.
  • The PC's cursor no longer flickers when it changes shape, and the local cursor works with PCs that capture with Desktop Duplication.

Android and TV

  • Launchers stay in sync. "Add games to a launcher" now updates the export by itself when a PC's games are added, renamed, removed or hidden, with "Stop syncing" in the PC's settings (#37).
  • Touch feedback. The PC keyboard, sliders, switches and the PCs and Settings buttons answer a tap with a light vibration, following Android's setting (#44).
  • Opening the stream settings no longer freezes on devices whose decoder list is slow to read.
  • Sharing files into Nightjar from another app lists your PCs instead of closing the app.
  • Android TV: a PC's settings follow whether it answers, TVs no longer show mobile data rows, Up and Down move one row at a time, and focus rings stay inside the screen.

Desktop (Windows and Linux)

  • Installers. A per-user Windows installer with a Start menu entry and updates in place, and .deb, .rpm and AppImage packages for Linux. The AppImage brings its own libva, so it starts on systems without one.
  • Frame pacing choices for displays without VRR: Lowest latency (the default, as before), Balanced, Balanced with FPS limit and Smoothest video.
  • PIN lock, as on Android: a 4 to 8 digit PIN to open Nightjar, to start any stream, or to start one on selected PCs, asked again after a time you choose. The PIN is stored only as a salted hash, and wrong tries lead to growing waits. If the PIN file is damaged, the lock screen names it and stays locked until you delete it.
  • Screen readers. Narrator, NVDA and JAWS on Windows, and Orca on Linux, can read and use every menu.
  • Controllers in the menus. Holding the D-pad or a stick keeps moving through lists, and hints show PlayStation, Switch or Xbox names for the connected controller.
  • Alt+F4 goes to the game while streaming. The quit shortcut and the close button still end the stream.
  • More resolutions, from 360p to 5120x1440 ultrawide, and a Custom entry for any size or frame rate.
  • Performance overlay in Compact, Statistics and Debug modes, in any corner, with the PC's frame rates at each step where the PC offers them.
  • Colour. 10-bit color (SDR) no longer ends the stream on an SDR screen, and Prefer YUV 4:4:4 streams sharper coloured text where the decoder and the PC handle it.
  • Quick resume goes straight back into a running game, and Input-only works with any PC.
  • A dropped stream reconnects while the window is behind another one, and Nightjar opens where it was closed.
  • Nightjar checks once per launch for a newer release (it only tells you; turn it off under App).

Desktop on Windows

  • AI enhancement, a new upscaling choice, uses the graphics card's own video upscaler (NVIDIA RTX Video Super Resolution, Intel's video super resolution or AMD's video upscaler). On NVIDIA with an HDR display it also turns SDR streams into HDR. It is listed only where the card supports it.
  • HDR tone mapping per frame, following the stream's HDR10+ data or the picture's measured brightness, so bright and dark scenes keep their detail on dimmer displays.
  • VRR on a fixed-rate display. A fullscreen stream below about 70 % of the display's rate switches to V-Sync instead of tearing, and the overlay says so. Exclusive fullscreen with VRR asks for the display's highest refresh rate.
  • Touchpad gestures on the PC (off by default) sends a precision touchpad's fingers to a PC that takes them.
  • nightjar.exe carries the Nightjar icon (#41), and a crash writes a dump to the logs folder.

Desktop on Linux

  • More hardware decoding. V4L2 on ARM handhelds and boards (H.264 and HEVC) and NVDEC on NVIDIA GPUs, after VAAPI and before software. The log says why each one it skipped did not start.
  • VAAPI without a copy. 8-bit pictures go from the decoder to the screen without passing through the CPU, with the OpenGL renderer.

Settings and design

  • Each settings section opens on the settings most people change, and search finds every other one.
  • Shared colours with the Rubylight console: green for live, yellow for a warning, red for poor, always with a word and a shape. Every text colour meets 4.5:1 contrast.
  • Tell the PC when on Wi-Fi, Tell the PC the link speed and the link test moved to Advanced, Diagnostics.

Fixes

  • Automatic recovery no longer ends a stream it just recovered when the PC ended the connection during the start.
  • A reconnect after another device started a game no longer names the wrong game.
  • A Remote Monitor session no longer opens the microphone.
  • Transfers survive a theme, font or language change, and a download never overwrites another file.
  • A PC you remove no longer comes back as offline.
  • Desktop: unchecked boxes in the stream menu show their box again, so switches that are off no longer look like plain labels.
  • Android: two decoder threads could wait on each other after a failed recovery and freeze the picture; they no longer do. A PyroWave stream could show no picture because its statistics ran out of memory; they no longer do.
  • A decoder crash writes the decoder's name, the video format and the frame counts to the log.
  • Android behind a VPN: looking up the internet address no longer moves a running stream off the VPN.
  • A controller that can't be opened, or one past the 16 the PC takes, shows a message, and a gyroscope that reports only zeros hands player 1 to the device's motion sensors.
  • A damaged clipboard image no longer crashes clipboard sync, and pairing from a PC's menu no longer polls the PC while you type the PIN.

Tested. Lint, the Android unit tests, the Rust protocol tests and the desktop checks pass in CI on this build. Against a Rubylight 3.0 PC with an RX 7900 XT:

  • Retroid Pocket 6 (Android 13) over Wi-Fi at 1080p120: about 120 fps with HEVC at the default 28 Mbps, and 119.6 to 120 fps shown with PyroWave at its default bitrate, with about 1.7 ms per frame for PyroWave's decode steps. On this device's stereo output, 7.1.4 stays hidden, and a saved 7.1.4 asks the PC for 7.1.
  • Night mode from two devices: the Retroid and Nightjar for Windows on the Radeon 780M laptop, streaming from one PC, each switched their own stream and read back their own state.
  • Nightjar for Windows on the laptop: a PC added fresh kept its local address and learned its internet address apart from it; the stream had no health findings over 30 samples, 0 % loss and no dropped frames.
  • PIN lock with a damaged file (Nightjar for Windows): the lock screen named the file and stayed locked; after the file was deleted, Nightjar opened within about a second.
  • Nightjar for Linux (built on the NUC): 774 tests passed and the release build succeeded.

The APKs are signed by CI with the Nightjar release key; the desktop packages (Windows installer and zip; Linux .deb, .rpm, AppImage and tar.gz) are not signed. SHA-256 hashes of everything are in SHA256SUMS-4.0.0.txt.

Don't miss a new nightjar release

NewReleases is sending notifications on new releases.