Diagnose a problem.
Reduce the system until the failure has one owner: source, runtime surface, native toolchain, or compiler.
Classify the failure
Porffor rejects the source
Look for an unsupported syntax form, an unbundled import, or runtime-generated code.
The native build fails
Check cc, c++, esbuild, Git, or Make depending on the build mode.
The program disagrees with Node
Check the documented runtime boundary, then reduce the behavioral difference.
The program crashes
Rebuild with -d and preserve the complete output and exact input.
Try the specific fix
| Signal | Most likely cause | Action |
|---|---|---|
ImportDeclaration generation error | Plain build received a runtime import | Bundle to one file; type-only imports are safe. |
cc: command not found | No system C compiler | Install one, set CC, or try --compiler=tcc. |
| Timer never fires | No event loop in this build | Use server mode and compile with --event-loop. |
| Server returns 500 for pending async work | Event loop is disabled | Recompile with --event-loop. |
| Server dependency build fails repeatedly | Stale cached native source | Remove only ~/.cache/porffor/deps, then rebuild. |
| Output differs without an error | Stub API such as Proxy, or compiler bug | Reduce and compare against the runtime surface. |
Build a useful reproduction
A strong report is a source file someone can paste into a terminal and run once.
Remove the project
Inline the one function, input, and assertion that still fail.
Remove the environment
Replace external files, clocks, randomness, and network calls with literals.
Show the comparison
Include the exact Porffor command and both actual and expected output.
porf --version
uname -a
# exact compile command
# smallest source file
# Porffor output
# reference output, when applicableSend it to the right place
File reproducible compiler and runtime problems in GitHub Issues ↗. For “is this supported?” questions and uncertain behavior, use the Porffor Discord ↗.
Version, operating system, exact command, minimal file, actual result, expected result. Everything else is optional.