5506 Commits
Author SHA1 Message Date
pajladaandGitHub 3b7aa53d1d plugins: include exhaustiveFlags in clone (#7195)
Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Parent-pr: 7192
nightly-build
2026-08-23 12:51:12 +00:00
NerixyzandGitHub e07c250ba3 feat: Add strong view aliases (#7194)
We have some strong aliases/typedefs like `UserId`, `UserName`,
`EmoteName`, etc. Currently, they wrap a `QString`. In some cases, we
don't want to use owned types. Notably, when looking up items in a map.
There, it would be fine to look them up by `QStringView`. However,
`QStringView` isn't "tagged" to contain a user ID, username, etc.

This PR adds `-View` types as "tagged" versions of `QStringView`. So now
`EmoteName` has a corresponding `EmoteNameView`. The view can be created
from the owned type, and they can be compared to each other.

The containers don't know about this relationship - for example,
`std::unordered_map<EmoteName, V>` doesn't know that you can do lookup
by `EmoteNameView`. To tell them, we need to provide both a transparent
hasher (i.e. a hasher working for both types) and a transparent
comparator. For the hasher, there's `EmoteNameHash` which forwards to
the `QStringView` hash. For the comparison,
[`std::equal_to<>`](https://en.cppreference.com/cpp/utility/functional/equal_to_void)
can be used. See the tests for examples.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-23 12:17:32 +00:00
pajladaandGitHub 036f2c154a messageelement: allow for exhaustive flag test (#7192)
this allows most elements to be configured with the "exhaustiveFlags"
flag which ensures that _all_ of the element's flags must be set in the
context for it to be laid out.
2026-08-23 10:55:10 +00:00
pajladaandGitHub ba23dd6663 clang-tidy: disable misc-static-assert check (#7191) 2026-08-23 12:02:21 +02:00
invisibl3catandGitHub baa5119298 win32: Link against Crypt32.lib when building with vcpkg (#7184)
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-22 14:18:13 +00:00
pajladaandGitHub 60bfea46af contributing: document fluent icons (#7190) 2026-08-22 13:17:48 +00:00
NerixyzandGitHub e16c23f51b refactor: Allocate less in parseTwitchEmotes (#7187)
`parseTwitchEmotes` and `appendTwitchEmoteOccurrences` do some string
parsing. Notably they split the emote range strings
(`<emote-id>:<ranges...>/<emote-id>:...`) into owned `QString`s. They
don't have to do that.

This PR moves the parsing from using `QString`s to `QStringView`s and
using `tokenize` (lazy split) and `splitOnce`. Furthermore, the message
indices are now stack-allocated if possible and use 16 bits (enough for
Twitch messages).

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-22 11:41:50 +00:00
GuiiiandGitHub 986f234eb4 ci: use official download-artifact action (#6954)
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-22 10:41:33 +00:00
NerixyzandGitHub ab02b5911e fix(ci): persist credentials for nightly-build tag (#7189)
The nightly release is failing, because it can't update the tag.
Re-enable `persist-credentials` to make it work.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-21 13:49:32 +00:00
NerixyzandGitHub bf71244ed0 ci: Harden actions and dependabot (a bit) (#7188)
To prevent issues from using GitHub actions and dependabot, I hardened
the workflows using [zizmor](https://docs.zizmor.sh/). There are still
77 open findings. I only applied the ones that are easy wins.

- Pin actions to a commit hash instead of tag - tags are not immutable
(see [`unpinned-uses`](https://docs.zizmor.sh/audits/#unpinned-uses))
- Disable `persist-credentials` on checkout - we don't need it (see
[`artipacked`](https://docs.zizmor.sh/audits/#artipacked))
- Set cooldown on dependabot updates (see
[`dependabot-cooldown`](https://docs.zizmor.sh/audits/#dependabot-cooldown)).
For our own packages, we can manually create PRs.

I left the docker images unpinned, because they're frequently updated,
but zizmor would like to see them pinned as well.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-20 20:58:01 +00:00
b_drinkandGitHub 58f9ff32a2 fix(plugins): Message:append_element(MessageElement) unreachable (#7176)
When passing a `MessageElement` instead of an init table to
`Message:append_element` in a lua plugin, it would error with "Invalid
message type" suggesting that it calls `elementFromTable`, i.e. acts as
if a `MessageElementInit` table was passed.

```

Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-15 23:06:33 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bf87302eb4 ci: bump vmactions/freebsd-vm from 1.5.2 to 1.5.3 (#7163)
Bumps [vmactions/freebsd-vm](https://github.com/vmactions/freebsd-vm)
from 1.5.2 to 1.5.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/83b151f58c6047089f4c80eb5ba2039d158ce093"><code>83b151f</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/e9ea2cef1135a17c880e9ed9956c983d58421ece"><code>e9ea2ce</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/7f9ed700a9d1068fdd604600931b019737d9c783"><code>7f9ed70</code></a>
Bump versions from upstream releases</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/59e13a97c0c998e5f36c10a292ebc91115d531e7"><code>59e13a9</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/f28fc2743d290ed0b5020dca36fb2db6cc9753aa"><code>f28fc27</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/c267d2fbb461730ef00253a968e161e09e955c43"><code>c267d2f</code></a>
Update version to v1.5.2</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/a56f3bab0836eed8238cd15313a0936e1e3cba4d"><code>a56f3ba</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/4a50e076570c30a595e08b5247f2df77ef296bd1"><code>4a50e07</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/ff9b16bb634ef0047e04bf18b61f9ec311f8f544"><code>ff9b16b</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/d6a581b740959e3b804b0711b8fc5200d63e9907"><code>d6a581b</code></a>
Generated from base-vm</li>
<li>Additional commits viewable in <a
href="https://github.com/vmactions/freebsd-vm/compare/v1.5.2...v1.5.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vmactions/freebsd-vm&package-manager=github_actions&previous-version=1.5.2&new-version=1.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-15 12:27:40 +00:00
ArneandGitHub 2bc3fbabcb fix: show window on creation if specified (#7171)
I noticed that the popup window was not shown when choosing `Open
channel in a new popup window` in the right-click menu of the user
avatar in the UserInfoPopup and then found that `createWindow` did not
use `args.show`. This also affected the `/popup [channel]` command.

The bug was introduced in #7058.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
Parent-pr: 7058
2026-08-15 11:47:25 +00:00
NerixyzandGitHub 552792c47f refactor(app): Separate connecting and reload emotes in Twitch IRC server (#7172)
The application now provides a `connect` method to connect to all
required services (i.e. Twitch). Furthermore, the listeners for emotes
are moved to the Twitch IRC server as they belong to it.

Both are intended to make the app usable in an embedded context where
the host already runs the Qt event loop.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-15 10:43:26 +00:00
ArneandGitHub 834a3c6763 feat(commands): add element.copytext placeholder (#7174)
This adds a `element.copytext` placeholder for commands that are executed through the right click menu.

Fixes #7145

Reported-by: pajlada <rasmus.karlsson@pajlada.com>
Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-15 12:00:14 +02:00
NerixyzandGitHub ea0e913af4 feat(plugins): Allow messages to be cloned (#6990)
After #6909, we can clone message elements. With this PR, we can clone
whole messages. The messages are non-frozen afterward, so plugins can
edit their properties and add/remove elements.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-09 11:56:06 +00:00
ArneandGitHub e64e74bcd0 feat: allow opening arbitrary urls with streamlink (#7162)
Reported-by: ContinualDissapointment
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-09 11:12:30 +00:00
NerixyzandGitHub 514ff0b42c feat(plugins): Add signal for context menus (#6961)
This PR adds the ability for plugins to add actions to context menus of
ChannelViews. They can add actions, submenus and separators.

I added the signal to the `WindowManager` to allow plugins to listen to
these events in any channel.

Here's an example plugin:

```lua
c2.windows:on_channelview_context_menu_requested(function(args)
	args.menu:add_action("Testing", function()
		args.channel:add_system_message("Clicked!")
	end)
	args.menu:insert_action(1, "First!", function()
		local msg = "text='" .. args.message.message_text .. "'"
		if args.message_element then
			msg = msg .. " element=" .. args.message_element.type
		end
		if args.split then
			msg = msg .. " split={channel=" .. args.split.channel:get_name() .. "}"
		end
		args.channel:add_system_message(msg)
	end)
	local sub = args.menu:add_menu("Submenu")
	sub:add_action("An action", function() end)
	sub:add_separator()
	sub:add_action("Second one", function() end)
end)
```

Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-09 10:32:03 +00:00
f154a120ca fix(plugins): don't crash on invalid plugin meta (#7166)
This makes our plugin storage use a variant for the different plugin
states:

- UnloadedPlugin (used if the plugin's meta was invalid)
- PluginPtr (a normal valid plugin, which may still contain lua errors)

How to test the crash that doesn't crash with this PR:
Add an invalid permission in your `info.json` file

Co-authored-by: Mm2PL <mm2pl+gh@kotmisia.pl>
2026-08-08 13:07:12 +00:00
038bed19a7 fix: use channel type from IndirectChannel (#7153)
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
Parent-pr: 7092
2026-08-08 11:00:54 +00:00
pajladaandGitHub 714cd09c50 fix: add missing span include (#7159) 2026-08-05 22:32:30 +00:00
491cda1a58 feat(plugins/datetime): Add local/UTC conversion (#7122)
I mentioned in #7096 that it's helpful to convert between UTC and local
timezones. This PR adds methods for this.


Co-authored-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
Parent-pr: https://github.com/Chatterino/chatterino2/pull/7096
2026-08-05 18:47:31 +00:00
VoiceOfGrogandGitHub 0da2c452ba Add voiceofgrog to contributors list (#7154)
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-03 17:17:46 +02:00
f6be3003ed fix: add missing ellipsis to menu items that open dialogs (#6858)
Added missing ellipsis (…) to menu items that open a dialog requiring
user input,
following standard HIG conventions.

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
Tested-by: voiceofgrog
2026-08-02 11:19:08 +00:00
pajladaandGitHub 1ab17263a0 chore: update contributor documentation (#7130) 2026-08-02 10:04:38 +00:00
pajladaandGitHub 9fc250a74a fix: unlock badge sets map before calling pending callbacks (#7148) 2026-08-01 14:31:57 +00:00
pajladaandGitHub dafbbcb608 chore: scaffold setting migration system (#7144) 2026-08-01 13:58:22 +00:00
pajladaandGitHub bac63c22d1 eventsub: add some logging when privileges change (#7143) 2026-08-01 13:05:24 +00:00
ArneandGitHub 3168fbde61 fix: make Notebook::findItem safe (#7137)
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-01 12:15:50 +00:00
NerixyzandGitHub a5117a9c33 build(windows): Enable segment heap if possible (#7142)
With Visual Studio 2026 18.6, Microsoft included a script to easily
enable the segment heap for apps
([blog](https://devblogs.microsoft.com/cppblog/segment-heap-support-for-c-projects-in-visual-studio/)).
The segment heap was already available for some years, but it hasn't
been enabled by default. With the provided script we can add a manifest
to enable it. In my basic testing it reduced the memory usage from
~75MiB to ~70MiB with one tab and 4 messages. So it should be a free win
for us.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-01 11:32:29 +00:00
NerixyzandGitHub e36ec74f07 refactor: move JSON serialization to descriptors (#7138)
The last main part from #6906: Produce the JSON in the descriptors
instead of in the window layout. This mainly moves the content from
`encodeNodeRecursively` into `toJson` functions on the descriptors.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-08-01 10:48:24 +00:00
pajladaandGitHub 3cfdb3b47e chore: label "double click links" setting as pause (#7141)
helps make sure it shows up when searching for "pause" in the settings dialog
2026-07-29 11:27:48 +00:00
NerixyzandGitHub 772c291196 deps: Update libcommuni and use Communi::TagsRef (#7134)
This updates `libcommuni` to include
https://github.com/Chatterino/libcommuni/pull/13 which refactors the tag
handling (see PR for the reasons).

The only change here is the replacement of the map and the lookup
functions.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-26 17:23:17 +00:00
NerixyzandGitHub 1e5dd7363b feat: Set window roles for session restoration (#7058)
This sets the window roles for our windows similar to what I described
in #6655. All roles are prefixed with `chatterino.` to avoid collision
in the case where we're embedded.

- Main Window: `chatterino.main`
- Popups: `chatterino.popup.{id}`
- Emote popup: `chatterino.emote-popup`
- Settings: `chatterino.settings`
- Overlay: `chatterino.overlay`

Right now, you need to pass `-session {session-id}_0` when starting, but
I hope future Qt versions add a way to set the session ID after the
`QGuiApplication` is created. Note that because of this, restoration
won't work out of the box. That's expected. You can see the session
status in the logs of `qt.qpa.wayland`.

Tested with KDE 6.7 and Qt 6.12-beta1.

Closes #6655.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
2026-07-26 13:24:37 +00:00
pajladaandGitHub b97457297b fix: remove hype chat functionality (#7136)
Hype Chat was deprecated by Twitch in 2023

Parent-pr: 6695
2026-07-26 14:47:08 +02:00
pajladaandGitHub 61ea0fde5c refactor: make env::readBool public (#7135)
Parent-pr: 6695
2026-07-26 11:26:52 +00:00
NerixyzandGitHub 45f98a71b0 refactor(window-layout): Build descriptor for serializing (#7092)
It's useful for other components to get a split descriptor from a split
(e.g. chatterino-embed). To avoid differences between the descriptor and
the JSON output (e.g. adding a field to the split data), this makes the
descriptor mandatory. Instead of going `SplitContainer* -> JSON`, we do
`SplitContainer* -> NodeDescriptor -> JSON`. In a followup, I'm going to
add `*Descriptor::toJSON`.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-26 10:34:56 +00:00
NerixyzandGitHub 8f84483330 feat: improve memory usage of FFZ badges (#7126)
FFZ badges consume a decent amount of memory in Chatterino. Before this
PR, they consumed 18.4 MiB.

We can do two cheap optimizations that cut the use in half:
- Use [`QVarLengthArray`](https://doc.qt.io/qt-6/qvarlengtharray.html)
to store the badges for a user instead of `std::set`. `std::set` always
allocates, even if there's only one badge. Since most users only have
one, we create many small allocations. With `QVarLengthArray<T, N>`, `N`
elements are stored inline. This reduced the memory usage to 11.9 MiB.
- Use `boost::unordered_flat_map` instead of `std::unordered_map`.
Because of relaxed requirements for the Boost map, it doesn't need to
store as much auxiliary data. This reduced the memory usage to 9.3 MiB.

A further optimization could be the use of a
`boost::container::flat_multimap<std::string, int>`. This gets us to 4.6
MiB. I haven't measured the performance of this. We'd have to assume
that FFZ returns us unique users per badge. The comparison with
`QString` for the lookup can be done by comparing `QString <
QLatin1StringView` (as we know badge IDs are latin1).


Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-25 15:30:52 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Rasmus Karlsson
5cee1b78d1 ci: bump Chatterino/msvc-dev-cmd from 2.0.5 to 2.0.7 (#7101)
Bumps
[Chatterino/msvc-dev-cmd](https://github.com/chatterino/msvc-dev-cmd)
from 2.0.5 to 2.0.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/chatterino/msvc-dev-cmd/releases">Chatterino/msvc-dev-cmd's
releases</a>.</em></p>
<blockquote>
<h2>v2.0.6</h2>
<h2>What's Changed</h2>
<ul>
<li>Remove amd64_arm from build workflow by <a
href="https://github.com/Wissididom"><code>@​Wissididom</code></a> in <a
href="https://redirect.github.com/Chatterino/msvc-dev-cmd/pull/3">Chatterino/msvc-dev-cmd#3</a></li>
<li>Update some ilammy's to Chatterino in README.md by <a
href="https://github.com/Wissididom"><code>@​Wissididom</code></a> in <a
href="https://redirect.github.com/Chatterino/msvc-dev-cmd/pull/2">Chatterino/msvc-dev-cmd#2</a></li>
<li>Use a PowerShell composite action instead of NodeJS by <a
href="https://github.com/Wissididom"><code>@​Wissididom</code></a> in <a
href="https://redirect.github.com/Chatterino/msvc-dev-cmd/pull/5">Chatterino/msvc-dev-cmd#5</a></li>
<li>Normalize indentations to 4 spaces by <a
href="https://github.com/Wissididom"><code>@​Wissididom</code></a> in <a
href="https://redirect.github.com/Chatterino/msvc-dev-cmd/pull/6">Chatterino/msvc-dev-cmd#6</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Chatterino/msvc-dev-cmd/compare/v2.0.5...v2.0.6">https://github.com/Chatterino/msvc-dev-cmd/compare/v2.0.5...v2.0.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Chatterino/msvc-dev-cmd/commit/5e15a285487363708f5bc6a135fd434bd20d22a6"><code>5e15a28</code></a>
Normalize indentations to 4 spaces (<a
href="https://redirect.github.com/chatterino/msvc-dev-cmd/issues/6">#6</a>)</li>
<li><a
href="https://github.com/Chatterino/msvc-dev-cmd/commit/7e0343fa431e4345b6215a4c2681980c3602f67f"><code>7e0343f</code></a>
Use a PowerShell composite action instead of NodeJS (<a
href="https://redirect.github.com/chatterino/msvc-dev-cmd/issues/5">#5</a>)</li>
<li><a
href="https://github.com/Chatterino/msvc-dev-cmd/commit/ca6e1c6fe2653f6fae90ebd04d38fced8b53259e"><code>ca6e1c6</code></a>
docs: update some ilammy's to Chatterino in README.md (<a
href="https://redirect.github.com/chatterino/msvc-dev-cmd/issues/2">#2</a>)</li>
<li><a
href="https://github.com/Chatterino/msvc-dev-cmd/commit/579e4881d4df6b285c4f683fc07fc8f19006977d"><code>579e488</code></a>
ci: remove amd64_arm from build workflow (<a
href="https://redirect.github.com/chatterino/msvc-dev-cmd/issues/3">#3</a>)</li>
<li>See full diff in <a
href="https://github.com/chatterino/msvc-dev-cmd/compare/v2.0.5...v2.0.6">compare
view</a></li>
</ul>
</details>
<br />

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
2026-07-25 14:40:14 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
d64ad573d8 ci: bump actions/setup-python from 6 to 7 (#7123)
Bumps [actions/setup-python](https://github.com/actions/setup-python)
from 6 to 7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-python/releases">actions/setup-python's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Migrate to ESM and upgrade dependencies by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1330">actions/setup-python#1330</a></li>
<li>Pin SHA commits and update docs with latest versions by <a
href="https://github.com/HarithaVattikuti"><code>@​HarithaVattikuti</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1338">actions/setup-python#1338</a></li>
<li>Remove the pip-install input by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/1336">actions/setup-python#1336</a></li>
</ul>
<h3>Bug Fix</h3>
<ul>
<li>Fix to Classify stderr warning messages as warnings instead of
errors in annotations by <a
href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1335">actions/setup-python#1335</a></li>
<li>Validate and retry manifest fetch to prevent silent failures by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1332">actions/setup-python#1332</a></li>
</ul>
<h3>Dependency Upgrade</h3>
<ul>
<li>Bump certifi from 2020.6.20 to 2024.7.4 in
/<strong>tests</strong>/data by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1328">actions/setup-python#1328</a></li>
<li>Remove EOL Python versions and Bumps numpy text fixture by <a
href="https://github.com/priya-kinthali"><code>@​priya-kinthali</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1333">actions/setup-python#1333</a></li>
<li>Upgrade <code>@​actions/cache</code> to 6.2.0 by <a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1337">actions/setup-python#1337</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/lmvysakh"><code>@​lmvysakh</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1335">actions/setup-python#1335</a></li>
<li><a
href="https://github.com/philip-gai"><code>@​philip-gai</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1337">actions/setup-python#1337</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v6...v7.0.0">https://github.com/actions/setup-python/compare/v6...v7.0.0</a></p>
<h2>v6.3.0</h2>
<h2>What's Changed</h2>
<h3>Enhancement</h3>
<ul>
<li>Add RHEL support and include Linux distro in cache keys by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1323">actions/setup-python#1323</a></li>
<li>Fix pip cache error handling on Windows by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1040">actions/setup-python#1040</a></li>
</ul>
<h3>Dependency update</h3>
<ul>
<li>Upgrade minimatch from 3.1.2 to 3.1.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1281">actions/setup-python#1281</a></li>
<li>Upgrade actions dependencies by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a>
with <a href="https://github.com/Copilot"><code>@​Copilot</code></a> in
<a
href="https://redirect.github.com/actions/setup-python/pull/1303">actions/setup-python#1303</a></li>
<li>Upgrade <code>@​actions/cache</code> to 5.1.0, log cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1324">actions/setup-python#1324</a></li>
<li>Upgrade dependency versions and test workflow configuration by <a
href="https://github.com/HarithaVattikuti"><code>@​HarithaVattikuti</code></a>
in <a
href="https://redirect.github.com/actions/setup-python/pull/1322">actions/setup-python#1322</a></li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Update advanced-usage.md by <a
href="https://github.com/Dunky-Z"><code>@​Dunky-Z</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/811">actions/setup-python#811</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a>
with <a href="https://github.com/Copilot"><code>@​Copilot</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1303">actions/setup-python#1303</a></li>
<li><a href="https://github.com/jasongin"><code>@​jasongin</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/1324">actions/setup-python#1324</a></li>
<li><a href="https://github.com/Dunky-Z"><code>@​Dunky-Z</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-python/pull/811">actions/setup-python#811</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-python/compare/v6.2.0...v6.3.0">https://github.com/actions/setup-python/compare/v6.2.0...v6.3.0</a></p>
<h2>v6.2.0</h2>
<h2>What's Changed</h2>
<h3>Dependency Upgrades</h3>
<ul>
<li>Upgrade dependencies to Node 24 compatible versions by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/setup-python/pull/1259">actions/setup-python#1259</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-python/commit/5fda3b95a4ea91299a34e894583c3862153e4b97"><code>5fda3b9</code></a>
Pin SHA commits and update docs with latest versions (<a
href="https://redirect.github.com/actions/setup-python/issues/1338">#1338</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/4ab7e95f05e168b4356aebde89dd84f59c283d8e"><code>4ab7e95</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/setup-python/issues/1337">#1337</a>
from actions/philip-gai/bump-actions-cache-6-2-0</li>
<li><a
href="https://github.com/actions/setup-python/commit/0f3a009f475dbea83c0371cd85d099690fee8c5c"><code>0f3a009</code></a>
Remove the pip-install input (<a
href="https://redirect.github.com/actions/setup-python/issues/1336">#1336</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/f8cf4291c8b8e273ddd26e569454615c7315d932"><code>f8cf429</code></a>
Migrate to ESM and upgrade dependencies (<a
href="https://redirect.github.com/actions/setup-python/issues/1330">#1330</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/54baeea5b34417d10a7479663a23cca53ea209b5"><code>54baeea</code></a>
Validate and retry manifest fetch to prevent silent failures (<a
href="https://redirect.github.com/actions/setup-python/issues/1332">#1332</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/c7092773a316760f4ecfe498e4af668a4dafeac5"><code>c709277</code></a>
Annotation code fix (<a
href="https://redirect.github.com/actions/setup-python/issues/1335">#1335</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/6849080452e69b330395e8a6d23cf90f56d76a1a"><code>6849080</code></a>
remove EOL Python versions and Bumps numpy text fixture (<a
href="https://redirect.github.com/actions/setup-python/issues/1333">#1333</a>)</li>
<li><a
href="https://github.com/actions/setup-python/commit/0903b469fbf4441aadfe4f4b249dc5b1fba3a73e"><code>0903b46</code></a>
Bump certifi from 2020.6.20 to 2024.7.4 in /<strong>tests</strong>/data
(<a
href="https://redirect.github.com/actions/setup-python/issues/1328">#1328</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-python/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 14:35:11 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Rasmus Karlsson
544c5903af ci: bump vmactions/freebsd-vm from 1.5.0 to 1.5.2 (#7119)
Bumps [vmactions/freebsd-vm](https://github.com/vmactions/freebsd-vm)
from 1.5.0 to 1.5.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vmactions/freebsd-vm/releases">vmactions/freebsd-vm's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.2</h2>
<p>reduce image sizes.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vmactions/freebsd-vm/compare/v1...v1.5.2">https://github.com/vmactions/freebsd-vm/compare/v1...v1.5.2</a></p>
<h2>v1.5.1</h2>
<p>The prepare step (installing packages etc.) normally runs on every
build. With cache-after-prepare: true, the action shuts the VM down
cleanly after prepare has finished, caches the prepared VM image, and
boots the VM again before run. Later runs with the same prepare script
restore the prepared image, skip prepare entirely, and start directly at
run</p>
<p><a
href="https://github.com/vmactions/freebsd-vm#10-cache-the-vm-image-after-prepare">https://github.com/vmactions/freebsd-vm#10-cache-the-vm-image-after-prepare</a></p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vmactions/freebsd-vm/compare/v1...v1.5.1">https://github.com/vmactions/freebsd-vm/compare/v1...v1.5.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/77ed28d336d03fe19a3f4f7266c1d2c4714dd79d"><code>77ed28d</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/7e4394ceec879179f8c566de645663ea497fc2a7"><code>7e4394c</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/1943f6c7798721062c79065c2fff836250b050fc"><code>1943f6c</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/df48c4d9631e2adc7580787adba929840803f295"><code>df48c4d</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/857a4066240a8bc5a148fed1f954a4be8419d909"><code>857a406</code></a>
fix for image size</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/b05c66399774471f70a8d6bcca5e3043ae9ac5f4"><code>b05c663</code></a>
Update version to v1.5.1</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/a46f291854f624412f94e37b2e6ba64bdb52b5dd"><code>a46f291</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/9f53bb3f0e92d93ea182d74a934572b6223d2763"><code>9f53bb3</code></a>
Generated from base-vm</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/cc38efae1744a90315f43bd85e49116af72320fa"><code>cc38efa</code></a>
Update version to v1.5.0</li>
<li><a
href="https://github.com/vmactions/freebsd-vm/commit/0eea5137bc632b845b6194e80c74c373e0d617ac"><code>0eea513</code></a>
Update vmactions/freebsd-vm from base-vm</li>
<li>Additional commits viewable in <a
href="https://github.com/vmactions/freebsd-vm/compare/v1.5.0...v1.5.2">compare
view</a></li>
</ul>
</details>
<br />

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
2026-07-25 11:41:53 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
aba6e69fb1 ci: bump lib/twitch-eventsub-ws/lib/date from 7875f43 to 179a6b9 (#7129)
Bumps
[lib/twitch-eventsub-ws/lib/date](https://github.com/HowardHinnant/date)
from `7875f43` to `179a6b9`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/HowardHinnant/date/commit/179a6b921ccd6179b5b04dce812a89f71a51b4df"><code>179a6b9</code></a>
Update remote_version to new website</li>
<li>See full diff in <a
href="https://github.com/HowardHinnant/date/compare/7875f43aa9288d176191c83e8284d61acdd5ab7c...179a6b921ccd6179b5b04dce812a89f71a51b4df">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 12:48:19 +02:00
NerixyzandGitHub 6de0516c66 fix(windows): deploy OpenSSL TLS plugin (#7125)
Since #7009, our Windows nightly builds were missing the OpenSSL TLS
plugin for Qt. Qt 6.8+ only deploys the OpenSSL plugin if it sees
`libcrypto.dll` or `libssl.dll`. However, our OpenSSL is named
`lib{ssl,crypto}-3-x64.dll`. `--force-openssl` will deploy the SSL
plugin regardless.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-22 14:49:52 +02:00
NerixyzandGitHub b2f1e12e62 tests: increase wait and timeout in OnceFlag.waitFor (#7121)
In hopes to not land a PR for #7116, this increases the wait + timeout
as described in
https://github.com/Chatterino/chatterino2/issues/7116#issuecomment-5015316981.

I think the issue is that macOS runners on GitHub Actions are so
incredibly slow sometimes that we get these weird timings. And if that's
the cause, the overhead (e.g. from switching tasks) should be constant.
Then, if we increase the wait and timeout, we also increase the accepted
jitter (timeout - wait) from 100ms to 1s. So if the lag we get is at
about 150ms, that is now accepted.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-20 16:59:09 +00:00
ExeArcoandGitHub d9886c8840 accounts: add visual indicator for login expiry (#6919)
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-19 18:43:11 +00:00
ArneandGitHub d6c8bdde61 emotepopup: search by tags and original name (#7077)
Search by tags with `tags:forsen`
Search by tags & name with `tags:forsen pepe`

Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-19 20:00:53 +02:00
LeafyzitoandGitHub c3368d0fb5 feat: add tab history navigation (#7063)
Tested-by: apa420 <17131426+apa420@users.noreply.github.com>
Reviewed-by: Nerixyz <nerixdev@outlook.de>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-19 14:24:10 +00:00
NerixyzandGitHub d853137820 feat(plugins): Add c2.DateTime (#7096)
This adds the `DateTime` API described in #7021.

Reviewed-by: Mm2PL <mm2pl+gh@kotmisia.pl>
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-19 13:26:21 +00:00
NerixyzandGitHub 14b5c665a4 chore: Scale down pinned message banner (#7113)
I think the text in the pinned message banner is too large in relation
to the default UI font width, so I scaled it down.

Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
Parent-pr: 7014
2026-07-19 11:41:42 +00:00
NerixyzandGitHub 2ca4b28457 fix: Update pined message height if viewport resized (#7114)
If the split is not 100dp wide, the calculated message height can be
wrong. If the split is larger than 100dp and the message would wrap at
that size, the widget would be too tall. And vice versa for splits
smaller than 100dp.

We do calculate the height in our resize event, but we use the size of
our children. Their resize events are delivered after we're resized. So
we check if we need to resize after we show the widget. This does result
in a small flash where the content is sized incorrectly, but better than
it being incorrect the entire time.

Parent-pr: 7014
Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
2026-07-19 11:00:12 +00:00