Skip to content
ispyisail edited this page Oct 15, 2026 · 1 revision

Project files: .qetz and .qet

QElectroTech saves a project in one of two kinds of file:

.qetz β€” zipped project .qet β€” project
What it is a zip archive: one file per folio, the symbols, title blocks and pictures as files, and the engineering data in an SQLite database one XML file holding everything
Default for saving yes, since PR #1472 (merged 14 October 2026) it was, before that
Opens in QElectroTech 0.200.1 development builds since 14 October 2026 every version
Size small: compressed, each picture stored once as an image file large: pictures are stored as base64 text

Both hold the same project. Opening a .qetz and saving it as .qet gives the same file a plain .qet save gives, and older .qet files keep opening as they always did.

The format was added as a choice in PR #1462 and made the default in #1472; the discussion behind it is #1440.


1. What Save does now

You… QElectroTech…
save a new project asks for a name in Save as, with the file type Zipped project QElectroTech (*.qetz) selected
save a project opened from a .qetz writes the .qetz again
save a project opened from a .qet writes name.qetz beside name.qet and leaves the .qet as it was. The project is then the .qetz
choose File β†’ Save as lets you pick either file type
choose File β†’ Save a copy for an older QElectroTech writes a .qet copy; the project keeps its own file

The File menu: Save, Save as, then Save a copy for an older QElectroTech, above Close

The first time you save a project opened from a .qet, a message titled Save as a zipped project says what is happening:

This project was opened from name.qet. It is saved as name.qetz, beside it, in the zipped project format; name.qet stays as it is.

To write a file for a version of QElectroTech that cannot open name.qetz, use File > Save a copy for an older QElectroTech.

The Save as a zipped project message after saving grafcet.qet: it is saved as grafcet.qetz beside it, grafcet.qet stays as it is

If name.qetz already exists there, the same message asks Replace it? first; Cancel saves nothing.

The automatic backup (Automatic backup of projects in Settings β†’ Configure QElectroTech β†’ General) saves the same way, without the message: a project opened from a .qet gets its .qetz beside it.

A read-only folder

If the .qetz cannot be written beside the .qet β€” the folder is read-only, for example β€” the save fails with Cannot save and the file name, and the project stays the .qet it was opened from. Use Save as to save it somewhere else. Development builds from 14 October 2026, before PR #1483, showed only "Permission denied" and then named a .qetz that did not exist.


2. Keeping .qet

There is no setting that makes .qet the default again. Two ways to get a .qet:

  • File β†’ Save as, file type Project QElectroTech (*.qet). The project is then that .qet, and later saves write it.
  • File β†’ Save a copy for an older QElectroTech. It writes a .qet and leaves the project on its own file, so later saves still write the .qetz. Use it to hand a project to someone on QElectroTech 0.200.0 or older.

Typing a name ending in .qetz in Save as saves a .qetz whichever file type is selected.


3. Opening

File β†’ Open lists both under QElectroTech project (*.qet *.qetz), and a .qetz opens like any project: from the command line, the recent files list, or a double-click once file types are registered (Β§7).

A .qetz from a later version. The file says which format it is and the oldest format allowed to read it. If a later QElectroTech wrote it but allows this one to read it, the project opens read-only, with the message This project was saved by a later version of QElectroTech. It is opened read-only, so that saving it cannot lose what this version does not know. Use Save As to keep a copy in this version's format. If it does not allow it, the file is refused with a message saying it was made by a later QElectroTech.

A damaged or hand-edited .qetz is refused with a message saying what is wrong: an unsafe or repeated name in the zip, a database whose rows do not match the folio files, and so on. Nothing in the file is run.


4. What is inside

A .qetz is an ordinary zip; any unzip tool opens it.

unzip -l project.qetz
Entry Holds
mimetype application/x-qet-project+zip
manifest.xml the format number, the oldest format allowed to read the file, and the QElectroTech that wrote it
project.xml the project's own settings (defaults for new folios, numbering, cables) and the list of its folios, symbols and title blocks, each pointing to its file
project.sqlite the engineering data, see below
folios/<uuid>.xml one file per folio: what is drawn on it and where
elements/… the project's copy of each symbol it uses, as .elmt files
titleblocks/<name>.titleblock the project's title block templates
images/<sha256>.png each picture once, as an image file

Each fact is kept once. The database holds what things are; the folio files hold where they are drawn:

in project.sqlite in the folio file
Symbol its information (label, comment, manufacturer…), label prefix, cross-reference links which symbol it is, position, rotation
Wire its two ends, number, function, voltage, colour, section its path, where its number is drawn
Folio title block fields and custom variables everything drawn on it
Terminal strip its terminals, their order and bridges the strip as drawn

