Flags PyQt5/PyQt6 imports (GPL v3 or a paid Riverbank licence) and the PyQt-only APIs that break under LGPL PySide6: pyqtSignal, pyqtSlot, uic.loadUi, QRegExp, exec_, sip. One fix per line. Runs entirely in your browser — nothing is uploaded.
Same engine as the VS Code extension, byte for byte.
This page is the working piece. The full pack has everything below.
14 rules flag PyQt5/PyQt6 imports and the PyQt-only APIs that break under LGPL PySide6, one fix per line
Commercial PyQt licence from Riverbank Computing: 670 USD per developer (price page read 2026-09-29)
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

6 findings in one 24-line PyQt5 invoice window: that is what a Python developer shipping a closed-source desktop app gets before moving from PyQt5 to PySide6. The import line, pyqtSignal, uic.loadUi, QRegExp, pyqtSlot and exec_() all have to change.
PyQt5 and PyQt6 are dual-licensed by Riverbank Computing: GPL v3, or a commercial licence. Riverbank's price page (read 2026-09-29) lists the commercial licence at 670 USD per developer. If your app is closed source and you ship PyQt under the GPL, the GPL asks you to publish your source. PySide6, the Qt for Python binding from The Qt Company, is LGPL v3, which lets a closed-source app link to it dynamically.
The second clock is Qt itself. PyQt5 runs on Qt 5.15, and The Qt Company ended Qt 5.15 standard support on 2025-05-26; 5.15.19 was the last Qt 5.15 release. On 2026-09-29 that is 491 days without standard support.
The obvious port is a search for "PyQt5" and a replace with "PySide6". It fixes the imports and nothing else. PySide6 has no pyqtSignal, pyqtSlot or pyqtProperty (it has Signal, Slot and Property). It has no uic module, so uic.loadUi needs QUiLoader or pyside6-uic. It has no QVariant. Qt 6 removed QRegExp, QDesktopWidget and QFontMetrics.width, and moved QAction from QtWidgets to QtGui. The file may import cleanly and then fail on the first signal connection, often on a path the tests never run.
PySide6 Migration Lint reads 2 inputs, the .py source text and today's date, and runs 14 rules. Each finding gives the line number and the PySide6 replacement. Comments are ignored, so a note like "# was: from PyQt5 import ..." stays quiet.
On the sample file, dirty.py, it reports:
The ported clean.py returns 0 findings. The PyQt5 import finding also carries the Qt 5.15 day count for the date you enter, so a file checked on 2025-03-01 says standard support ends in 86 days.
pyqt5-import, pyqt6-import, pyqt-signal, pyqt-slot, pyqt-property, uic-loadui, sip-module, pyqt-version-const, qvariant, qregexp, qdesktopwidget, fontmetrics-width, qaction-qtwidgets and exec-underscore.
The free version checks one .py file at a time with all 14 rules, in VS Code or on the web page, with no key. The full version scans the whole workspace in one pass and exports a migration report per file for release or licence sign-off.
It does not rewrite code and it is not legal advice: it shows which lines still tie you to PyQt, so you can port them or keep paying for a commercial PyQt licence.
It reads 2 inputs, the .py source text and today's date, and runs 14 rules that flag every PyQt5 or PyQt6 import and every PyQt-only API such as pyqtSignal, pyqtSlot, uic.loadUi, QRegExp, sip and exec_(). Each finding names the line and the PySide6 replacement. A sample PyQt5 invoice window returns 6 findings.
Python developers and small software companies who ship a closed-source desktop application built on PyQt5 or PyQt6, and who want to move to LGPL PySide6 instead of paying for a commercial PyQt licence per developer. It also suits teams still on Qt 5.15, whose standard support ended on 2025-05-26.
A text replace fixes the import lines only. Names like pyqtSignal, pyqtSlot, pyqtProperty, uic.loadUi, QVariant and QRegExp do not exist in PySide6, and QAction moved to QtGui in Qt 6. The file then fails at import time or on the first signal, often on a path your tests never run.
Free, with no key: one .py file at a time, with both inputs (source text and date), all 14 rules, and a fix line for every finding, in VS Code or the free web version. The licence key adds the whole workspace in one pass and an exportable migration report per file for release or licence sign-off.
Riverbank Computing lists its commercial PyQt licence at 670 USD per developer (price page read 2026-09-29), and a closed-source app that ships PyQt under the GPL v3 must publish its source. PySide6 is LGPL v3 from The Qt Company. This lint shows which lines still tie you to PyQt before you choose.
One question, answered by the person who built it. Your email only if you want the answer sent.