Free Add-on Update Notifier

Free Add-on Update Notifier 1.1.3

No permission to download

qubn

Active member
Licensed customer
qubn submitted a new resource:

Free Add-on Update Notifier - Free, unlimited add-on update alerts - no API key, no third-party server.

Free Add-on Update Notifier tells you when your installed add-ons have updates, by reading each add-on's latest version straight from its own xenforo.com resource page. No API key, no third-party server, no add-on limit, and nothing about your site or your installed add-ons is ever sent anywhere.

Perfect for anyone who runs more than a handful of add-ons and is tired of finding out about updates by accident, or of paying for a notifier that caps how many add-ons it will watch...

Read more about this resource...
 
qubn updated Free Add-on Update Notifier with a new update entry:

Free Add-on Update Notifier v1.1.0 - More marketplaces, push alerts, and per-add-on control

Free Add-on Update Notifier v1.1.0 - Multi-marketplace checks, Discord/Slack/Teams alerts & per-add-on controls​

This release turns the add-on into a complete, free alternative to the paid update notifiers: everything they do, with no add-on limit, no API key, and nothing about your installed add-ons sent to any server, plus several things they do not offer.



New: more marketplaces​

As well as xenforo.com, the notifier can now read versions...

Read the rest of this update entry...
 
Hi @qubn

I appreciate your work developing this plugin, and I want to let you know I’m experiencing crashes after installing this add-on.

here the error code:
Code:
ErrorException: Fatal Error: Declaration of ThemeHouse\Donate\XF\Admin\Controller\Index::actionIndex() must be compatible with Qubn\FreeUpdateNotifier\XF\Admin\Controller\Index::actionIndex(): XF\Mvc\Reply\AbstractReply src/addons/ThemeHouse/Donate/XF/Admin/Controller/Index.php:16
Generated by: TylerAustin Jun 22, 2026 at 1:47 PM
Stack trace
#0 [internal function]: XF::handleFatalError()
#1 {main}
Request state
/var/www/vhosts/cities-mods.com/httpdocs/src/XF/Debugger.php:46:
array(4) {
  'url' =>
  string(10) "/admin.php"
  'referrer' =>
  string(42) "https://cities-mods.com/admin.php?add-ons/"
  '_GET' =>
  array(0) {
  }
  '_POST' =>
  array(0) {
  }
}

I have temporarily disabled your add-on while awaiting further notice, and my website appears to return to normal after disabling it.
 
Looking at your function to poll various resource end-points made me realize one thing: XenForo needs a generally-public API endpoint, and user-generatable API-Key endpoints to reliably query and not direct page scraping.

I know within ./admin.php?api-keys/add there are resource* items, but that requires a manual API key to be generated by an admin, and not an end-user.

That'd be a pretty neat feature for a future XenForo version.
 
qubn updated Free Add-on Update Notifier with a new update entry:

Free Add-on Update Notifier v1.1.1 - Compatibility fix (Admin CP crash with other add-ons)

Free Add-on Update Notifier v1.1.1​

A small but important compatibility fix. If you run another add-on that also extends the control panel's Add-ons page or control-panel home, v1.1.0 could crash your Admin CP. This release fixes that. No features change and no settings are touched.



Fixed: Admin CP crash when another add-on extends the same pages​

On a site that also runs another add-on touching the control panel Add-ons list or the...

Read the rest of this update entry...
 
Hi @qubn

I appreciate your work developing this plugin, and I want to let you know I’m experiencing crashes after installing this add-on.

here the error code:
Code:
ErrorException: Fatal Error: Declaration of ThemeHouse\Donate\XF\Admin\Controller\Index::actionIndex() must be compatible with Qubn\FreeUpdateNotifier\XF\Admin\Controller\Index::actionIndex(): XF\Mvc\Reply\AbstractReply src/addons/ThemeHouse/Donate/XF/Admin/Controller/Index.php:16
Generated by: TylerAustin Jun 22, 2026 at 1:47 PM
Stack trace
#0 [internal function]: XF::handleFatalError()
#1 {main}
Request state
/var/www/vhosts/cities-mods.com/httpdocs/src/XF/Debugger.php:46:
array(4) {
  'url' =>
  string(10) "/admin.php"
  'referrer' =>
  string(42) "https://cities-mods.com/admin.php?add-ons/"
  '_GET' =>
  array(0) {
  }
  '_POST' =>
  array(0) {
  }
}

