Open-source Visual FoxPro 9 decompiler

Get your FoxPro source back.

FoxLift reads compiled .exe, .app, .fxp, .scx and .vcx files and writes VFP source you can read, version and rebuild. It runs offline and never needs Visual FoxPro installed.

$ pipx install foxlift

or uv tool install foxlift · pip install foxlift · Python 3.10+

$ foxlift decompile saveorder.fxp -o recovered/
{
  "outdir": "recovered",
  "modules": 1,
  "verified": true
}
$ ls recovered/module_000000
meta.json  source.prg  symbols.txt
$ cat recovered/module_000000/source.prg
LPARAMETERS TCORDERNO
LOCAL LNTOTAL
LNTOTAL = 0
SELECT ORDERS
LOCATE FOR ORDER_NO = TCORDERNO
IF FOUND()
    LNTOTAL = ORDERS.QTY * ORDERS.PRICE
    REPLACE ORDERS.TOTAL WITH LNTOTAL
    MESSAGEBOX("Order " + TCORDERNO + " saved", 64, "Orders")
ELSE
    WAIT WINDOW "Order not found" NOWAIT
ENDIF
RETURN LNTOTAL
Recompiled on VFP9, this source gives back the original bytecode and symbol table.

Three commands.

inspect

See what a binary holds — format, modules, statements, symbols — without writing anything.

foxlift inspect app.exe

decompile

Lift every module to source: one directory per module with source.prg, symbols.txt and per-section verdicts in meta.json.

foxlift decompile app.exe -o recovered/

extract

Unpack an .exe or .app into a project tree named from its own directory: .prg and .mpr source, forms and classes with their methods restored, tables and resources byte-for-byte.

foxlift extract app.exe -o project/
0
verified — every section lifted
2
partial — output written, each miss marked in place with its reason
1
refused — not a supported VFP file

Add --json to any command for machine-readable output.

Measured, not guessed.

103,363 / 103,363
sections lift across 19 public VFP repositories
5,476 / 5,476
compiled programs lift in the same repositories
29,595 / 29,597
form and class sections recompile on VFP9 to the original statement bytecode
13,976 / 13,978
sections lift on sealed repositories no rule was ever tuned on

Every figure is checked against a real Visual FoxPro 9 SP2 compiler. Reproduce the round trip yourself.

What can't come back.

Compilation throws some things away. FoxLift proves each loss on a real VFP9 instead of inventing a replacement.

  • Comments are never compiled.
  • Identifier case is not kept in the symbol table.
  • DECLARE parameter names are discarded.
  • WAIT WINDOW clause order is canonicalised by the compiler.

Protected or encrypted applications are not supported. Only decompile software you own or are authorized to inspect.