What QElectroTech works out again when it opens a folio β€” a symbol text that only shows the symbol's information, a wire's description of its ends β€” is not stored at all.

Saving twice gives the same bytes. Every entry is dated 1 January 1980, not with the save time, so a project saved again without changes is byte-for-byte the same file (PR #1467). Development builds from before that wrote dates that unzip tools showed as 1979 or 1901.

The full format β€” every table and column, how rows are keyed, the version rules and what reading checks β€” is sources/container/QETZ-FORMAT.md in the source tree.

The tables in project.sqlite

Table One row per
meta setting of the file, including format
project_property project-wide variable
folio folio, in folio order (pos from 1), with its title block fields as columns
folio_property custom title block variable of a folio
element symbol placed on a folio: its label prefix and frozen-label flag
element_info piece of symbol information (name, value, show)
link cross-reference link of a symbol
conductor wire: its two ends, number, formula, function, voltage, colour, section, cable
terminal_strip, strip_terminal, strip_bridge, strip_bridge_terminal terminal strip, terminal, bridge, bridged terminal

Every row is keyed by its item's uuid β€” a folio, symbol or wire keeps its row when folios are reordered (PR #1473). True/false values are stored as 0/1. The format number is also in PRAGMA user_version.


5. Reading the database yourself

Unzip project.sqlite and open it with any SQLite tool β€” the sqlite3 command line, DB Browser for SQLite, Python, LibreOffice Base:

unzip -o project.qetz project.sqlite -d extracted
sqlite3 extracted/project.sqlite ".tables"
sqlite3 extracted/project.sqlite \
  "SELECT e.uuid, i.value FROM element e
     JOIN element_info i ON i.element_uuid = e.uuid
    WHERE i.name = 'label' ORDER BY i.value;"

Without unzipping, from Python:

import sqlite3, tempfile, zipfile

with tempfile.TemporaryDirectory() as tmp:
    zipfile.ZipFile("project.qetz").extract("project.sqlite", tmp)
    db = sqlite3.connect(f"{tmp}/project.sqlite")
    for folio, title in db.execute("SELECT pos, title FROM folio ORDER BY pos"):
        print(folio, title)
    db.close()

Two things to know:

  • Read, do not edit. QElectroTech checks that the database and the folio files agree when it opens the file, and refuses it if they do not. Change a project in QElectroTech, or with a script.
  • This is not the database the parts list reads. The views behind parts lists, the wiring list and summary tables (element_nomenclature_view, wiring_list_view…) belong to the working database QElectroTech builds when a project opens; they are not in the file. See The project database.

Other tools that take a .qetz:

  • The command line: the exports and --info take a .qetz as they take a .qet, and --resave writes a .qetz when the output name ends in .qetz, a .qet otherwise β€” a way to convert in either direction:

    qelectrotech --resave old.qet new.qetz
    qelectrotech --resave project.qetz for-older-versions.qet

    See CLI Reference.

  • The MCP server reads and writes .qetz (it converts through QElectroTech, so the first read of a big one takes as long as a save).


6. Opening big projects faster

Folios built when they are first shown

Building a folio β€” creating every symbol, wire and text on it β€” is most of the time a big project takes to open. Since PR #1468 (and by default since #1472), QElectroTech reads every folio's title block and data when a project opens, but builds a folio's drawing only when it is needed:

  • opening shows the first folio and builds it;
  • clicking a folio's tab builds that folio the first time, together with the symbols on other folios that its cross-references and folio reports point to;
  • printing, exporting, and Search and replace build every folio first;
  • numbering, the wiring list export, and changing a folio's title, author or revision work from the project database, without building folios.

This works for .qet and .qetz alike, but only for a file that gives every folio, symbol and wire its own uuid β€” anything saved by a recent version. An older file opens with every folio built, as before, and the log says why, for example:

Project opened with every folio built: a folio has no saved uuid

Saving it once with this version adds the uuids (PR #1471).

To build every folio on opening anyway β€” to compare, or if something looks wrong β€” start QElectroTech with the environment variable QET_EAGER_FOLIOS=1:

QET_EAGER_FOLIOS=1 qelectrotech project.qetz

The variable QET_LAZY_FOLIOS=1, which switched this on before #1472, no longer does anything.

What it gives

Measured in PR #1472 on a 136-folio project:

.qet .qetz
Open 23 s 3.5 s
File size 17 MB 2.2 MB

Saving a .qetz writes the folios you have not changed straight from the file without building them. The first save of a .qet as a .qetz builds every folio once.

Pictures

  • In a .qetz, each picture is an image file handed straight to its folio (PR #1470): a project with 140 MB of pictures opened in 3.8 s instead of 11.8 s. A .qet with pictures also opens faster: each picture is decoded once instead of twice.
  • The pictures of one folio are decoded at the same time, one per processor core (PR #1477). A folio with 22 photos opened in 12.5 s instead of 21.3 s. A folio with only one picture gains nothing.
  • A project saved before project uuids were stored no longer copies the whole file twice in memory while opening (PR #1476).

See Pictures on a sheet for what pictures cost in the file.


7. File type registration

System How .qetz is registered
Windows, installer the installer associates .qetz with QElectroTech, like .qet
Windows, portable archive register_filetypes.bat registers .qetz too β€” see Windows without admin rights
Linux MIME type application/x-qet-project+zip, in the shared MIME file and the AppStream data
macOS declared in the application's Info.plist

Development builds from 13–14 October 2026 wrote the MIME type as application/x-qelectrotech-project+zip (PR #1483 renamed it); those files still open, and the Linux MIME file recognises both.


8. Limits

  • QElectroTech 0.200.0 and older cannot open a .qetz. Hand them a copy from File β†’ Save a copy for an older QElectroTech.
  • A .qetz is not one text file. To read or diff it by hand, unzip it: the folio files and project.xml are XML, the engineering data is in the database. For a single XML file, save a .qet.
  • Do not edit the inside of a .qetz by hand. A database row with no item, or an item with no row, makes the file refused.
  • The first save of a .qet as .qetz, printing, exporting and Search and replace still build every folio.

See also

Getting Started

Home

🌐 Languages β€” English Β· FranΓ§ais Β· Deutsch

Downloads

Windows without admin rights β€” the portable archive, no installer

Quick Start Guide

User Manual

FAQ

Tips & Tricks

Guides

Conductors β€” wire properties, what feeds which export, cables, and hops where wires cross

Wires per terminal β€” limit the wires on a terminal, chain wiring instead of stars

Printing and exporting β€” paper, PDF, images, and what each path does differently

Linking elements β€” master, slave, terminal

PLC modules β€” I/O tables and linking a wire to a specific point

Using the element editor β€” drawing tools, saving, checks

Generic devices β€” a quick box symbol with terminals on any side, made by a wizard

Grid size and element size β€” why symbols aren't all the same scale, and scaling one without leaving the grid

Preferences reference β€” what each settings page does

Saving and loading settings β€” your whole setup in one file, to copy or keep

Keyboard-only control β€” mouseless QET, and what still needs a mouse

Mouse modifiers β€” what Shift, Ctrl and Alt change while you drag

3D mouse β€” SpaceMouse pan, zoom and buttons

Aligning items β€” snap symbols back to the grid, or line them up

Pictures on a sheet β€” labels, crop, transparency, what they cost in the file

Arcs and curved wires β€” the Arc tool, pulling an arc in or out, rounding a corner with a fillet, dashed arcs for lighting layouts

Grouping items β€” select, move and copy several items as one

Finding your place on a sheet β€” go to a cell like B13 or 4-B7, keep the headers in sight, show the cell limits, zoom and pan

Showing and hiding kinds of items β€” hide texts, wire numbers, shapes, pictures, tables or cross-references on every sheet

Drawing faster β€” place without dragging, the S shortcut bar, command search, gestures

Customising QElectroTech β€” keys, toolbar size and contents, the gesture ring

Managing collections β€” folders, writability, building your own shortlist

Templates β€” reusable multi-element blocks, placed by double-click or drag

Search & Replace β€” bulk property changes

Building a nomenclature query β€” the BOM/summary table builder

Linking wires across pages β€” sheet reports

Variables & formulas β€” %f, %{label}, sequences

Auto-numbering β€” schemes, sequences, freezing

Terminal strips β€” strips, levels, bridges

Title block templates β€” the .titleblock format

Importing EPLAN parts (.edz) β€” EPLAN Data Portal

DXF import & export β€” two unrelated features, one format; command-line export and layers

Project files β€” .qetz (zipped, the default) and .qet, what is inside, opening big projects faster

The project database β€” the working SQLite database built when a project opens

File formats
Elements XML
Project XML
Development

Building from Source

Contributing Code

Automating QET β€” CLI, XML formats, external tools

CLI Reference β€” command line usage

JavaScript Scripting β€” --run, geometry editing, undo

MCP server β€” let an AI assistant read, verify and edit projects

Connecting an AI assistant β€” setup for Claude, Copilot, Gemini, Codex, Cursor, LM Studio

Script buttons β€” stored scripts with an icon, by hand or by an assistant

Live mode β€” an assistant working in the open project while you watch

Macro recorder β€” record a task by hand, for an assistant to script

Development Roadmap

Vision β€” proposal, under discussion

Developer Tools

About

Features

History

Community

License

Contributing to this Wiki

Clone this wiki locally