Update infrastructure for Blender

One endpoint.Every add-onup to date.

Stop writing an updater for every add-on you ship. Register an ID, publish a version, and every user running the LEUC master add-on hears about it the next time Blender opens.

Free for developersNo telemetry by defaultPython SDK + REST
ViewportBlender 5.2
Update availablemajor · breaking
layersClean Panels7.0.78.0.0DownloadChangelog
Update availablepatch
handymanRanTools3.3.163.3.17DownloadChangelog

What your users see, inside Blender

Registry activity
RanTools3.3.183.3.19patchCleanPanels7.0.07.1.0minorNgonLoopSelect3.0.04.0.0majorGeoCables3.0.33.1.0minorGeoPipes1.2.01.3.0minor
The problem

Four add-ons, four update mechanisms, three of them silent.

Every add-on that ships its own updater duplicates the same network code, the same version parsing, and the same failure modes. Users end up on old builds not because they refused an update, but because nothing told them.

See how LEUC handles it
The desktop app

Every Blender you have, in one window.

A free launcher for the other half of the problem: the versions themselves. It finds every Blender you already have, installs new ones from blender.org in a click, and opens each file in the version that made it.

  • Every Blender version in one window, old builds and daily ones alike
  • Move add-ons between versions without reinstalling them
  • One list of your add-ons, with the ones that have an update flagged
  • See how long each version you use is still supported

Free · Windows 10 or newer · no account

The check

One cycle, start to finish.

01

Blender opens

The master add-on collects every installed add-on ID and version in one pass. No per-add-on network code.

02

One file per add-on

Publishing a version writes a static manifest to the edge. The check reads those, cached, and never has to reach the database.

03

Compared on the spot

The module does the semantic comparison itself, and keeps only what changed: latest version, update type, changelog, download URL, criticality.

04

The user is told

A notification inside Blender, with the changelog attached. One click to the download. Nothing to configure.

leuc · update cycleGET /addons/*.json
# blender 5.2 · master add-on 1.4.0$ leuc scan --installed  found 4 add-ons GET /addons/cleanpanels.json{  "addon_id":      "CleanPanels",  "latest_version": "7.1.0",  "update_type":    "minor"} 4 files  ·  edge cache  ·  38 mscompared locally  CleanPanels     7.0.0 → 7.1.0   minor  NGonLoopSelect  3.0.0 → 4.0.0   major · breaking → 2 notifications shown in Blender
The surface

Everything a release needs, and nothing else.

Manifest

One published file per add-on

Every release writes this to the edge. The add-on reads it and compares locally, so a routine check costs a cached file and never touches the database. A REST endpoint exists too, for anything custom.

{
  "addon_id":       "cleanpanels",
  "latest_version": "9.2.3",
  "update_type":    "patch",
  "is_critical":    false,
  "changelog_url":  "/addons/cleanpanels/changelog"
}
Namespace

Your add-on ID is yours

Claim the ID once and it is bound to your account. Nobody else can publish a version under it, and users can verify who shipped what.

Adoption

See which build is actually installed

Version spread, adoption after a release, and the Blender versions your users run. Enough to decide when a legacy branch can be dropped.

Bug reports

The crash reaches you in Discord, not a forum thread

Users file a report from inside Blender — the traceback redacted on their machine and again on arrival, no account, no email. Point an add-on at a Discord webhook and every report lands in the channel the moment it does. Answer in the thread; they read your reply in the same panel they filed from.

#addon-support
Project LEUC APP

Bug report - CleanPanels
AttributeError: 'NoneType' object has no attribute 'panels'
  File "/home/<user>/.config/blender/addons/cleanpanels/core.py", line 88

Ticket leuc-K4TQ-8ZP2WM1X-3RV0DCEA  ·  Blender 4.2  ·  v9.2.3
Click the title to triage this report
Python SDK

Two lines inside your add-on

Drop the module in and register it. It handles the request, the cache, the backoff, and the notification UI.

# __init__.py
from . import addon_update_checker

def register():
    addon_update_checker.register()
How it works

Three steps, either side of the release.

01

Register the add-on

Claim your ID in the dashboard. It is checked against the registry, so collisions are caught before your first release.

02

Publish a version

Push the version, changelog, and download URL — from the dashboard or the API. Mark it critical if users must take it.

03

Watch it land

Adoption shows up per version. You see how fast a release spreads and who is still on the old build.

Start

Ship your next version to everyone at once.