Chat reactions, a daily challenge calendar, and LeetCode-parity runtimes
- changelog
Reactions in chat
Every chat surface, global chat, practice rooms, study groups and collab sessions, has emoji reactions. Hover a message to get the add-reaction trigger, pick one of eight (๐ โค๏ธ ๐ ๐ฅ ๐ ๐ ๐ค ๐ญ), and it lands as a chip under the message with a count. Click a chip to toggle your own reaction; hover it to see who reacted. On touch screens the trigger is always visible.
Global chat reactions persist with the message, so they survive a scroll back through history and a deploy. Room reactions live as long as the room does, and late joiners see them on the backlog.
A calendar of past daily challenges
/daily is a month view of the daily challenge. Each day that had a challenge, up to and including today, links to its problem. Today is marked. Your accepted solves are marked on the day, with a separate mark when you solved that day's problem later. Days after today are just numbers, so nothing upcoming leaks. The dashboard hero has a "Past challenges" link next to today's pick.
Rank insignia beside every name
The rank insignia that shipped with XP now sits to the left of the username on the leaderboard, the profile leaderboard card, the dashboard Activity and Following bands, chat messages and the user popover. The level number and rank name are in the tooltip, and the popover reads "Level 23 ยท Deque Hand".
The XP receipt
The result panel's XP gain was a bare pill with chips over a bar that only showed the new position. It is now an itemized receipt: one row per source with a clause explaining its amount (the difficulty base, the quarter rate on a themed variant, the ladder XP behind a category clear, a first solve in a language, a streak milestone), a Total row when there is more than one, and the XP total before and after beside the pill, linking to /levels. The level bar keeps the fill you already held muted and lights the slice this submission added, growing in from the held edge. The label reads "25 โ 200 / 800 to Lv 13", or "Lv 9 โ Lv 10" after a level-up, where the slice runs from the new level's floor.
Every language on LeetCode's runtime
Every language now runs on the compiler and runtime LeetCode's environments page lists, and the libraries LeetCode ships are on the path.
| Language | Runtime | Libraries |
|---|---|---|
| C++ | GCC 14.4, -O2 -std=gnu++23, <bits/stdc++.h> pre-included | std::ranges, std::span, std::format, <=>, <bit>, <numbers> |
| C# | .NET 10, C# 14 | PriorityQueue<T,P>, records, BitOperations, System.Linq and friends without a using |
| Go | Go 1.27, slices / maps / cmp pre-imported | github.com/emirpasic/gods v1 and v2 |
| JavaScript | Node 24 | lodash as _, and @datastructures-js: PriorityQueue, MinPriorityQueue, MaxPriorityQueue, Queue, Deque, Stack, Heap, MinHeap, MaxHeap, LinkedList, DoublyLinkedList, EnhancedSet, all as globals |
| Java | JDK 25 | LeetCode's import set plus a javafx-compatible Pair (unless your solution declares one) |
| Rust | Rust 1.98 | rand, regex, itertools |
| Swift | Swift 6.2 | swift-collections, swift-algorithms, swift-numerics, pre-imported |
| Python | 3.14 | sortedcontainers (since last week) |
C++ was the one people hit most: GCC 9 had no <ranges>, no <span> and rejected -std=c++20 outright. C# was on Mono 6.6, with no PriorityQueue at all.
C++ also gains bounds checking on the standard containers. Indexing a vector, string or deque out of range, or calling front(), back() or pop_back() on an empty one, aborts with a message naming the operation, such as std::vector::operator[]: index out of range. Before this an off-by-one read one slot before a buffer could return zero and pass. The cost is within noise.
The runtime environments page
/environments documents what the table above summarizes, one section per language: the exact toolchain version, the compile and run commands with their flags, what the harness already imports for you, the bundled libraries with their versions and how each is reached, and the per-language time and memory factors next to the judge's fixed ceilings. The flags are read from the same config the judge uses, and a test pins the listed versions to the judge image, so the page cannot drift from what actually runs. It is linked from the editor settings dropdown and the site footer.
New chat emotes
By request on Discord: :sgtm: alongside LGTM, :thumbsup: as a typeable twin of the thumbs-up reaction, and the animated :mhm: nod. :Copium: now renders the COPIUM emote people know from Twitch instead of the cat variant; the lookup is case-insensitive, so old messages and the old spelling keep working.
Largest Deployment Over Time
Maximum Height Outline is now Largest Deployment Over Time. The statement was a set of rectangles and a "key points" rule that readers found hard to picture. Each element of deployments is now [start, end, servers]: a deployment that ran that many servers from start up to, but not including, end. The answer is the chart of the largest deployment running at each moment, one entry per change. Two deployments handing off at the same size leave the chart flat, so the no-repeats rule falls out of the framing instead of needing its own paragraph. The slug and function name are unchanged, so links and progress survive.
Fixes
- Study group cards undercounted members. Someone who joined by code after the room opened was never counted, and a member returning to a full room was rejected by the capacity check even though the room let them back in. Both are counted now, and a lost presence write is reconciled on the next sweep.
- Long strokes on the collab drawing canvas re-sent every point on each flush, so a long stroke tripped the per-document size cap and the drawer's updates were rejected while everyone else saw nothing until a resync. Strokes now append only the new points. The pen palette is available in collab too: each seat starts on its own color and can pick any.
Unknown message type: privacy:updateappeared in collab chat on every connect for anyone who had turned off spectating. The opt-out is only re-asserted where spectating exists.- The profile activity calendar overflowed its card with a horizontal scrollbar when a month label landed in the last few columns.
- Maximum XOR Under a Limit timed out a per-node Python trie, the approach the lesson teaches. The suite is resized so a class-based trie, a list trie and an online min-trie all pass with margin.
- Longest Increasing Subsequence caps
nums.lengthat 1000. A top-down memo keyed on (index, previous index) has about nยฒ/2 states, and at 2500 that ran Python out of memory on the first max case, which no memory-limit raise could rescue. The cases taper up to the new max; min-size and max-size cases stay. - Dashboard "Keep going" showed "You have cleared the map" under a header like "State Machine DP ยท 2/3" when the continue tile had taken that category's last unsolved problem. The list now spills into the next open category, or says there is one problem left here when nothing later is open yet. The cleared-map copy is reserved for when there is nothing left to recommend.
- Editor find widget tooltips ("Close (Escape)", "Match Case", ...) were rendered inside the editor with their width capped at the space to the editor's edge, so they wrapped and grew down over their own button. The close X was unclickable because the click landed on the tooltip. Tooltips are now sized to their content and stay clear of the button.
- Next Larger Value in a BST had a hidden case asking for the successor of the tree's maximum, which the statement rules out, and several cases whose target was not in the tree at all. Every target is now a real value below the maximum.