# 08 — Re-enable file-format importers > **Verdict: re-enable now.** The exclusions are stale or incidental, not technical. The > Altium blocker was fixed months ago (the fix is already force-included into every TU), and > the other five eeschema importers were cut for "MVP scoping" while their parsers compile > for wasm anyway. Re-enabling is **net-negative diff** — it deletes fork gates. Configure- > confident but runtime-untested: smoke-test each with a sample file before declaring done. ## Altium (eeschema + pcbnew) — the blocker is already fixed **The recorded blocker was real:** `thirdparty/compoundfilereader/compoundfilereader.h:264` does `typedef std::basic_string utf16string;`, and the libc++ shipped in Emscripten 4.0.2 removed the generic `std::char_traits` base template (deprecated LLVM 18, removed LLVM 19 via llvm/llvm-project#72694 — the same break hit nlohmann/json #4490, qpdf #1024). Plain `std::basic_string` fails to compile with `implicit instantiation of undefined template 'std::char_traits'`. **The fix already exists and is already active.** `wasm/stubs/char_traits_uint16_workaround.h` defines `std::char_traits` and is **force-included into every KiCad TU** via `-include` in `CMAKE_CXX_FLAGS` (`scripts/kicad/build-kicad-target.sh:343`). A standalone compile test with the project's own emsdk confirms `compoundfilereader.h` compiles clean with the specialization in scope. (Upstream KiCad hit the identical bug on Apple clang ≥17 and ships the same specialization gated `#ifdef __APPLE__` in the vendored header.) No other `basic_string` use exists anywhere in the tree outside this header. So the Altium exclusions are simply stale. **Remove these fork-added gates** (each removal *reduces* the diff): ``` common/CMakeLists.txt # io/altium 4 files gated NOT EMSCRIPTEN eeschema/CMakeLists.txt # importer block; altium lines eeschema/sch_io/sch_io_mgr.cpp # #ifndef __EMSCRIPTEN__ includes + factory cases pcbnew/CMakeLists.txt # add_subdirectory(pcb_io/altium) gate + PCBNEW_IO_LIBRARIES dual list pcbnew/pcb_io/pcb_io_mgr.cpp # #ifndef blocks (CircuitMaker/Studio/Designer + Solidworks) ``` `pcb_io/altium`'s deps (pcbcommon, compoundfilereader, magic_enum) are all already built for wasm. One root cause fixes both the eeschema and pcbnew sides. ## Eagle / CADSTAR / LTspice / EasyEDA / EasyEDA-Pro (eeschema) — incidental MVP cut `eeschema/CMakeLists.txt` excludes these in an `if(NOT EMSCRIPTEN)` block with the comment "cross-tool importers we don't need for the MVP and they bring transitive incompatible dependencies in." The dependency half is **false today**, and there's strong evidence the cut was incidental: - All their shared parsers already compile **unconditionally** in `common/CMakeLists.txt` (`io/cadstar/cadstar_archive_parser.cpp`, `io/eagle/eagle_parser.cpp`, `io/easyeda/*`, `io/easyedapro/*`). - **pcbnew's wasm build already ships the equivalents** — CADSTAR, EasyEDA, EasyEDA-Pro, Fabmaster, IPC-2581, ODB++, P-CAD (`pcbnew/CMakeLists.txt`), plus eagle + geda compiled straight into pcbcommon. Only Altium was excluded on the pcbnew side. If pcbnew builds them but eeschema doesn't, the eeschema exclusion is incidental. - Deps are all present: expat (eagle XML), nlohmann (easyeda), wxZip/zlib (easyedapro), plain text (ltspice, cadstar). **Do:** move the five importer groups out of the `if(NOT EMSCRIPTEN)` block in `eeschema/CMakeLists.txt` and drop the matching `#ifndef __EMSCRIPTEN__` cases in `sch_io_mgr.cpp`. (Altium-sch additionally needs the Altium common code from the section above.) Net-negative fork diff; no platform deps. ## Stays impossible / policy - **Database (`SCH_IO_DATABASE`)** — needs nanodbc → ODBC driver manager → native drivers opening TCP to a DB server. No browser path; keep stubbed. (`database_lib_settings.cpp` still compiles for settings-file compatibility — fine.) - **HTTP library (`SCH_IO_HTTP_LIB`)** — already compiled and *registered*, but dead at runtime because the curl stub returns NULL. Reviving it is the curl→fetch shim in [12](12-network-stack.md), not part of this refactor. ## Verification Build, then import: an Eagle `.sch`, an Altium `.SchDoc`/`.PcbDoc`, and one of CADSTAR/EasyEDA. Confirm the importer appears in the File → Import menu and round-trips geometry. The import dialogs use `wxFileDialog` (PARTIAL per `tests/WHATWORKS.md`), so verify the file-open flow too.