Nightjar 5.0.0 is the client for Rubylight 4.0, on Android, Android TV, Windows, Linux and macOS. It covers everything since Nightjar 4.0.0, from 4.0.1 to 4.12.9 and the changes since. It brings Frame Warp, one settings layout on phones, TVs and computers, a new look, Dual screen mode, a running game that moves between your devices, Nightjar for macOS, and decoding that keeps pictures on the GPU. Frame Warp, Dual screen mode and the PC controls need a PC with Rubylight; with any other Moonlight host Nightjar works as before, and Home on the desktop now shows its games too.
Highlights
- Frame Warp. With a Rubylight PC, a mouse or right-stick camera turn shows on the next refresh of your screen, and the game's HUD stays in place.
- One settings layout everywhere. The same eight sections, names and order on Android and desktop, with rarely changed rows folded under More.
- A new look. Moonlit glass on phones, handhelds, TVs and the desktop, with nothing drawn over your game unless the stream menu is open.
- Dual screen mode. A device with a second screen streams a second PC screen on it.
- Move a running game between devices. Continue here takes the game to this device in one press; Stream here too shows it on both.
- Your PC from Nightjar. Restart, shut down or update the PC, approve a new device, use this device as the PC's microphone with no picture, and see NVIDIA's driver settings in the stream menu.
- Nightjar for macOS, Linux packages for ARM handhelds and boards, and a Flatpak for the Steam Deck.
- Pictures reach the screen sooner. PyroWave decodes sooner on Android, lost packets are rebuilt 12 to 17 times faster, Linux keeps pictures on the GPU, and Windows decodes YUV 4:4:4 in hardware.
Frame Warp
- Camera turns on the next refresh. Frame Warp (Video, off by default): with a Rubylight PC, a mouse or right-stick camera turn shows on the next refresh of your screen. Each picture is shifted by the turn the PC has not drawn yet, and the game's HUD stays in place. It needs the New streaming engine.
- Where a shift uncovers the edge of the picture, Nightjar mirrors the picture back in and darkens it slightly, instead of stretching the outermost pixels.
- On Android it works with the Vulkan, OpenGL ES and PyroWave renderers.
- On Windows, Linux and macOS it works with every presenter, and a 60 fps stream turns at the screen's own rate on a faster screen.
Streaming
- Show frames at the PC's frame times is about 5 ms faster, close to Lowest latency, on hosts with phase lock such as Rubylight. On 60 Hz screens it no longer builds delay up to 50 ms at 60 fps, and about 3x fewer frames land more than 8 ms off.
- Balanced no longer drops frames when the stream is as fast as the display (about 6% at 120 fps on 120 Hz before).
- Take back display queue delay (Android, on by default, beside Frame pacing): in Lowest latency and Balanced, when the display keeps a frame waiting longer than it needs to, Nightjar drops one frame so the display gives that refresh of delay back.
- Smoothest and the frame rate limit no longer keep extra delay. After a start or a recovery, Nightjar skips one waiting frame at a time until the extra delay is gone, and on the NVIDIA Shield delay no longer builds up for minutes when a stream runs slightly faster than the screen.
- Lost packets are rebuilt 12 to 17 times faster on a desktop PC with the processor's vector instructions, and a packet that was merely late no longer costs a frame.
- Decoder drops are not network loss. A decoder too slow for the stream gets its own "Decoder drops" line, and loss, automatic bitrate and the stream doctor count what the network lost.
- Faster encrypted video. On the new streaming engine, encrypted video (the default over the internet) uses the phone's AES instructions: decryption is about four times faster on a Retroid Pocket 6.
- A PC that shuts down ends the stream at once, a host that restarts is told apart from one that is gone, and a crash recovers.
- Starts that can't finish end with an error. A start waiting for a previous connection to close, or for a PC that never answers the launch, ends with an error instead of waiting forever, and a stop that doesn't end within 10 seconds shows an error.
- The PC says why a stream ended. When the PC ends a stream on an error, Nightjar asks the PC why and shows its answer in the error dialog.
- Automatic bitrate is a switch in Settings: on, the bitrate follows the resolution, frame rate and codec, also the resolution a PC's or game's settings choose.
- Network tests in the main settings. The speed test and the PyroWave frame pace calibration are in Settings › Streaming as well as in each PC's own settings. The connection test shows ping, jitter and loss next to the speed.
- With the new streaming engine on a slow or jittery connection, controller input no longer arrives late in bursts: the newest stick and trigger state goes out as soon as the connection has room.
- The connection wakes when it needs to instead of 200 times a second, which saves battery during a stream, and video arrives in fewer, larger reads where the system can combine packets.
- Frames split over several error-correction blocks are reassembled as the blocks arrive, and lost blocks are reported sooner.
- A decoder error late in a long stream is recovered again, and a decoder that stops taking input is reset once before the stream ends.
Video, HDR and full chroma
- PyroWave decodes sooner on Android. With a Rubylight PC, each frame goes to the GPU decoder while it is still arriving, and frames reach the decoder without the copies they took before.
- PyroWave never queues behind a slow decoder. When the decoder is slower than the stream's frame rate, Nightjar skips to the newest frame instead of queuing frames. Skipped frames count as Decoder drops.
- PyroWave on more Android devices. It now also runs on devices with Vulkan 1.1 or 1.2 when the GPU has the features the decoder needs.
- Sharper colored text is one choice, Off or Automatic. Nightjar picks the sharpest way the PC and this device both support, keeps HDR, and says whether the PC or the device is missing it.
- Full chroma checks before the stream starts. A stream that can't have full chroma starts without it and says why, instead of hanging while it starts. When a PC refuses it after the game has started, the stream starts again right away without it.
- Honest hardware decoding. Nightjar checks what the hardware decoder can decode before the stream starts. AV1 or HEVC chosen on a device that can't decode it streams the next best codec it does decode, and Nightjar says which.
- Faster recovery on desktop. HEVC and AV1 on D3D11VA, VA-API and software decoding ask the PC to stop referencing a lost frame instead of waiting for a full key frame, and a damaged frame asks for a fresh picture.
- Fewer copies on Android. The new streaming engine hands frames to the decoder with one copy fewer, and the Vulkan renderer lets the GPU wait for each decoded frame.
- AV1 from AMD graphics keeps sharpening and upscaling at sizes the PC sends with a few extra rows or columns, such as 1920x1080 or 1872 wide.
- Odd stream sizes such as 2184x1968 no longer show a strip at the edge with AV1 on desktop.
- 4K streams at high bitrates start with an input buffer large enough for a keyframe, so the decoder no longer restarts mid-stream to grow it.
- Desktop video decoding uses FFmpeg 8.1.3.
PCs, games and devices
- Dual screen mode. On a device with a second screen, a second stream of the same game runs on it, at that screen's own size or a fixed resolution. Sound, controllers and the microphone stay with the main screen. On the desktop, the second stream opens full screen on the other monitor. It needs Rubylight 3.11.0 or newer on the PC.
- Continue here. Select the game another device is playing, and Nightjar says where it is playing, with Continue here, Stream here too and Cancel. The other device's stream ends, the game keeps running and the picture comes to you. A device whose stream moved shows "Now playing on" the new device, with Continue here to take it back.
- Approve a new device. A paired device with Approve new devices or Host control approves a new one: Home shows who wants to pair, and you enter the PIN that device shows, with a controller too.
- Pair with a link. Scan the PC's QR code with any camera app, tap the link, or choose Open in Nightjar on the host's Devices page. Nightjar names the PC and its address and pairs when you choose Pair.
- Open straight into a game. When Nightjar opens: Home, Show my PCs, Continue my last game or A chosen game. A 3-second countdown names the game and the PC, with Cancel focused, and an offline PC is woken before the game starts. On Android, long-pressing the app icon offers Continue with your last game.
- Restart, shut down or update the PC from its menu, on hosts that allow it for this device, with a warning before a shutdown when the PC may not wake from off. Nightjar waits until the PC is back on the new version.
- Driver settings in the stream menu. The stream menu's graphics settings now show NVIDIA's driver settings, such as Low Latency Mode and Max frame rate, when the host streams with an NVIDIA GPU.
- Home groups by your collections. Choose Collection under View, Group by, to group Home by your Steam collections and Playnite categories. Group by Type keeps your other apps apart from your games.
- A List layout on Home. A line per game with a small cover, its store and when you last played it, with touch, a D-pad or a controller.
- View options on Home. Show games as a grid or in rows, grouped by store or as one library, at a small, medium or large card size.
- Hide a game on this device from its long-press menu, on Android, Windows and Linux. All games has a Hidden chip that brings it back.
- Home shows every paired PC's games on the desktop, also from other Moonlight hosts, with box art, Play, Resume and Quit, favourites and hidden games. The last app list is kept, so Home works while the PC sleeps.
- A paired PC that is off shows on Home as an offline card with Wake, and a PC that does not answer within 10 seconds shows as offline instead of Home loading on.
- A game without a cover shows its title instead of a grey tile, and a game on a PC that is asleep or offline no longer shows as running.
- The PC list shows a Rubylight update from the PC's own answer where the host offers one.
Settings and look
- Settings share one layout on phones, TVs and computers: the same eight sections, names and order on Android and desktop, with rarely changed rows folded under More.
- One choice where there were several. Controllers (Off, One player, A player each) and When Nightjar opens are one choice each. Your current settings carry over.
- Settings that fit. A setting that depends on another appears while that one is on, and a setting that can't work on this device or PC isn't offered.
- One set of words everywhere: Wake up, PC instead of host, and Online, Offline or Not paired.
- Moonlit glass everywhere. Home, PCs, the game grid, game pages, Settings, dialogs, the PIN pad, pairing, connecting and the stream menu share one design, with System, Dark and OLED themes and a plain look for high contrast. The blur steps down to a still one where the GPU can't keep up.
- Glass that reads. The stream menu, dialogs, keyboards and statistics share one glass and stay readable over bright or HDR games.
- A new stream menu, the same on Android and desktop: a panel of compact tiles with the game and the stream's mode on top. Disconnect and Quit game stay at the bottom; End session sits under More, and its question says what it does.
- Thicker sliders in the settings, the stream menu's bitrate dialogs and the desktop controls, with their values shown above the thumb while you move them.
- Button hints follow what you used last: remote, controller (with PlayStation labels on Sony pads) or keyboard, and none for touch.
- The PIN pad and the pairing code show on their own background.
- Confirmations that end a game, a session or a pairing start on Cancel, and Play on Home asks before it closes a game that is already running.
- Turning, folding or splitting the screen rebuilds the layout for the new shape.
- Every screen got a pass for spacing, alignment, wording and controller focus, and covers fill their frame.
Sound and microphone
- The PC's microphone, with no picture. From a PC's menu, Nightjar sends this device's microphone to the PC with no stream, while the screen is off or another app is open. On Android it runs with a notification and its Stop; on Windows and Linux it runs in a small window with Mute and Stop.
- Echo cancellation that works. Nightjar's own echo canceller takes the stream's sound out of the microphone, fed with exactly what Nightjar plays.
- A clearer microphone. It is sent at 64 kb/s instead of 32 kb/s on Android, and on desktop it gets the same settings, including the error correction that fills in a lost packet. Desktop adds noise suppression (on by default) and automatic gain.
- No more audio drift. When the device's audio clock runs a little slower than the PC's, Nightjar trims the extra audio one packet at a time with a short fade, instead of letting latency creep up by up to 40 ms and then cutting a packet with a click.
- Mute audio under Settings › Audio streams without sound on this device; the microphone and Play audio on the PC keep working.
- On Android, plugging in headphones, connecting Bluetooth or a USB DAC mid-stream reopens the low-latency audio output on the new device.
- On desktop, audio no longer crackles for a minute when the PC's audio packets start arriving in bursts.
Controllers and input
- Connect as. Pick the controller type the PC sees: Automatic, Xbox, PlayStation or Nintendo.
- Back button as Guide works on every controller, including handhelds whose built-in controls Android lists as an external controller.
- Hold Guide to open the stream menu: holding Guide (or Back, with Back button as Guide) for 1 second opens it; a short press still goes to the PC as Guide.
- Stream hotkeys you can change. Android and desktop share one set of stream hotkeys (Ctrl+Alt+Shift+Tab opens the stream menu, Q disconnects, Z releases input, S shows the overlay), and each can be changed or turned off.
- Your shortcuts in the stream menu. Keyboard shortcuts are tiles beside Task Manager, Alt+Tab, Alt+F4, Start menu, Show desktop, Game Bar and Record that. Add shortcut picks the keys with a controller or touch, your own shortcuts lead in your order, and Move up and Move down reorder them.
- Touchpad gestures on Android. A physical touchpad, such as a keyboard cover's, taps to click (two fingers for a right-click, three for a middle click), scrolls with two fingers and drags when you tap and then touch again, with sensitivity per axis, swapped axes and scroll speed.
- Trackpad (touchpad gestures) touch mode. The touchscreen can use the same gestures as a physical touchpad.
- A WASD stick on the modern on-screen controller holds W, A, S and D, both keys on a diagonal, and vibrates as it enters each.
- The on-screen controller has sticks that move like real ones, a Touchpad button that clicks a PlayStation controller's touchpad on the PC, an opacity per control, and can play as its own player beside real controllers.
- Trigger deadzone sets where triggers start to respond (2% by default) instead of a fixed 13%.
- Vibrate on press covers the modern controller, the WASD stick, both on-screen keyboards, the PC keyboard and the trackpads.
- Finger taps in Multi-touch: three- and four-finger taps can run their actions in Multi-touch mode too, and a finger tap counts when all fingers land together.
- "Use device motion sensors" also works with USB controllers Nightjar drives itself, and controller motion is handled off the main thread.
- On Android, a controller's Y opens a game's options where a card shows it and no longer presses the focused item elsewhere.
- Y, X, LB and RB in the stream menu run the entry you pick.
- A new setting keeps Alt+Tab, the Windows key and similar with your device while the stream is in split screen or a window.
Desktop (Windows, Linux, macOS)
- Nightjar for macOS is a release download for macOS 13 or later, for Apple Silicon and Intel Macs. It streams with VideoToolbox and Metal. The app is not notarized by Apple, so macOS asks once on start; the macOS guide shows how to allow it.
- Hardware YUV 4:4:4 on Windows. YUV 4:4:4 in HEVC decodes in hardware on GPUs that support it, such as NVIDIA RTX and recent Intel GPUs. With "Less color banding (10-bit SDR)" also on, Nightjar asks for HEVC 4:4:4 in 10-bit where the PC and this device support it.
- Choose the graphics card. On a Windows PC with two GPUs, Settings › Video › Graphics card offers Automatic, Power saving and High performance, each with the GPU's name. Automatic switches to the high-performance GPU when YUV 4:4:4 is on and that GPU alone can decode it.
- Windows: sooner at the display's own rate. A stream at the display's own rate reaches the screen 3 to 30 ms sooner on our Radeon 780M laptop, and PyroWave and full-colour pictures go straight to the window.
- Windows: one-click updates in the same folder and with no administrator prompt; the AppImage updates with one click too.
- Windows: system keys reach the PC. With Send system keys on, Alt+Tab, Alt+Esc, Alt+Print Screen, the Windows key and Alt+F4 go to the PC, and Ctrl+Alt+Shift+Tab opens and closes the stream controls.
- Windows: VRR survives a resume. A resumed stream on a VRR monitor stays on VRR at the stream's own frame rate.
- Linux keeps pictures on the GPU. VA-API pictures, full chroma included, go straight into the GPU renderer from the decoder's own memory, Vulkan video decodes on graphics cards without a VA-API driver, NVIDIA pictures are copied on the GPU, and the GPU renderer draws each frame straight into the window.
- Linux HDR. HDR streams present as HDR10 on desktops whose compositor offers it, describe their colours to the compositor at the display's own reference white and peak, and on KDE Plasma 6.5 and later are drawn in the desktop's own HDR format. HDR brightness follows the desktop is a new setting, off by default.
- Linux presents at once. With V-Sync off, pictures go to the display at once, and a VRR stream no longer stutters on a display that isn't running VRR.
- Linux says what decoding is missing. Nightjar picks the decoder for your GPU and driver, and the stream's start says what to install when hardware decoding is missing a piece.
- Linux on ARM and the Steam Deck. Flatpak, AppImage, .deb, .rpm and tar.gz for aarch64, with PyroWave; a Flatpak in every release that opens fullscreen under gamescope and works with a controller alone; and packages that run on glibc 2.35 and newer.
- A new desktop launcher with a row per store on Home, menus by the card, a Help page (F1 or ?) with every keyboard shortcut and your controller's buttons, and menus in 15 languages.
- Desktop catches up with Android. Theme (System, Dark or OLED black), Presets, About with every license notice, Check for updates now, Report a problem with personal details removed, latency benchmark, Export latency CSV, average decode time after a stream, keeping just the newest frame, and small box art.
- Starting a game fills the window with its cover while the stream connects. If the start fails, Try again, Stream settings and Test the network are right there.
- PC cards show the game they run or last ran, libraries load with placeholder covers, and the top bar stays readable while a page scrolls.
- Nightjar can shut down, restart or put the PC it runs on to sleep from Home, and "Start Nightjar when I sign in" starts it with Windows or Linux.
- The wheel scrolls Nightjar's pages straight away, also before the pointer moves.
Android and TV
- Nightjar from Google Play updates through Play. The Play build has no in-app updater and does not ask for permission to install apps. The download from GitHub keeps its own updater.
- Adaptive refresh (VRR) can be turned on where Android 16 and the screen support it; elsewhere the setting is greyed out and your choice is kept.
- Ready the decoder for folding sits in Streaming, next to Dual screen, and covers foldables whose cover and inner screens are separate displays, such as the Galaxy Z Fold7.
- Thermal protection is a setting, off by default: device heat no longer halves the bitrate or lowers the resolution unless you turn it on.
- Send to PC works with a TV remote, and Report a problem can send the report straight to the PC.
- All games on TVs and handhelds has Home's PC switcher and search.
- Dialogs and sheets blur the page behind them, also on phones whose Android has no system window blur.
- An optional floating menu button opens the stream menu and stays where you drag it.
- AV1 on MediaTek TVs and sticks no longer shows rainbow colours, HEVC no longer freezes on Fire TV devices with Amlogic decoders, and the Xiaomi FX Mini LED Fire TV starts with low-latency decoding off to avoid coloured blocks.
- Below Android 11, the Android low-latency switch works.
- On a TV, Settings are more compact, the statistics overlay stays one column along the left edge, and VRR keeps a 4K stream at 4K when the TV's top refresh rate comes at a smaller resolution.
Fixes
- Play and Resume on Home answer a single tap after you used a controller.
- The app no longer freezes on quitting a stream or pressing Home when a controller's battery or rumble is slow to answer.
- Disconnect and Quit no longer freeze or crash the app when the decoder is restarting at that moment.
- HDR streams on the Vulkan renderer no longer come back from the home screen with washed-out colours.
- A game cover Android can't read no longer closes Nightjar.
- A stream this device can't show in full chroma starts without it instead of hanging while connecting.
- A PC or game setting that turns VRR off gets its frame pacing back, and Reset all settings also resets touch mode and video scaling.
- A damaged passthrough audio frame is dropped instead of growing in memory.
- On desktop, a value a newer version wrote no longer costs the paired PCs and every other setting.
- On desktop, a PC that answers on a second port no longer shows up twice, and a PC found on the network is no longer merged with a different PC at the same address on another port.
- Streams no longer end when a handheld's hardware decoder fails to start: Nightjar moves to the next decoder or to software decoding.
- On Windows, when 4:4:4 can't be decoded, Nightjar no longer suggests switching to the same GPU it already uses, and on laptops with two GPUs it names the one that can.
- Your shortcuts in the stream menu hold their keys for a moment, so the Steam overlay and games that read keys once a frame see them.
Tested. Against Rubylight on the RX 7900 XT PC:
- Frame Warp with Rubylight 4.0 over loopback, with a test game that takes 50 ms to show a turn, streamed at 2560x1440 and 60 fps: over two runs Frame Warp took the picture's distance from where the mouse said it should be from a median of 64.9 px to 1.4 and 2.2 px (p95 184.2 to 10.6 and 13.4 px), 96% of it removed. In Assassin's Creed Black Flag Resynced it learned the camera while turning and kept the HUD in place on a Retroid Pocket 6 (Vulkan) and in Nightjar for Windows on a Radeon 780M laptop.
- Retroid Pocket 6 at 60 Hz: Show frames at the PC's frame times took 27.8 ms (median) and 31.0 ms (95th percentile) from the PC to the screen instead of 33.0 and 41.0 ms. Echo cancellation removed 25 dB of a test signal against 6.6 dB with Android's canceller.
- Retroid Pocket 6, Balanced: at 120 fps on its 120 Hz display it dropped no frames (5.5 to 5.9% before), and the median from a frame's arrival to its display fell from 6.2-8.0 ms to 2.1-2.2 ms.
- PyroWave on the Retroid at 1080p60 and 400 Mbps: the time from a frame's last packet to its decoded picture fell from 3.5-3.8 to 3.0 ms (p95 6.0 to 3.4 ms).
- New streaming engine on the Retroid, 1080p120 at 40 Mbps with the CPU loaded: HEVC receive to present p95 2.41 to 2.21 ms, decoder drops 0.30 to 0.20 %; the Vulkan renderer's GPU wait cut decode-to-present p95 from 1.92 to 0.95 ms.
- Radeon 780M laptop, Windows: with a stream its decoder could not keep up with (7168x4032 at 120 fps), skipping to the newest PyroWave frame took the delay from the PC's frame to the present call from 88 to 90 ms to 34 ms at the median. At 2880x1800 and 120 fps, presenting a picture took 0.07 ms of CPU instead of 0.19 ms.
- Desktop with 5 % packet loss (HEVC 1080p60, 150 Mbps): a frame's median time from arrival to the screen fell from 3.66 to 3.39 ms.
- Intel NUC (Iris Plus 655), Linux: 4K60 HEVC ran at 60 fps at 36 % CPU against 50-60 fps at 110-116 % before VA-API pictures were mapped into the GPU renderer; at 3840x2160, 60 fps, HEVC 10-bit, decode to present fell from 1.95-1.98 to 1.60-1.63 ms at the median, and present to screen from 1.66 to 1.08 ms.
- Windows VRR: on an Odyssey G93SC, 4.5.0 fell to V-Sync when a 120 fps stream resumed in 2 of 2 runs, and the fix in 0 of 2.
- Desktop Nightjar on Windows: a 15-minute 1440p120 stream showed 109,020 frames with none dropped.
- Dual screen on a Retroid Pocket 6 with a simulated second display: two streams ran side by side, each with its own resolution and bitrate changes, and a Wi-Fi drop reconnected both.
- Not run here: HEVC 4:4:4 hardware decoding on an NVIDIA or Intel GPU, and NVIDIA driver settings on an NVIDIA host.