Designer fields -> paths and identifiersHow generated names are derived
Directory names are derived from user-configured Project, Service, Module, Connector and Endpoint properties; names from the canonical example are not reserved conventions.
When to use
Use this reference before naming project entities or when locating generated output for an item from the designer.
Behavior
- Project, Service and Module names are entered by the user in their corresponding designer property panels.
- The archive root uses Project name after lowercasing and removing whitespace.
- A service directory uses Service name after lowercasing and removing whitespace.
- A module directory uses Module name exactly as configured. ServiceGen does not invent model or *_service_api module names.
- modulePath and repoPath determine repository/import coordinates; they do not normally determine the local service or module directory.
- Connector and Endpoint names are normalized by a target-language backend for schema subdirectories, files, packages and symbols.
- Function file and symbol names come from functionName and use the target language naming convention.
Path normalization
ServiceGen uses ToLowerWithoutSpaces for project and service directory names: every Unicode whitespace character is removed and remaining characters are lowercased. ModuleDirPath returns Module.name directly. Language backends then apply their own identifier conversion for crates, npm packages, C++ symbols, Go packages and source filenames.
Why a module becomes an API or model package
A Module has no built-in model or API category. Its generated contents are determined by graph references. Public types assigned through Type.module make it a shared model package. An HTTP connector assigned through DataConnector.module adds OpenAPI sources/bindings. A gRPC connector assigned to it adds protobuf sources/bindings. Public functions can place business stubs in the same or another Module.
Designer fields that control generated names
The source property and the generated artifact it controls.
Project.nameProject / GeneralArchive root: lower-case value with whitespace removed. Also used as fallback Docker project identity.
Project.repoPathProject / GeneralRemote orchestration repository. Its final path segment becomes the Docker/Compose project prefix when the repository reference is valid.
Project.moduleVersionProject / GeneralVersion used when publishing and pinning generated service/module repositories.
Service.nameService / GeneralLocal service directory, graph filename, image/service identity and generated display metadata. Directory form is lower-case with whitespace removed.
Service.modulePathService / GeneralRemote repository and language dependency coordinate for the service; not the local directory name.
Service.programmingLanguageService / GeneralSelects the backend and therefore manifests, source layout, naming rules and runtime implementation.
Module.nameModuleExact local module directory and graph reference used by types, connectors, streams and endpoints.
Module.modulePathModuleRemote repository/import coordinate for the independent module; not the local directory name.
Type.moduleType / GenerationFor a public type, selects the user-defined Module that receives its generated type and serde code.
DataConnector.moduleConnectorSelects the user-defined Module that owns HTTP OpenAPI or gRPC protobuf schemas and generated transport bindings.
Stream.functionModuleStream / FunctionSelects the Module that owns a public generated function stub.
Endpoint.functionModuleEndpoint / FunctionSelects the Module that owns a public endpoint function stub.
DataConnector.nameConnector / GeneralBecomes a normalized schema package/subdirectory and generated connector/client/server identifiers.
Endpoint.nameEndpoint / GeneralBecomes a normalized schema operation path/file and generated endpoint identity.
functionNameStream or Endpoint / FunctionBecomes the business stub symbol and language-normalized source filename.
Name-to-path examples
Project.name = "Payments Platform"
-> paymentsplatform/
Service.name = "Order API"
-> paymentsplatform/orderapi/
Module.name = "shared_contracts"
-> paymentsplatform/shared_contracts/
Module.modulePath = "github.com/acme/contracts"
-> repository/import coordinate only
HTTP Connector.name = "Public Orders API"
-> shared_contracts/openapi/publicordersapi/...
Endpoint.name = "Create Order"
-> normalized operation path/file below that connector