PySide6 PyQt Migration — check your code for free

This free tool flags PyQt imports and PyQt-only APIs that need changes for LGPL PySide6, with a fix for each line.

PySide6 PyQt Migration — check your code for free
Example of the result this page gives you

Try it freeFull version · $149 once →

How it works
  1. Enter your details in the free version below.
  2. See your result right away on this page.
  3. Need more? The full version adds what is listed under "What you get".

What you get: The whole workspace in one pass plus an exportable migration report per file for release or licence sign-off

Updated 2026-09-29 · ReadyStack

Try it freeFull version →

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.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

Open VSX (Cursor, VSCodium)

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get one email when this rule changes
We watch the regulation and vendor sources behind PySide6 Migration Lint: PyQt5/PyQt6 Licence Gate every day. When a rule changes, you get a single email with what changed and the updated check. No newsletter.

Get the full version $29

The whole workspace in one pass plus an exportable migration report per file for release or licence sign-off

One payment, one licence key for this tool. The key is shown right after payment.

Commercial PyQt licence from Riverbank Computing: 670 USD per developer (price page read 2026-09-29)

Buy the full version — $29

Need more than this one? ReadyStack Pass opens all 679 files and 561 full versions — $29/month or $199/year. See the Pass →

ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

Migrate from PyQt5 to PySide6: 6 findings in one invoice window

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.

What changed, and when

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.

Why find-and-replace fails

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.

What the lint does

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.

The 14 rules

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.

Free and full version

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.

15 seconds — what it actually does

Questions people ask

What does PySide6 Migration Lint do?

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.

Who is PySide6 Migration Lint for?

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.

Why not just find-and-replace PyQt5 with PySide6?

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.

What is free and what needs a licence key?

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.

What does staying on PyQt cost instead?

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.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Privacy: your e-mail is used only to send you the answer. A question appears on this page only after it is answered, without your e-mail.

Embed this tool on your site (free)

Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.

 All embeddable tools

For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →

For a team or company: for an invoice with your company details, a quote or several licences, write to [email protected].

More in Developer tools See all →