The lobste.rs site has a JavaScript error affecting logged-in users; this post provides mitigation using DevTools overrides or a TamperMonkey script.
<strong>Introduction</strong>
<p><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:</p>
<pre><code>Uncaught ReferenceError: qS is not defined
at new _LobstersFunction (user-c27ac03d.js:144:34)
at user-c27ac03d.js:665:17
</code></pre>
<p>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.</p>
<p>If you provide the missing definition for <code>qS</code> and <code>qSA</code> site functionality is restored in full-effect.</p>
<p>Known to fix:</p>
<ul>
<li>story / comment upvotes</li>
<li>comment preview</li>
<li><code>$things_you_have_spammed_click_wondering_why_it_doesnt_work</code></li>
</ul>
<hr>
<strong>Override using Dev Tools => Sources => Override</strong>
<p>For those with webdev experience it is easy to fix the error yourself by simply patching the faulty script with the below:</p>
<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>
<p>If the above is ran before the faulty line (665 in this case), all is well and things start working again.</p>
<hr>
<strong>Use an extension such as TamperMonkey</strong>
<p>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:</p>
<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&domain=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>
<strong>end-of-transmission</strong>
<p>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</p>
<pre><code>(\_/)_00_(\_/)
^- me previewing my own comments like crazy with the mitigation
</code></pre>
<p>Happy browsing!</p>
# lobste.rs has a js-error: here is a mitigation
Source: [https://lobste.rs/s/llf3mg/lobste_rs_has_js_error_here_is_mitigation](https://lobste.rs/s/llf3mg/lobste_rs_has_js_error_here_is_mitigation)
**Introduction**
[https://lobste\.rs](https://lobste.rs/)– at the time of writing – has a javascript error on load for logged in users:
```
Uncaught ReferenceError: qS is not defined
at new _LobstersFunction (user-c27ac03d.js:144:34)
at user-c27ac03d.js:665:17
```
This error is causing much of the site functionality to not work, an easy way to check is to try and`\[preview\]`a comment, if that does not work – most likely you have an error in the js\-console\.
If you provide the missing definition for`qS`and`qSA`site functionality is restored in full\-effect\.
Known to fix:
- story / comment upvotes
- comment preview
- `$things\_you\_have\_spammed\_click\_wondering\_why\_it\_doesnt\_work`
---
**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:
```
const qS = (a, b) => b === undefined ? document.querySelector(a) : a.querySelector(b);
const qSA = (a,b) => b === undefined ? [...document.querySelectorAll(a)] : [...a.querySelectorAll(b)];
```
If the above is ran before the faulty line \(665 in this case\), all is well and things start working again\.
---
**Use an extension such as TamperMonkey**
An easier alternative is to use[TamperMonkey](https://www.tampermonkey.net/)to automatically run custom javascript for the site, below is what I use:
```
// ==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&domain=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)];
})();
```
---
**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
```
(\_/)_00_(\_/)
^- me previewing my own comments like crazy with the mitigation
```
Happy browsing\!
Lobste.rs has migrated its database from MariaDB to SQLite, resulting in lower CPU and memory usage, reduced costs, and improved site performance. The migration process and background are detailed.
The article discusses the limitations of the <noscript> HTML element, which only provides fallback content when JavaScript is completely disabled, not when JavaScript fails due to other reasons. It recommends using DOM APIs to dynamically update content instead.
A blog post reflects on Rails' conventions as ideal for AI agents and compilers, citing the Spinel ahead-of-time Ruby compiler as a project that could eliminate the need for application rewrites after scaling.
llama.cpp's web UI now supports executing model-generated JavaScript in a sandboxed iframe via Web Workers, enabling lightweight agentic code execution as an opt-in feature.
Detailed postmortem of a supply-chain attack on TanStack's npm packages involving cache poisoning, OIDC token extraction, and credential harvesting malware. All affected versions deprecated; users advised to rotate credentials.