Hosting multiple modules
When to use this
One Gateway process should host multiple DLLs, JARs, or mixed-technology modules (for example .NET + Python in one GG).
Prerequisites
Steps
1. Pass comma-separated modules
./gg --modules "./ServiceA.dll,./ServiceB.dll,./plugins/Helper.dll" --runtime netcore --port 8888 --httpPort 8889
2. Mixed runtimes
When modules require different runtimes, host compatible modules together or run separate GG instances per runtime family. GG loads one primary --runtime per process; polyglot in-process hosting works when GG loads multiple runtimes for supported combinations.
Example (directory with Node package):
./gg --modules "./backend.dll,./node-helper" --runtime auto --port 8888
3. Filter per module surface
Combine with --types to expose only facades from a large deployment:
./gg --modules "./Core.dll,./Extensions.dll" --types MyApp.CoreFacade,MyApp.ExtensionsFacade --port 8888
4. Avoid directory scan issues
If --modules is omitted, GG scans the current directory. Crowded directories cause mis-detection. Prefer explicit paths:
cd /opt/my-service ./gg --modules "./bin/MyService.dll" --runtime netcore --port 8888
Verify it works
- Vision shows all loaded modules
- Each module's public types appear in the UGM
- Install commands work per module/package name
Common mistakes
| Mistake | Fix |
|---|---|
| GG loads wrong file from cwd | Use --modules with explicit paths |
| CLR vs netcore mismatch | Match --runtime to your DLL target framework |
| Missing Java JAR packaging | Use JAR paths, not loose .class trees |
See also
- How Graftcode works under the hood
- Configure multiple Grafts (consumer side)