I have temporarily disabled your add-on while awaiting further notice, and my website appears to return to normal after disabling it.
The crash is fixed in v1.1.1, which is now available. Please upgrade via Admin CP > Add-ons.

What happened: v1.1.0 added a return-type declaration to two methods this add-on shares with XenForo core (the control-panel home and the Add-ons page). XenForo links every add-on that extends the same class into a single chain, and that stricter declaration made another add-on in the chain - ThemeHouse's Donate, in your case - incompatible, which is the "must be compatible" fatal you saw. v1.1.1 matches core's method signatures exactly, so the add-on now coexists cleanly with Donate and anything else that extends those pages.

No reconfiguration is needed - your options, schedule and any per-add-on choices are preserved. You can re-enable the add-on after upgrading. Apologies for the disruption, and thanks again for flagging it with the stack trace.

Looking at your function to poll various resource end-points made me realize one thing: XenForo needs a generally-public API endpoint, and user-generatable API-Key endpoints to reliably query and not direct page scraping.

I know within ./admin.php?api-keys/add there are resource* items, but that requires a manual API key to be generated by an admin, and not an end-user.

That'd be a pretty neat feature for a future XenForo version.
One distinction worth drawing out: the keys under admin.php?api-keys/add are the REST API keys of your own forum - they let an external app read your install's data (including your own Resource Manager resources if you run XFRM). They cannot authenticate against xenforo.com. So even an admin-generated key does not help here: what this add-on would need is a public, or user-key-generatable, resource-version endpoint on xenforo.com, and that simply does not exist. That is exactly the platform feature you are describing, and it would have to come from XenForo.

Because of that, reading each resource page's structured data (JSON-LD) is the only key-free way to get a version for xenforo.com today, which is what this add-on does. No central server, nothing about your installed add-ons sent anywhere.

There is one place a real API is reachable: a non-xenforo.com marketplace that runs XFRM with its REST API enabled, where you can generate a key for that site. In that case the add-on could query its API instead of scraping. It is on the roadmap as an opt-in, though it is niche - it never helps xenforo.com, the main source - and it needs careful key handling. In the meantime the practical improvements are conditional requests (ETag / If-Modified-Since) and more resilient parsing, so the lack of an API hurts less.

If XenForo ever ships the public/user-key resource API you are describing, switching to it would be the first thing I would do - it would be more reliable than parsing pages and lighter on the marketplaces. Worth a XenForo suggestion thread; I would back it.
 
One distinction worth drawing out: the keys under admin.php?api-keys/add are the REST API keys of your own forum - they let an external app read your install's data (including your own Resource Manager resources if you run XFRM). They cannot authenticate against xenforo.com. So even an admin-generated key does not help here: what this add-on would need is a public, or user-key-generatable, resource-version endpoint on xenforo.com, and that simply does not exist. That is exactly the platform feature you are describing, and it would have to come from XenForo.

Because of that, reading each resource page's structured data (JSON-LD) is the only key-free way to get a version for xenforo.com today, which is what this add-on does. No central server, nothing about your installed add-ons sent anywhere.

There is one place a real API is reachable: a non-xenforo.com marketplace that runs XFRM with its REST API enabled, where you can generate a key for that site. In that case the add-on could query its API instead of scraping. It is on the roadmap as an opt-in, though it is niche - it never helps xenforo.com, the main source - and it needs careful key handling. In the meantime the practical improvements are conditional requests (ETag / If-Modified-Since) and more resilient parsing, so the lack of an API hurts less.

