Repository navigation
Releases: CoderDayton/nightcap
Releases · CoderDayton/nightcap
Release list
Nightcap continuous
Automated build of main at 83ebb9c6 (2026-10-18 05:09 UTC).
Untested and unreleased. Use a tagged release for normal play.
Packages are versioned 0.3.4+r31.g83ebb9c.
Commits since the previous nightly
- update(packaging): drop the unreleased changelog from nightly notes (
83ebb9c)
Nightcap v0.3.4
Added
- The AppImage build now makes a
.zsyncfile, so tools likeappimageupdatetoolcan update the AppImage. - The desktop side panel menu now shows by default on PC profiles. Set
FIntFlyoutTestVariantRollout12in
fflags.jsonto change it.
Changed
- The Flatpak build asks for the X11 socket only when there is no Wayland session, as before 0.3.3.
- Nightcap now uses Wayland on a Wayland session with NVIDIA drivers too, however it is started. It used to
fall back to X11 there when started from a terminal. - Building Nightcap no longer needs libexecinfo.
Fixed
- Fixed Roblox 2.742 being rejected as an update, which left the game on the older version. Nightcap now
accepts Roblox versions that change the order of their start-up steps. - Fixed Nightcap reporting Mocktail's version number, 1.0.4, in session logs and support bundles. It now
reports its own version. - Fixed the old Roblox home screen showing instead of the new one with the Me tab and the "For you" and
"Charts" tabs. Nightcap now runs the Roblox start-up step that loads the new interface for your account. - Fixed anti-aliasing being forced off at every graphics quality level. Roblox now picks it, and a
FIntDebugForceMSAASamplesvalue infflags.jsonstill applies. Thanks to @qutad. - Fixed the voice chat microphone only working on Roblox 2.738. It no longer depends on one Roblox version.
- Fixed other players not hearing you in voice chat after a Roblox update. The updater now rebuilds the
audio device data when the previous version's profile has none. - Fixed frame hitches while textures load on graphics cards that need ETC2 textures decoded on the CPU.
- Fixed problems on Chimera Linux and other musl systems, including error messages that differed from the
ones Roblox expects. - Fixed the nightly AppImage build failing when a bundled GTK 4 was older than the one libadwaita needs.
- Fixed a random crash on Wayland with NVIDIA drivers, where the game window closed after you let go of the
camera or left mouse lock. The log showedwp_linux_drm_syncobj_surface_v1error 3. - Fixed some menu actions being ignored. The Chat button on a profile now opens the Party tab with that
player, and clicking a search suggestion now runs the search instead of closing the search menu. - Fixed possible crashes when the game calls an Android function Nightcap did not provide, or releases the
same reference twice. - Fixed a possible hang on close when a web view process stayed open. Nightcap now stops waiting for the log
writer after 2 seconds. - Fixed a possible missing picture on graphics drivers that reject the low-latency present mode. Nightcap now
retries with the game's own mode. - Fixed a possible Wayland crash when the window first appears on the OpenGL graphics path.
- Fixed a missing picture on machines where the graphics card runs a different driver than the one Nightcap
picked, such as an NVIDIA card on nouveau or a laptop with an Intel chip and an older second card. Nightcap
now picks the Vulkan driver that matches the running kernel driver, and says so when no card can run Vulkan.
Nightcap v0.3.3
Flatpak on NVIDIA with a Wayland desktop: this release's Flatpak can
start on X11 (XWayland) instead of Wayland. To keep Wayland, run this once:flatpak override --user --env=SDL_VIDEODRIVER=wayland,x11 io.github.CoderDayton.nightcapTo undo it:
flatpak override --user --reset io.github.CoderDayton.nightcap.
The next release goes back to Wayland by default.
Added
- Joining a friend from a Roblox "follow user" link now works. Nightcap looks
up which game they are in and joins it. - Nix users get a desktop entry for the app.
Changed
- Roblox textures now decode about 3 times faster, which shortens the stalls
when a place loads and when new parts of the map stream in. Thanks to
@glook9001.
Fixed
make update-robloxno longer deletes your previous Roblox install when an
import fails partway through. If a step fails, the old files are put back,
or kept in a folder whose path is printed. Thanks to @kimlherme.- A failed Roblox update now restores your previous version's records instead
of leaving them half switched. A damaged version file is rejected instead of
being half read, and a temporary failure to start the startup check no longer
marks a working Roblox build as broken for good. Thanks to @kimlherme. - Fixed a possible crash when Roblox clears its audio queue while sound is
still playing, and a memory leak in lists of objects passed to Roblox's Java
code. Thanks to @kimlherme. - Fixed a possible crash when the text overlay shuts down, a freeze when Roblox
releases the mouse lock while another release is already in progress, and
network lookups that misread Roblox's options. Thanks to @kimlherme. - Fixed the sky sometimes rendering with the wrong textures in the Vulkan
renderer. - Clicking while a Roblox text box has focus no longer closes it. Only Roblox
decides when a click ends typing. - Going to another page in the web view, such as Friends from a profile, no
longer closes the web view. It crashed on every page change on Wayland
systems whose GL setup GTK could not use. - Fixed a crash when Roblox's saved dark or light theme setting was missing or
damaged.
Nightcap v0.3.2
Added
- Performance recordings made with
--profilenow show how busy the CPU was
during each frame, which makes it easier to tell what caused a stutter. - Experimental support for ARM64 (
aarch64) Linux, running Roblox's Android
arm64-v8aclient.
Fixed
- When Roblox asks for a Google Play device check during login, Nightcap now
answers right away that it isn't supported. Before, the "Verifying you're
not a bot" screen waited about a minute for an answer and then sent you
back to the login screen. - Solving a login challenge now closes its window. Before, Roblox's
"challenge completed" signal was ignored and the window stayed open.
Thanks to @glook9001. - Login no longer stalls after you pass a verification check. Before, Roblox
only saw the page's "challenge completed" signal after a one-minute
timeout, so it gave up and the login failed. On a Roblox build Nightcap
can't handle this way, the log says "WebViewProtocol getter not
recognized" and web pages behave as before. - Login check windows and other web pages get 5 seconds to start instead of
3, so a slow start no longer closes them. The log says how long each one
took to open. - Less stutter while joining a game and while textures load in. In Blade
Ball, loading hitches dropped by about half, and the worst one went from
0.8 seconds to 0.55 seconds. - Clicking Play on a private server now joins right away. Before, nothing
happened until you clicked a sidebar tab like Home. - Middle click now reaches Roblox as the middle mouse button.
- Scrolling follows your system's natural scrolling setting.
- Fixed a crash on some x86_64 hosts when Roblox asked about a thread other
than the one making the call. - Roblox updates no longer mix up the ARM64 and x86_64 compatibility profiles
for the same version. - A partial or out-of-range user id in
MOCKTAIL_ROBLOX_USER_IDor
MOCKTAIL_LOCAL_STORAGE_CURRENT_USER_IDis now ignored instead of being
partly read.
Changed
make flatpakandscripts/build_flatpak.shnow build with 2 jobs by
default instead of 4, so a local Flatpak build is less likely to run out
of memory. SetFLATPAK_JOBSorMOCKTAIL_FLATPAK_JOBSto use more.
Thanks to @glook9001.
Nightcap v0.3.1
Added
- Each release carries a DEB, an RPM, and a pacman package beside the
AppImage, with a.sha256for every file. They install/usr/bin/mocktail
and conflict with each other and with upstream'smocktailpackage.
Nightcap is in no distribution repository or the AUR; the recipes under
packaging/aur/nightcap{,-bin,-git}build from this repository locally. - The AppStream metadata lists the Nightcap releases, so software centres
show the release history instead of upstream's.
Fixed
- ETC2 texture decoding no longer blocks the thread that submits the frame.
Uploads decode on a background dispatcher and the submit carries a timeline
semaphore wait, so the GPU waits for the texture instead of the render
thread. Reading the application's compressed bytes moves to that dispatcher
too whenever they are already mapped. In Blade Ball the worst
vkQueueSubmitfell from 140ms to 1ms, its p99 from 4.9ms to 0.05ms, and
the total time spent in submits from 2534ms to 309ms. Frame interval is
unchanged: the remaining tail is the engine's own main-thread step. A device
without thetimelineSemaphorefeature decodes inline as before, as does a
submit whosepNextalready sizes arrays by its semaphore counts. - The mouse pointer jumped when a right-click camera drag ended, and drifted
to the viewport edge during one. The input router inferred pointer capture
from SDL reporting zero absolute coordinates, which holds on X11 but not on
Wayland, where the reported position accumulates the relative deltas and
leaves the window. Motion, button, and wheel events now carry the window's
relative mouse mode. The right-click camera fallback also only captures
inside an experience, so the cursor stays free over the app surface. - Shutting the window down while an experience was starting or leaving could
free the pointer capture owner underneath the thread using it. Callers off
the SDL thread now hold a reference for the length of their call. - The TextBox caret did not move when a trailing space was typed in a
single-line field. The final cluster rect SDL_ttf reports stops at the last
inked glyph, so the laid-out width is used there instead. Wrapped layouts
keep the clamp, because their width is the widest line rather than the last. - Every TextBox keystroke re-ran
TTF_Init, a fontconfig sort, six
TTF_OpenFontcalls, andTTF_Quiton the render thread. The overlay holds
its opened fonts and reopens them only when the Roblox font or the point
size changes, keeping the current set when a reopen fails. Measured over 100
rasters, 1.59ms to 0.12ms per keystroke. - Staged ETC2 copies now carry an explicit host-write barrier. A queue
submission only makes host writes from before it visible to the device, and
an asynchronous decode writes after the submit, so without the barrier those
texels were not guaranteed to reach the copy that reads them.
Changed
docs/PERFORMANCE.mddocuments the GameMode settings to run with. A
desiredgov=powersavein~/.config/gamemode.inioverrides the packaged
performancedefault and clocks the CPU down for the whole session while
still reporting an active performance request.
Nightcap v0.3.0
Added
- Custom Discord presence.
integrations.discord_rpc.text.titlereplaces the
name in "Playing Nightcap", andintegrations.discord_rpc.imagessets the
large and small icons and their hover text. Text and image fields accept
{place_name},{place_icon}, and{creator_name}. A field that expands
an empty placeholder is left out, andtext.state: ""hides the state line. - The default Discord card now matches Sober: the title is "Roblox", the
details line is "Playing ", the state is "by ", and
the Roblox badge sits inside the experience icon. The creator comes from the
same Roblox games request that already fetches the experience name. With
show_place_name: falsethe creator is hidden too, so the card shows only
the title and timer. --profile <file>writes a Chrome-format trace of the Vulkan adapter's
work: presents, GPU waits, submits, ETC2 texture decode, and pipeline and
shader creation. Open it in ui.perfetto.dev.docs/BENCHMARKING.md
describes the benchmark runs, andscripts/summarize_profile_trace.py
turns traces into a before and after table.
Fixed
- Texture uploads stalled the frame they were submitted on. ETC2 batches
decoded on worker threads but were then resampled one upload at a time on
the submitting thread, which at the default 4x upscale is sixteen times the
decoded texels. Resampling now runs on the same worker pool, in two passes so
mip level 0 still resolves before the mips built from it. In a 70k-part
place the worstvkQueueSubmitfell from 167ms to 92ms. - Most ETC2 batches decoded on a single thread. Workers were created and
joined per batch, so the parallel floor had to cover that cost and sat at a
1024x1024 image; batches under it ran on the caller, which was 54% of all
decode time in a 70k-part place. Decode workers are now a persistent pool,
and the floor drops to a 128x128 image. Mean decode time in that place fell
from 8.2ms to 4.7ms, and 11.8ms before both texture fixes. - On CPUs with a wide core-speed spread, Feral GameMode pinned the process to
the few fastest cores, concentrating Roblox's worker pool onto them instead
of spreading it. Withperformance.gamemode: auto, a request that narrows
the CPU affinity is now released again, which releases the pin. Set
pin_cores=noin~/.config/gamemode.inito keep GameMode without the
pinning, orperformance.gamemode: onto accept it. See
docs/PERFORMANCE.md. - With
show_place_name: false, Discord no longer shows the experience
thumbnail or its name on hover. - The host main thread no longer spins on the engine's message pump, which
cost about half a core and 146,000 empty calls a second. It now rests 100 µs
between polls: sleeping when the governor isperformance, parking the
core with TPAUSE on CPUs that have it, spinning otherwise. With GameMode
setting the governor, process CPU in a 60k-part place fell from 216% to
107% at the same 120 fps.MOCKTAIL_ENGINE_PUMP_RESTforces a mode; see
docs/PERFORMANCE.md. - ETC2 uploads with a
bufferRowLengthorbufferImageHeightlarger than
the image read the padded rows as packed data and decoded garbage. - ETC2 resampling created and joined worker threads on every batch. It now
runs on the persistent decode pool. - A failed trace write left the profile writer thread waking every 250 ms
for the rest of the session. It now exits. - The
--profiletrace gains apumpslice for the engine's main-thread
step.
Nightcap v0.2.0
Added
- FAQ covering Discord RPC, log locations, and VR, adapted from upstream.
input.raw_mouseinconfig.yamlsends mouse look deltas in the host's
own units. Turn it on when first-person aiming feels too slow or too fast
under fractional display scaling. Off by default.- Nightly AppImage builds, published as the
continuousprerelease. They are
untested; use a tagged release for normal play.
Changed
- Values in
fflags.jsonnow win over the performance preset instead of
stopping the launch. Startup prints each key it kept. - Discord Rich Presence uses Nightcap's own Discord application, so it shows
as "Playing Nightcap". Terms and privacy pages for it live on the
project site. - Discord Rich Presence is on by default. Set
integrations.discord_rpc.enabled: falseto turn it off. - The AppImage build verifies its reduced dependency packages against digests
taken at build time, rather than a digest list kept in the repository.
Fixed
- Mouse look keeps responding after a long turn. The tracked pointer position
could drift past the edge of the view, which swallowed every reversal until
the mouse travelled all the way back. - Nightcap no longer refuses to start with
cannot lock appStorage. It
created its own credential directory using the process umask, then rejected
that directory for being group writable. Systems with a permissive umask,
such as002, failed on first run.
Nightcap v0.1.0
First Nightcap release, forked from komaruworld/mocktail.
Added
- ETC2 and EAC texture emulation on Vulkan, so games that use compressed
mobile textures render correctly on desktop GPUs. Decoding runs on worker
threads to avoid stutter. - PNG texture overrides in
~/.config/mocktail/textures, keyed by upload
hash, with a dump mode to find the texture you want to replace. - Small textures are upscaled 4x by default. Set
MOCKTAIL_SMALL_TEXTURE_UPSCALE=1to turn it off. - AppImage and signed Flatpak builds on every release tag. The Flatpak repo
is published at https://coderdayton.github.io/nightcap/. - Roadmap in
docs/ROADMAP.md.
Changed
- Frames are presented as soon as they are ready instead of waiting in a
queue, which lowers input latency. - Roblox now sees the real host RAM and display size instead of a low-end
phone profile. - App ID is
io.github.CoderDayton.nightcap, so Nightcap installs next to
upstream Mocktail. The binary and config paths keep themocktailname. - New name, icon, and colors.
- The desktop entry launches on Wayland and points at the installed binary.
Fixed
- Servers no longer kick with error 319 shortly after joining.
- The FMOD output-device bridge is optional, so the updater no longer fails
without it. - The AppImage build no longer fails on stale checksums for the slimmed
Arch packages.