Skip to main content

CLI to unpack and pack Fibaro QuickApp (.fqa) files for editing in a normal project layout, with HC3-compatible repack.

Project description

FQA Tool

Current version: v1.0.2

CLI to unpack and pack Fibaro QuickApp (.fqa) files for editing in a normal project layout, with HC3-compatible repack.

  • Unpack: turns an .fqa into a folder with human-readable JSON, Lua files, VS Code workspace, .gitignore, and optional pack scripts (.fqa-tool-path, fqa-pack.py, wrappers).
  • Pack: writes an .fqa using the original format (indent/newline) so the HC3 parser accepts it.

Requires Python 3.7+ (no extra dependencies).

You can run the script with Python or use a Windows executable (see Building Windows executable).

Usage

Run from the folder that contains fqa.py (or put fqa.exe on your PATH). In Windows CMD, paste and run one line at a time (CMD often drops newlines when pasting).

To see the installed fqa version:

python fqa.py --version
fqa --version

Unpack

Unpack an .fqa. By default the project folder is created in the current directory; use -o / --output to specify another directory. If the project folder already exists, you are prompted to overwrite unless you use -y / --yes or --update.

  • -o / --output DIR — Unpack into this directory (default: current directory).
  • -y / --yes — Overwrite existing folder without prompting.
  • --update — Update existing folder in place (no delete). Use this to refresh from a new .fqa without removing the folder (avoids "folder in use" on Windows).
  • -silent — No progress output.

Unpack prints progress (files added/updated) unless -silent is used.

python fqa.py unpack MyQuickApp.fqa
fqa unpack MyQuickApp.fqa
python fqa.py unpack MyQuickApp.fqa -o out
python fqa.py unpack MyQuickApp.fqa -o test --update
python fqa.py unpack MyQuickApp.fqa -y -silent

Pack

Pack a project into an .fqa. Output is written to the current directory as {name}.fqa unless -o / --output is given.

  • -o / --output PATH — Output path: file (e.g. dist/App.fqa) or directory (writes {name}.fqa there).
  • -y / --yes — Overwrite existing .fqa without prompting.
  • -silent — No progress output.
python fqa.py pack MyQuickApp
fqa pack MyQuickApp
python fqa.py pack . -o dist -y

Pack from an unpacked project (fqa-pack)

After unpacking, the project contains a small script and wrappers so you can pack without calling the fqa tool by path. They use a local config file (not committed):

  • .fqa-tool-path — One line: command to run fqa (e.g. python "C:\path\to\fqa.py"). Created by unpack; add to .gitignore (done automatically).
  • fqa-pack.py — Cross-platform script: reads .fqa-tool-path and runs fqa pack . with your args.
  • fqa-pack.bat (Windows), fqa-pack (Mac/Linux) — Wrappers that run fqa-pack.py.

From the project root (the unpacked folder):

python fqa-pack.py
python fqa-pack.py -y -o dist
fqa-pack.bat          # Windows
./fqa-pack            # Mac/Linux

If .fqa-tool-path is missing (e.g. you cloned the repo and didn’t run unpack), create it with one line: the command you use to run fqa (e.g. python "D:\path\to\fqa.py").

Building Windows executable

One-file executable, no Python required on the target machine:

pip install -r requirements-build.txt
build.bat

Output: dist\fqa.exe. Use it like fqa unpack file.fqa and fqa pack project_dir.

For a release (build exe + checksums): python release.py. This produces dist\fqa.exe and dist\SHA256SUMS.txt. To verify: in dist\ run certutil -hashfile fqa.exe SHA256 (Windows) or sha256sum -c SHA256SUMS.txt (Linux/WSL) and compare.

Unpacked layout:

  • main.lua — main script
  • files/*.lua — other Lua files
  • .fqa_original.json — project JSON (human-readable)
  • .fqa_meta.json — schema and file mapping (used by pack)
  • .vscode/ — settings + recommended extensions (Lua, Lua debug, Git Graph)
  • <name>.code-workspace — open this in VS Code
  • .fqa-tool-path — local path to fqa (created by unpack; in .gitignore)
  • fqa-pack.py, fqa-pack.bat, fqa-pack — pack script and wrappers (forward e.g. -y, -silent, -o)

HC3 compatibility

Unpack stores the original .fqa format (newline and indent). Pack reuses it when writing the .fqa, so the result stays compatible with the HC3 parser.

Tested with HC3 firmware 5.200.13.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fqa-1.0.2.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fqa-1.0.2-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file fqa-1.0.2.tar.gz.

File metadata

  • Download URL: fqa-1.0.2.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for fqa-1.0.2.tar.gz
Algorithm Hash digest
SHA256 0f5999a68532456d9ed3c09ffa09345aa2bd633d3d19c9558299588643dd7d54
MD5 80923fe6732b1158521e2b30ca83f706
BLAKE2b-256 9cf93825ce97c90588669b890dd8892355a8f8f10dcf2ef861734ee1f2501629

See more details on using hashes here.

File details

Details for the file fqa-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: fqa-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for fqa-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a43622d3a39c04eda1c13e91e34d0d097b4af696ce95cd7adfbc3b7c09e44dc9
MD5 ebc25ec7e290af836e8e7f232661b623
BLAKE2b-256 2fb79a1c3aa83d7862ba81d3c79189240b93a00b560a4df94cd6af8a0eb3671a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page