If XenForo ever ships the public/user-key resource API you are describing, switching to it would be the first thing I would do - it would be more reliable than parsing pages and lighter on the marketplaces. Worth a XenForo suggestion thread; I would back it.
I tried adding an additional post earlier with that exact reasoning, but Cloudflare's WAF wasn't having any of it. :( Here's what I had originally posted, after expansive editing to make it play nice with the WAF...

I can generate a guest-level API key on the ACP, and I can query stuff like this, with the right scope limitation set:
Code:
curl -H 'XF-Api-Key: rU5FfJgQzVVydI1JNuIO6UXYdCi3WDET' 'https://forum.some-domain-name.tld/api/'
which returns
Code:
{
    "version_id": 2031070,
    "site_title": "Some Forum Name",
    "base_url": "https://forum.some-domain-name.tld",
    "api_url": "https://forum.some-domain-name.tld/api/",
    "key": {
        "type": "guest",
        "user_id": null,
        "allow_all_scopes": false,
        "scopes": {
            "resource:read": true,
            "resource_category:read": true,
            "resource_rating:read": true
        }
    }
}

Then can add-in the scope: /resources?limit=5' to the API URL endpont to get details.

I'd love it if the API functionality was greatly extended to:

1. Allow user-creatable API keys on the forum. With an expansive API control panel for the administration to dictate what can and cannot be allowed in user-generated API key scopes, in addition to setting API key overrides.
2. A setting to toggle global / anon access API to the forum API, but with greatly limited scope in what can be viewed (date posted, last updated, id, name of item, etc.)

The Admin-only API stuff is indeed a start, but is highly limiting for end-users like yourself.

Either way, I've added your addon to my forum, it shows promise! (y)
 
There is a slight bug encountered with off-site hosted downloads, with the use developer site option unticked.

"Multi Prefix 2.17.3 - You have 2.17.2, latest is 2.17.3" Clicking download in this instance directs me to <https://xenforo.com/community/resources/multi-prefix.6281/download> which is a "no permission to download page" as the downloaded is hosted off site by the addon author. Possible to link the download to the scraped link provided?
 
qubn updated Free Add-on Update Notifier with a new update entry:

Free Add-on Update Notifier v1.1.2 - Download button fix for off-site-hosted add-ons

Free Add-on Update Notifier v1.1.2​

A small bug fix for the Download button on update rows. No settings change.



Fixed: Download button no longer dead-ends for off-site downloads​

For an add-on whose author hosts the download off the marketplace (an external download URL), the Download button pointed at the marketplace's /download path, which is a "no permission to download" page - so the button appeared to do nothing...

Read the rest of this update entry...
 
I tried adding an additional post earlier with that exact reasoning, but Cloudflare's WAF wasn't having any of it. :( Here's what I had originally posted, after expansive editing to make it play nice with the WAF...

I can generate a guest-level API key on the ACP, and I can query stuff like this, with the right scope limitation set:
Code:
curl -H 'XF-Api-Key: rU5FfJgQzVVydI1JNuIO6UXYdCi3WDET' 'https://forum.some-domain-name.tld/api/'
which returns
Code:
{
    "version_id": 2031070,
    "site_title": "Some Forum Name",
    "base_url": "https://forum.some-domain-name.tld",
    "api_url": "https://forum.some-domain-name.tld/api/",
    "key": {
        "type": "guest",
        "user_id": null,
        "allow_all_scopes": false,
        "scopes": {
            "resource:read": true,
            "resource_category:read": true,
            "resource_rating:read": true
        }
    }
}

Then can add-in the scope: /resources?limit=5' to the API URL endpont to get details.

I'd love it if the API functionality was greatly extended to:

1. Allow user-creatable API keys on the forum. With an expansive API control panel for the administration to dictate what can and cannot be allowed in user-generated API key scopes, in addition to setting API key overrides.
2. A setting to toggle global / anon access API to the forum API, but with greatly limited scope in what can be viewed (date posted, last updated, id, name of item, etc.)

The Admin-only API stuff is indeed a start, but is highly limiting for end-users like yourself.

Either way, I've added your addon to my forum, it shows promise! (y)
XF does support guest-type API keys (your "type": "guest" output), so an app can read resource:read / resource_category:read without a user account at all. Your curl example is exactly the shape of request I'd want to make.

The constraint that actually bites is one step earlier: that key still has to be generated in the ACP of the forum being queried (key creation is super-admin only - there's no end-user flow in core). You can do that on your own forum, or any you administer, which is why your example works against forum.some-domain-name.tld. But you can't mint one on xenforo.com - so xenforo.com, the marketplace this add-on mostly checks, stays scrape-only for now.

For a self-hosted or third-party XFRM marketplace where you can mint a key like that, this add-on could query /api/resources with it instead of scraping the page - cleaner and more reliable. That's the "check a marketplace via its API" opt-in on my roadmap, and your post is basically the reference implementation for it. If you'd be up for testing against your forum once I build it, that'd be ideal.

On your two asks - they're the right ones to put to XenForo, and the interesting part is how much of them is already reachable from an add-on rather than needing core changes:
  • User-creatable keys - the ApiKey entity and ManagerService can already mint scoped keys programmatically; what's missing is a front-end flow for a logged-in member to generate and revoke their own, with admin-controlled limits on which scopes they may request. That's an add-on UI problem, not a core-API gap.
  • Scoped anonymous / global read - an API controller can already opt a specific endpoint out of the key requirement by overriding allowUnauthenticatedRequest(); core's own oEmbed and OAuth2 controllers do exactly that, so a scoped public read is doable without touching core. There's just no global "make the whole API public" switch - it's per-endpoint by design, which is arguably the safer default anyway.
So a "public resource version API" is genuinely buildable as an add-on for any marketplace that installs it - it just can't retrofit xenforo.com itself. The pieces that are not native, and would have to be built, are the operational ones: rate limiting, API usage logging, and an OpenAPI/Swagger spec.

If anything, the more interesting half is webhooks. XF already ships a native, signed, retrying webhook system, and add-ons can register their own event types - XFRM, for instance, fires one on a new resource version. So "new version released -> webhook" is mostly a configuration story today rather than something you'd build from scratch.

I'd still back a suggestion thread for the two core-level asks - user-generated tokens and a first-class public read mode would be cleaner coming from core than re-implemented per add-on.

There is a slight bug encountered with off-site hosted downloads, with the use developer site option unticked.

"Multi Prefix 2.17.3 - You have 2.17.2, latest is 2.17.3" Clicking download in this instance directs me to <https://xenforo.com/community/resources/multi-prefix.6281/download> which is a "no permission to download page" as the downloaded is hosted off site by the addon author. Possible to link the download to the scraped link provided?
Confirmed and fixed in v1.1.2 (just released).

It happened because he Download button always pointed at the marketplace's /download path (...resources/multi-prefix.6281/download). For an add-on whose author hosts the file off-site (XFRM external download URL), that is the "no permission to download" page you hit rather than a download.

I checked whether I could scrape the real download link from the resource page instead, but xenforo.com's page only exposes the version - its JSON-LD has no download URL, and there's no /download link rendered for an external resource - so there's nothing reliable to point at. The fix: the Download button now shows only when there is a genuine direct link (when "prefer the developer's download site" is on and the add-on lists one). Otherwise the row's View on XenForo.com link is the action - it opens the resource page, where the author's real download control is, hosted or off-site. So for Multi Prefix you'll land on the resource page instead of the dead-end.
 
Checking 4 of 4 add-ons that publish a version on a supported marketplace. 1 official XenForo add-ons update through your license. 34 add-ons have no public version we can read.
Hi,

I wonder, you doesnt support @AndyB's Addons?
 
And an Error:
  • GuzzleHttp\Exception\ClientException: FreeUpdateNotifier: failed checking resource 7915: Client error: GET https://xenforo.com/community/resources/standard-library-by-xon.7915/ resulted in a 403 Forbidden response
  • src/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Code:
Stack-Trace
#0 src/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response), NULL, Array, NULL)
#1 src/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 src/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), NULL)
#3 src/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
#4 src/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Promise\TaskQueue->run(true)
#5 src/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
#6 src/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
#7 src/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
#8 src/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
#9 src/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\Promise\Promise->wait()
#10 src/vendor/guzzlehttp/guzzle/src/ClientTrait.php(44): GuzzleHttp\Client->request('GET', 'https://xenforo...', Array)
#11 src/addons/Qubn/FreeUpdateNotifier/Helper.php(440): GuzzleHttp\Client->get('https://xenforo...', Array)
#12 src/addons/Qubn/FreeUpdateNotifier/Job/CheckUpdates.php(86): Qubn\FreeUpdateNotifier\Helper::checkForUpdate(Object(XF\AddOn\AddOn), false)
#13 src/XF/Job/Manager.php(275): Qubn\FreeUpdateNotifier\Job\CheckUpdates->run(8)
#14 src/XF/Job/Manager.php(205): XF\Job\Manager->runJobInternal(Array, 8)
#15 src/XF/Job/Manager.php(89): XF\Job\Manager->runJobEntry(Array, 8)
#16 src/XF/Cli/Command/RunJobs.php(58): XF\Job\Manager->runQueue(false, 8)
#17 src/vendor/symfony/console/Command/Command.php(298): XF\Cli\Command\RunJobs->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 src/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 src/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(XF\Cli\Command\RunJobs), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 src/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 src/XF/Cli/Runner.php(115): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 cmd.php(17): XF\Cli\Runner->run()
#23 {main}

Code:
Status der Anfrage
array(1) {
  ["cli"] => string(28) "httpdocs/cmd.php xf:run-jobs"
}
 
qubn updated Free Add-on Update Notifier with a new update entry:

Free Add-on Update Notifier v1.1.3 - Manual update sources + quieter scheduled check

Free Add-on Update Notifier v1.1.3 - Manual update sources + quieter scheduled check​

A scheduled-check bug fix, plus a new option to check add-ons that don't advertise their own resource link.



New: manual update sources​

The notifier finds an add-on's updates by reading a Resource Manager link from its own addon.json. Those fields are optional, though, and many add-ons leave them empty or point them at a support thread - so...

Read the rest of this update entry...
 
Hi,

I wonder, you doesnt support @AndyB's Addons?
And an Error:

Code:
Stack-Trace
#0 src/vendor/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response), NULL, Array, NULL)
#1 src/vendor/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 src/vendor/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), NULL)
#3 src/vendor/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
#4 src/vendor/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\Promise\TaskQueue->run(true)
#5 src/vendor/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\Promise\Promise->invokeWaitFn()
#6 src/vendor/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\Promise\Promise->waitIfPending()
#7 src/vendor/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\Promise\Promise->invokeWaitList()
#8 src/vendor/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\Promise\Promise->waitIfPending()
#9 src/vendor/guzzlehttp/guzzle/src/Client.php(189): GuzzleHttp\Promise\Promise->wait()
#10 src/vendor/guzzlehttp/guzzle/src/ClientTrait.php(44): GuzzleHttp\Client->request('GET', 'https://xenforo...', Array)
#11 src/addons/Qubn/FreeUpdateNotifier/Helper.php(440): GuzzleHttp\Client->get('https://xenforo...', Array)
#12 src/addons/Qubn/FreeUpdateNotifier/Job/CheckUpdates.php(86): Qubn\FreeUpdateNotifier\Helper::checkForUpdate(Object(XF\AddOn\AddOn), false)
#13 src/XF/Job/Manager.php(275): Qubn\FreeUpdateNotifier\Job\CheckUpdates->run(8)
#14 src/XF/Job/Manager.php(205): XF\Job\Manager->runJobInternal(Array, 8)
#15 src/XF/Job/Manager.php(89): XF\Job\Manager->runJobEntry(Array, 8)
#16 src/XF/Cli/Command/RunJobs.php(58): XF\Job\Manager->runQueue(false, 8)
#17 src/vendor/symfony/console/Command/Command.php(298): XF\Cli\Command\RunJobs->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 src/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 src/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(XF\Cli\Command\RunJobs), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 src/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 src/XF/Cli/Runner.php(115): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 cmd.php(17): XF\Cli\Runner->run()
#23 {main}

Code:
Status der Anfrage
array(1) {
  ["cli"] => string(28) "httpdocs/cmd.php xf:run-jobs"
}
The error first. That's fixed in v1.1.3 (just released). The scheduled check was using the HTTP client's default behaviour, so when a resource page returned a non-200 - most likely a Cloudflare 403/429 served to your server's IP - it threw and got written to your server error log as a full stack trace on every cron run. It now treats a non-200 (or an unreachable/timed-out marketplace) as a normal "couldn't check this time," reflected in the coverage line and last-checked time, without logging an exception. Upgrade and those log entries stop.

On AndyB's add-ons. The notifier finds updates by reading a Resource Manager link out of each installed add-on's own addon.json (its dev_url / support_url / faq_url fields) and checking that resource for the latest version. Those fields are optional, though, and many authors leave them empty or point them at a support thread rather than the resource page - so when there's no resource link to follow, the add-on can't be auto-discovered and shows under "no public version source" instead of being monitored. That's what's happening with AndyB's add-ons; they aren't blocked, there's just no resource link inside them for the notifier to read.

1.1.3 adds a fix for exactly that. Under Admin CP > Options > Free Add-on Update Notifier there's now a Manual update sources box - list any add-on that isn't being checked, one per line, as the add-on ID, a space, then its resource URL, e.g.:
Code:
Andy/RemovePasswordReset https://xenforo.com/community/resources/remove-password-reset.10549/
The notifier then checks those from the URL you give. So you can map AndyB's add-ons (or any that don't advertise their own link) and they'll be monitored like the rest.
 
I really want for this add-on to succeed. The biggest gap, I think, is the following:

Checking 4 of 4 add-ons that publish a version on a supported marketplace. 18 add-ons have no public version we can read.

Now, I understand the issue... the devs aren't linking to the resource page itself. Often discussion pages, their own website homepage with loads of resources, no page at all.

Literally, my current process of making sure I have updated version is a google search e.g. https://www.google.com/search?q=site:xenforo.com+"[cXF]+Direct+Message+Button"

... and usually the very first result is the resource page I am looking for.

I wonder if it is not possible to add e.g. a serper.dev API key, and where available, it tries this approach where all others fail?
 
I really want for this add-on to succeed. The biggest gap, I think, is the following:



Now, I understand the issue... the devs aren't linking to the resource page itself. Often discussion pages, their own website homepage with loads of resources, no page at all.

Literally, my current process of making sure I have updated version is a google search e.g. https://www.google.com/search?q=site:xenforo.com+"[cXF]+Direct+Message+Button"

... and usually the very first result is the resource page I am looking for.

I wonder if it is not possible to add e.g. a serper.dev API key, and where available, it tries this approach where all others fail?
The "18 add-ons have no public version we can read" line is a real gap. Those are active add-ons whose addon.json points at no Resource Manager resource: the link fields it scans (dev_url, support_url, faq_url, extra_urls) are all optional, so authors who only link a discussion page, their homepage, or nothing fall out. The current handling is the manual sources option: paste "<addon_id> <resource_url>" once and FUN checks it on every run from then on, so it's a one-time find per add-on, not a search every time. Your serper idea automates that one-time lookup.

One thing though, that search truck only finds add-ons that have a xenforo.com resource page but don't link it. If an author distributes only from their own site, there's no marketplace page to find, so those stay uncheckable regardless. How many of your 18 it recovers depends on how many are actually on xenforo.com versus only on a dev's own site.

For the ones it can find, I'd do it in two layers. First, a free default with no key: a "Find on XenForo.com" link next to each of those add-ons that runs your site:xenforo.com search in your own browser and lands you on the resource page, so you paste the URL into manual sources. Nothing leaves the server, and you confirm the result yourself, since the top hit is sometimes the discussion thread rather than the resource.

Then, the serper.dev fallback as an opt-in, bring-your-own-key, off-by-default option for fully automatic discovery. I'd keep it opt-in rather than built in because it sends your unresolved add-on titles to a third party, so that should be a deliberate choice, the setting would say so plainly, the provider wouldn't be hardcoded, and any URL it returns would still go through FUN's existing /resources/{id} validation before it's trusted, since rankings can be gamed.

No timeline, but that's the direction, the free helper by default, the search-API fallback as an opt-in layer. If you have specific add-ons sitting in that bucket, send them over and it'll help me prioritize.
 
Yeah cool that sounds good. For now, I will hard-code those values into the field you provided. I just figured for many, the automation would be ideal - so that it is install and done. Thanks for your reply :)
 
I think its useless. Never has been shown any addon that needs updating.
 
I think its useless. Never has been shown any addon that needs updating.
Works without too much issue here.

I do have a request for @qubn though: once an addon has been manually updated and the version match, hide that particular addon from the list.
 
I think its useless. Never has been shown any addon that needs updating.

I found it only really 'works' if you map out each of the add-on name to resource page URLs. The current biggest limitation of the add-on is discoverability of this. Once it is known, it works reliably.
 
Back
Top Bottom