Introduction <a href=“https://lobste.rs/” rel=“ugc”>https://lobste.rs/</a> – at the time of writing – has a javascript error on load for logged in users: <pre><code>Uncaught ReferenceError: qS is not defined at new _LobstersFunction (user-c27ac03d.js:144:34) at user-c27ac03d.js:665:17 </code></pre> This error is causing much of the site functionality to not work, an easy way to check is to try and <code>[preview]</code> a comment, if that does not work – most likely you have an error in the js-console. If you provide the missing definition for <code>qS</code> and <code>qSA</code> site functionality is restored in full-effect. Known to fix:

  • story / comment upvotes
  • comment preview
  • <code>$things_you_have_spammed_click_wondering_why_it_doesnt_work</code>

<hr> Override using Dev Tools => Sources => Override For those with webdev experience it is easy to fix the error yourself by simply patching the faulty script with the below: <pre><code> const qS = (a, b) => b === undefined ? document.querySelector(a) : a.querySelector(b); const qSA = (a,b) => b === undefined ? […document.querySelectorAll(a)] : […a.querySelectorAll(b)]; </code></pre> If the above is ran before the faulty line (665 in this case), all is well and things start working again. <hr> Use an extension such as TamperMonkey An easier alternative is to use <a href=“https://www.tampermonkey.net/” rel=“ugc”>TamperMonkey</a> to automatically run custom javascript for the site, below is what I use: <pre><code>// ==UserScript== // @name lobste.rs undefined qS/qSA fix // @namespace http://tampermonkey.net/ // @version 2026-07-27 // @description try to take over the world! // @author You // @match https://lobste.rs/* // @icon https://www.google.com/s2/favicons?sz=64&amp%3Bdomain=lobste.rs // @grant none // ==/UserScript==

(function() { ‘use strict’; window.qS = (a, b) => b === undefined ? document.querySelector(a) : a.querySelector(b); window.qSA = (a,b) => b === undefined ? […document.querySelectorAll(a)] : […a.querySelectorAll(b)]; })(); </code></pre> <hr> end-of-transmission Personally I used the override approach after discovering this, but I assume there are more than me who want to use our beloved features while waiting for a redeploy of lobste.rs <pre><code>(_/)00(_/) ^- me previewing my own comments like crazy with the mitigation </code></pre> Happy browsing!