Quick answer: An export contains imported resources and the files they depend on — not your raw source files. Load fonts and textures with load(), never FileAccess on the .ttf or .png. Add data files like *.json to Filters to export non-resource files, include dynamically loaded resources in the export, and check path capitalisation.
Everything works when you press Play, and the exported build shows default fonts, missing textures or a crash on startup. The editor reads your project folder directly; an export reads a packed, imported copy of it. These are the differences that matter.
1. Raw access to imported files
When Godot imports res://fonts/Inter.ttf, the exported game contains the imported version in .godot/imported/, not the original .ttf. So this works in the editor and fails in exports:
var bytes := FileAccess.get_file_as_bytes("res://fonts/Inter.ttf") # missing in export
Use the resource loader, which follows the import remap:
var font: FontFile = load("res://fonts/Inter.ttf")
The same applies to images: use load("res://art/x.png"), not Image.load() on a res:// path.
2. Non-resource files are not exported
JSON, CSV, TXT and other files Godot does not import are left out unless you include them. In Project > Export, select the preset, open the Resources tab and add patterns to Filters to export non-resource files/folders, for example *.json, data/*.
3. Dynamically loaded resources
With an export mode such as Export selected scenes (and dependencies), resources only referenced by string paths in code — load("res://levels/" + name + ".tscn") — are not detected as dependencies and are left out. Use Export all resources in the project, or add the folders to the include filter.
4. Case-sensitive paths
Windows and macOS file systems are usually case-insensitive; the exported PCK and Linux, Android and web are not. load("res://Fonts/inter.ttf") works in the editor on Windows and fails everywhere else. Match paths exactly; Godot prints a warning about case mismatches in the editor, so check the Output panel.
5. Listing directories in exports
DirAccess on an exported project lists .import and .remap files instead of the originals, so code that scans a folder for .png or .tscn finds nothing. Strip the suffix before loading:
for f in DirAccess.get_files_at("res://levels"):
f = f.trim_suffix(".remap").trim_suffix(".import")
if f.ends_with(".tscn"):
levels.append("res://levels/" + f)
From Godot 4.4, ResourceLoader.list_directory() handles this for you.
6. Fonts specifically
If a theme references a system font or a font file outside the project, the export falls back to the default font. Put font files inside the project and reference them from the Theme or theme_override_fonts. For pixel fonts, disable antialiasing and set the font's import settings before exporting.
How to check what was exported
Export with a .zip file name instead of .pck (use Export PCK/ZIP), open the archive and confirm the files you need are inside.