Skip to main content
waniwani eject writes the plumbing into the repo itself and leaves. What comes out is the same tree a build was producing all along, with your source moved under src/app/:
Every @waniwani/kit import gets rewritten to ./_runtime/…, and the dependency drops out of package.json. From then on the repo runs on Skybridge’s own CLI (dev, build, start) with no Waniwani in the loop.
Ejecting in place moves the files instead of copying them, so the originals go once the copy is on disk and the repo is never left holding two versions of a file that can drift. --out <dir> leaves the source repo untouched. Either way the CLI prints what moved. Eject refuses to overwrite existing plumbing unless you pass --force, and it runs one way, with nothing to turn an ejected repo back.

Why the source moves under src/

Your source has to move under src/ for the compiled server to land where Skybridge’s entry wrapper looks for it. tsc derives rootDir from the widest common ancestor of the files it compiles, so source sitting beside src/ rather than inside it pushes every emitted path down a level and the wrapper’s import misses.

The trade eject makes

What an ejected repo gives up is the generator, and with it:
  • the build check, so showWidget("typo") becomes a runtime failure again
  • name-from-filesystem, so adding a widget means editing src/waniwani.ts and adding an entry under src/views/
  • runtime fixes, since src/_runtime/ is a fork from the moment it lands