---
title: "The Most Useless Element Ever | YOOtheme Pro Fun Element Plugin"
description: "The most useless YOOtheme Pro element ever. Pointless settings, zero functionality and absolutely nothing useful. Five stars for doing nothing, honestly."
url: "https://www.yoozecase.com/?app_id=1&item_id=10"
date: "2026-10-08T08:24:13+00:00"
language: "en-GB"
---

#  The Most Useless Element Ever

Add some Nothingness to your website

**Latest Version**
1.0.0
**Requires**
Yootheme Pro 5+, Joomla 5+, WordPress 6.5+, PHP 8.1 or newer
**Release date**
10 August 2026
**Made for**
Yootheme Pro, Joomla, Wordpress
**License**
GPL-2.0-or-later
**Price**
Pay what you want

 [ 🛒 Get it for Joomla 👍 ](https://yoozecase.lemonsqueezy.com/checkout/buy/351c6d41-26c4-491b-87b5-9518be43caa5)

 [ 🛒 Get it for WordPress👍 ](https://yoozecase.lemonsqueezy.com/checkout/buy/0c450639-1085-4775-84f8-d6ee1f61eba2)

 [ Demo page ](https://www.yoozecase.com/the-most-useless-element-ever-demo)

Does nothing. Absolutely nothing. Made by a YOOzeLess company. Five stars.

##  What's new in version 1.0.0

- **New:** Build fingerprint (BUILDINFO.txt) with build id, timestamp and content checksum, so you can prove which particular nothing you installed
- **New:** A WordPress edition at the same version number, for YOOtheme Pro on WordPress. The nothing is identical on both platforms
- **Changed:** Renamed from Nothium to The Most Useless Element Ever, everywhere: plugin slug, element type, PHP classes, CSS prefix, language keys and every visible string. The product was sold under one name and installed under another, which is one name too many for something this simple
- **Changed:** First stable release. Backwards compatibility is guaranteed from here: every future 1.x release will continue to do nothing in exactly the way you have come to expect
- **Changed:** The licence banner in the badge stylesheet and the NOTICE now agree with LICENSE.txt (GPL-2.0-or-later)
- **Removed:** The name Nothium, its periodic-table conceit, and the Nothium Pro edition that never existed and did exactly as much as the edition that does
- **Note:** Because the element type was renamed, this is a fresh install rather than an update. The installer switches off the old Nothium plugin for you; remove it at your convenience and re-add the element on any page that used it

 ![The Most Useless Element Ever 1](https://www.yoozecase.com/files/the-most-useless-element-ever_1.png)

 [](#)

 [](#)

---

##  Description

Meet the most useless element ever created for YOOtheme Pro. It does nothing, changes nothing and delivers exactly what it promises: **absolutely nothing.**

Enjoy advanced settings for things that do not matter, pointless controls and a premium experience without any actual functionality. Built by YOOzeLess, the company that proves sometimes less is truly nothing.

Comes with settings such as:

- Nothing Cache TTL (slider, 0-3600 sec): how long nothing is cached. Fresh nothing and cached nothing are not too distinguishable.
- GDPR Consent for nothing (checkbox): requesting visitors consent before nothing happens. Legally redundant, from a legal perspective beautiful.
- Nothing Schedule (select: always / office hours only / night only): when nothing is active. Outside of scheduled events, there is also nothing.
- Fallback Nothing (select): what is shown if nothing does not load. Options: nothing, nothing, rien, nada.
- A/B test the Nothing (checkbox): shows variant A (nothing) to 50% of visitors and variant B (nothing) to 50%. Results so far not significant. Nothing Intensity (range 1-11): goes up to 11.
- Synchronize nothing between devices (checkbox): your nothing on desktop, tablet, and phone identical. Has worked flawlessly since version 0.0.1.
- Premium Nothing (checkbox, disabled): greyed out with description "Available in Nothium Pro. It does the same, but costs more."

##  Feature request

 ### What is the next feature for this plugin?

Submit your idea or vote on existing ones.

  #### Top voted

   Website (leave empty)

'; } html += ''; if (oc.title) { html += '##### ' + escapeHtml(oc.title) + '

'; } if (oc.text) { html += '' + escapeHtml(oc.text).replace(/\\n/g, '
') + '

'; } html += '

'; } // Auto winner(s) - top N from the already vote-sorted features if (mode === 'auto_winner' || mode === 'both') { var n = oc.winnerCount | 0; if (n '; for (var i = 0; i ' + (w.image_url ? '![](https://www.yoozecase.com/'%20+%20escapeHtml(w.image_url)%20+%20')

' : '') + '' + (i + 1) + '' + '' + escapeHtml(w.title) + '' + '' + getIcon(this.cfg.voteIcon) + ' ' + (w.votes | 0) + '' + ''; } html += ''; } } if (html === '') { this.elOutcome.hidden = true; return; } this.elOutcome.innerHTML = html; this.elOutcome.hidden = false; }; /** * Roadmap view (v3.2.0): renders the items as status columns, in the * canonical status order from cfg.statuses. Each column is an 12. inside \* the existing .yc-fb-list , holding its own inner  of items - \* this keeps the delegated click/change handlers on elList working \* unchanged. Unknown statuses fall back into the "open" column so no item \* can silently disappear. Empty columns are skipped when \* cfg.roadmapHideEmpty is set. \*/ Board.prototype.renderRoadmap = function (items) { var stats = (this.cfg.statuses && this.cfg.statuses.length) ? this.cfg.statuses : \['open', 'planned', 'in\_progress', 'shipped', 'declined'\]; var labels = this.cfg.statusLabels || {}; var groups = {}; var i, st; for (i = 0; i ' + '##### ' + '' + escapeHtml(labels\[sv\] || sv) + '' + arr.length + '' + '

    ' + '' + itemsHtml + '
    ' + '
'; } return html; }; Board.prototype.renderItem = function (f, index) { var disabled = this.cfg.isClosed ? 'disabled' : ''; var voted = f.voted ? ' yc-voted' : ''; var descHtml = f.description ? '' + escapeHtml(f.description).replace(/\\n/g, '
') + '

' : ''; var thumbHtml = f.image_url ? '![](https://www.yoozecase.com/'%20+%20escapeHtml(f.image_url)%20+%20')

' : ''; // Status workflow (v3.0.0): badge for any non-default status. The // roadmap view (v3.2.0) skips the badge - the column already // communicates the status, a badge would be redundant noise. var st = (f.status || 'open'); var labels = this.cfg.statusLabels || {}; var statusBadge = (!this.isRoadmap && st && st !== 'open' && labels[st]) ? '' + escapeHtml(labels\[st\]) + '' : ''; // Design themes (v3.1.0): arena / neon / pixel render extra per-item // furniture - rank number, avatar (image or initials), a "leader" pill // on rank 1, and a "votes" label. Classic/colour themes are untouched. var t = this.cfg.theme || 'light'; var themed = (t === 'arena' || t === 'neon' || t === 'pixel'); var rank = (typeof index === 'number') ? (index + 1) : 0; var rankHtml = '', leaderHtml = '', avatarHtml = '', votesLabel = ''; if (themed) { rankHtml = '' + pad2(rank) + ''; if (rank === 1) { leaderHtml = '' + escapeHtml(this.cfg.leaderLabel || 'Leader') + ''; } if (f.image_url) { avatarHtml = '![](https://www.yoozecase.com/'%20+%20escapeHtml(f.image_url)%20+%20')

'; } else { avatarHtml = '' + escapeHtml(initialsOf(f.title)) + '

'; } votesLabel = '' + escapeHtml(this.cfg.votesLabel || 'votes') + ''; } // Moderation overlay: subtle corner buttons, only when canModerate. // Buttons appear on hover/focus (styled in CSS). Even in customizer // preview we render them when canModerate is true so the moderator // can see what visitors with moderation rights will see. var modHtml = ''; if (this.cfg.canModerate) { var parts = []; var hideTitle = escapeHtml(this.t('hideTitle', 'Hide this feature')); var deleteTitle = escapeHtml(this.t('deleteTitle', 'Delete this feature')); if (this.cfg.allowSoftHide) { parts.push( '' ); } if (this.cfg.allowHardDelete) { parts.push( '' ); } if (parts.length || (this.cfg.statuses && this.cfg.statuses.length)) { var sParts = parts.slice(); if (this.cfg.statuses && this.cfg.statuses.length) { var opts = ''; for (var si = 0; si ' + escapeHtml(sl) + ''; } var setStatus = escapeHtml(this.t('setStatus', 'Set status')); sParts.push( '' ); } modHtml = '' + sParts.join('') + '

'; } } var mediaHtml = themed ? avatarHtml : thumbHtml; return ( '32. ' + leaderHtml + rankHtml + '' + mediaHtml + '' + '##### ' + escapeHtml(f.title) + '

    ' + statusBadge + descHtml + '

    ' + modHtml + '
' ); }; /** * Detects whether a JSON response looks like a CSRF/token rejection. * Two cases: * 1. com_ajax-level rejection (Joomla's auto-token-check on POST): top * level message contains the JINVALID_TOKEN_NOTICE text and HTTP * status is typically 403. * 2. Plugin-level rejection from requireToken(): payload.error === "Invalid token". */ Board.prototype.isTokenError = function (status, raw, payload) { if (status === 403) return true; var hay = ''; try { hay = JSON.stringify(raw || {}) + '|' + JSON.stringify(payload || {}); } catch (e) {} return /invalid (security )?token/i.test(hay); }; /** * Fetch a fresh CSRF token from the server. Updates this.cfg.csrfToken so * the next call (and any future calls in this Board's lifetime) use the * correct one. Cache-bust with a timestamp so no upstream CDN caches the * response. */ Board.prototype.fetchFreshToken = function () { var self = this; var url = this.cfg.ajaxUrl + '&task=token&_=' + Date.now(); return fetch(url, { method: 'GET', credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Cache-Control': 'no-cache' } }) .then(function (r) { return r.json(); }) .then(function (data) { var p = self.unwrapAjax(data); if (p && p.ok === true && typeof p.token === 'string' && p.token.length >= 16) { self.cfg.csrfToken = p.token; return p.token; } throw new Error('No fresh token in response'); }); }; /** * Generic POST-with-token helper. Builds FormData from a plain object, * adds the current token, posts. On 403 / token-error response, fetches a * fresh token and retries exactly once. * * @param {string} task The task name (appended to URL and body) * @param {object} fields Key-value form fields (no token) * @return {Promise} Resolves to the unwrapped payload on success. \* Rejects with Error containing .reason on failure. \*/ Board.prototype.postWithToken = function (task, fields) { var self = this; function attempt(token) { var fd = new FormData(); fd.append('task', task); for (var k in fields) { if (Object.prototype.hasOwnProperty.call(fields, k)) { fd.append(k, fields\[k\]); } } fd.append(token, '1'); return fetch(self.cfg.ajaxUrl + '&task=' + encodeURIComponent(task), { method: 'POST', credentials: 'same-origin', body: fd, headers: { 'Accept': 'application/json' } }).then(function (r) { return r.json().then(function (data) { return { status: r.status, raw: data, payload: self.unwrapAjax(data) }; }); }); } return attempt(this.cfg.csrfToken).then(function (res) { // Success path if (res.payload && res.payload.ok === true) { return res.payload; } // Token rejection? Fetch fresh and retry once. if (self.isTokenError(res.status, res.raw, res.payload)) { return self.fetchFreshToken().then(function (fresh) { return attempt(fresh).then(function (res2) { if (res2.payload && res2.payload.ok === true) { return res2.payload; } var err = new Error( (res2.payload && res2.payload.error) || (res2.raw && res2.raw.message) || self.t('requestFailed', 'Request failed.') ); err.payload = res2.payload || null; throw err; }); }); } // Some other error - surface it var err = new Error( (res.payload && res.payload.error) || (res.raw && res.raw.message) || self.t('requestFailed', 'Request failed.') ); err.payload = res.payload || null; throw err; }); }; Board.prototype.handleSubmit = function () { var self = this; if (isInBuilder()) { this.showStatus(this.t('previewSubmit', 'Preview mode - submissions are disabled in the YOOtheme builder. Try this on the published page.'), 'info'); return; } if (this.cfg.isClosed) { this.showStatus(this.cfg.closedMessage || this.t('votingClosed', 'Voting is closed.'), 'info'); return; } var title = (this.elTitle && this.elTitle.value || '').trim(); var desc = (this.elDesc && this.elDesc.value || '').trim(); // Client-side validation: minimum title length. Server re-validates. var minLen = (this.cfg.minTitleLength | 0) || 2; if (title.length for hide/delete, remember parent + sibling for rollback. var li = btn.closest('li'); var parentEl = li ? li.parentNode : null; var nextEl = li ? li.nextSibling : null; if (li && (action === 'hide' || action === 'delete')) { li.remove(); } btn.disabled = true; var task = action === 'hide' ? 'moderate\_hide' : action === 'delete' ? 'moderate\_delete' : action === 'restore' ? 'moderate\_restore' : ''; if (!task) { btn.disabled = false; return; } this.postWithToken(task, { feature\_id: featureId }) .then(function (payload) { // Success - keep the UI as-is (already removed) and refresh // so vote counts, top box, and hidden-features panel reflect // the new state. self.refresh(); if (self.hiddenOpen) { self.hiddenLoaded = false; // force a refetch self.fetchHiddenFeatures(); } var msg = action === 'delete' ? self.t('deleted', 'Feature deleted.') : action === 'hide' ? self.t('hidden', 'Feature hidden.') : action === 'restore' ? self.t('restored', 'Feature restored.') : self.t('done', 'Done.'); self.showStatus(msg, 'success'); setTimeout(function () { self.hideStatus(); }, 3000); }) .catch(function (err) { // Rollback: re-insert the row if we removed it. if (li && parentEl) { if (nextEl) { parentEl.insertBefore(li, nextEl); } else { parentEl.appendChild(li); } } btn.disabled = false; self.showStatus(err && err.message ? err.message : self.t('modFailed', 'Moderation action failed.'), 'error'); }); }; Board.prototype.handleStatusChange = function (featureId, status, sel) { var self = this; if (!featureId || !status) return; sel.disabled = true; this.postWithToken('moderate\_status', { feature\_id: featureId, status: status }) .then(function () { self.refresh(); var label = (self.cfg.statusLabels && self.cfg.statusLabels\[status\]) ? self.cfg.statusLabels\[status\] : status; self.showStatus(self.tf('statusSet', 'Status: %s', label), 'success'); setTimeout(function () { self.hideStatus(); }, 3000); }) .catch(function (err) { sel.disabled = false; self.showStatus(err && err.message ? err.message : self.t('statusFailed', 'Could not set status.'), 'error'); }); }; /\*\* \* Toggle the hidden-features panel open/closed. First open triggers \* an AJAX fetch; subsequent toggles just hide/show the cached list. \*/ Board.prototype.toggleHiddenPanel = function () { if (!this.elHiddenList || !this.elHiddenLabel) return; var arrow = this.elHiddenToggle && this.elHiddenToggle.querySelector('.yc-fb-hidden-arrow'); if (this.hiddenOpen) { this.hiddenOpen = false; this.elHiddenList.hidden = true; this.elHiddenLabel.textContent = this.t('showHidden', 'Show hidden features'); if (arrow) arrow.classList.remove('yc-open'); return; } this.hiddenOpen = true; this.elHiddenList.hidden = false; this.elHiddenLabel.textContent = this.t('hideHidden', 'Hide hidden features'); if (arrow) arrow.classList.add('yc-open'); if (!this.hiddenLoaded) { this.fetchHiddenFeatures(); } }; /\*\* \* Fetch the hidden-features list via the moderator-only endpoint. \* Re-callable to refresh the list after a restore. \*/ Board.prototype.fetchHiddenFeatures = function () { var self = this; if (!this.elHiddenList) return; this.elHiddenList.innerHTML = '2. ' + escapeHtml(this.t('loading', 'Loading...')) + '
'; var url = this.cfg.ajaxUrl + '&task=moderate\_list\_hidden&board\_id=' + encodeURIComponent(this.cfg.boardId); fetch(url, { credentials: 'same-origin', headers: { 'Accept': 'application/json' } }) .then(function (r) { return r.json(); }) .then(function (data) { var payload = self.unwrapAjax(data); if (!payload || payload.ok !== true) { self.elHiddenList.innerHTML = '4. ' + escapeHtml((payload && payload.error) ? payload.error : self.t('hiddenLoadFailed', 'Failed to load hidden features.')) + '
'; return; } self.hiddenLoaded = true; var features = payload.features || \[\]; if (features.length === 0) { self.elHiddenList.innerHTML = '6. ' + escapeHtml(self.t('noHidden', 'No hidden features.')) + '
'; return; } var html = ''; for (var i = 0; i ' + escapeHtml(f.description).replace(/\\n/g, '
') + '' : ''; var restoreTitle = escapeHtml(self.t('restoreTitle', 'Restore this feature')); html += '9. ' + '' + '##### ' + escapeHtml(f.title) + '

    ' + descHtml + '' + escapeHtml(self.tf('votesMeta', '%s votes', f.votes | 0)) + '' + '

    ' + '' + '
'; } self.elHiddenList.innerHTML = html; }) .catch(function () { self.elHiddenList.innerHTML = '11. ' + escapeHtml(self.t('hiddenNetwork', 'Network error while loading hidden features.')) + '
'; }); }; function initAll(scope) { var roots = (scope || document).querySelectorAll('.yc-fb-root'); for (var i = 0; i ---

##  Changelog

---

 [ v0.3.1 27/06/2026 ](#) Changed- The plugin is now called "The Most Useless Element Ever YOOtheme Pro" in the plugin manager, matching the store and product page. The element inside is still called Nothium, and it still does nothing.

 [ v0.3.0 27/06/2026 ](#) Added- Ten new settings that do nothing, bringing the total to 32 (of which 31 do nothing and one still leaves a written confirmation that nothing happened). New arrivals: Font of Nothing, Padding Around the Nothing, a Hover Effect, Lazy-load the Nothing, Parallax Nothing, Put the Nothing on the Blockchain, a Nothing Uptime SLA, Auto-scale the Nothing, Minify the Nothing, and a Nothing Webhook URL.

 Changed- The element continues to do nothing. The settings are now funnier about it.

 [ v0.2.3 27/06/2026 ](#) Changed- The update server and changelog feed now live at the product's own public address (`the-most-useless-element-ever`) instead of an internal nickname, in line with the YOOzeCase naming convention. Nothing now arrives from a tidier URL. The nothing itself is, as always, unaffected.

 [ v0.2.2 10/06/2026 ](#) Fixed- Version 0.2.1 accidentally did something: it crashed the customizer. This is the gravest possible violation of our product promise and we offer our sincerest apologies. The settings tabs now use the correct internal structure and the product is back to doing absolutely nothing.

 [ v0.2.1 10/06/2026 ](#) Fixed- Seventeen settings were doing nothing so discreetly that they were not even visible. The settings panel now shows all four tabs (Content, Behavior, Enterprise, Advanced), so you can personally confirm that none of them do anything.

 [ v0.2.0 10/06/2026 ](#) Added- Nothing Intensity: a slider that goes to 11

- Nothing Schedule: restrict the nothing to office hours or quiet nights. Outside the schedule, nothing happens as well.
- Nothing Cache TTL: cache the nothing for up to an hour. Fresh and cached nothing are scientifically indistinguishable.
- Sync Nothing Across Devices: your nothing, identical everywhere. Has worked flawlessly since 0.0.1.
- A/B-test the Nothing: variant A (nothing) versus variant B (nothing). Results not statistically significant.
- GDPR Consent for Nothing: legally unnecessary, juridically beautiful
- Premium Nothing (Pro): behaves identically to regular nothing, but costs more
- Fallback Nothing: choose between Nothing, nothing, Rien and Nada for when the nothing fails to load

 Changed- Total number of settings that do nothing increased from 13 to 21. Productivity unaffected.

 [ v0.1.4 10/06/2026 ](#) Changed- The "Do nothing" setting is now guaranteed to do nothing. Previously it secretly controlled whether the element existed, which was the only setting in the product that did anything. This violated our core promise and has been corrected.

 Fixed- The plugin introduced itself to Joomla under the wrong name, so Joomla never spoke to it and the plugin did nothing at all. For most products this is a critical failure; for this one it was dangerously close to a feature. The plugin now answers to its legal name and does nothing in the intended, professional manner.

 [ v0.1.3 10/06/2026 ](#) Changed- Field tabs replaced by three settings groups (Content, Behavior of Nothing, Advanced Nothing)

- The nothing itself is unchanged and remains of the highest quality

 Fixed- The element now actually appears in the page builder. Root cause: version 0.1.0 shipped a decorative element.php containing only the comment "Intentionally empty. This is our best work." YOOtheme Pro 5 treats element.php as the element definition, so our emptiest file erased the entire element. It was so good at doing nothing that it made the product itself not exist. The file has been removed and given a position in management.

 [ v0.1.2 10/06/2026 ](#) Added- Debug log option, for when you need written evidence of nothing happening

 Changed- Now contains 12% more nothing per nothing

 Fixed- Nothium was doing nothing so thoroughly that it refused to exist in the page builder. The element now appears, after which it resumes doing nothing as intended. Two root causes: the installer script was never invoked (so the plugin did not enable itself), and the element registration gave up if YOOtheme had not booted yet instead of politely trying again.

 [ v0.1.1 10/06/2026 ](#) Changed- Now with 4% more nothing

 Fixed- The element icon in the page builder, which was displaying nothing. After internal review this was deemed too useless, even for us. The icon now proudly shows the Nothium hexagon. The element itself continues to do nothing.

## Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "name": "Home",
            "item": "https://www.yoozecase.com"
        },
        {
            "@type": "ListItem",
            "position": 2,
            "name": "Extensions",
            "item": "https://www.yoozecase.com/extensions"
        },
        {
            "@type": "ListItem",
            "position": 3,
            "name": "The Most Useless Element Ever",
            "item": "https://www.yoozecase.com/"
        }
    ]
}
```
