SAService Architect Back to designer
SAService ArchitectDocumentation
Code generation Designer fields -> paths and identifiers

How 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.

FieldDesigner groupDescription
Project.nameProject / General

Archive root: lower-case value with whitespace removed. Also used as fallback Docker project identity.

Project.repoPathProject / General

Remote orchestration repository. Its final path segment becomes the Docker/Compose project prefix when the repository reference is valid.

Project.moduleVersionProject / General

Version used when publishing and pinning generated service/module repositories.

Service.nameService / General

Local service directory, graph filename, image/service identity and generated display metadata. Directory form is lower-case with whitespace removed.

Service.modulePathService / General

Remote repository and language dependency coordinate for the service; not the local directory name.

Service.programmingLanguageService / General

Selects the backend and therefore manifests, source layout, naming rules and runtime implementation.

Module.nameModule

Exact local module directory and graph reference used by types, connectors, streams and endpoints.

Module.modulePathModule

Remote repository/import coordinate for the independent module; not the local directory name.

Type.moduleType / Generation

For a public type, selects the user-defined Module that receives its generated type and serde code.

DataConnector.moduleConnector

Selects the user-defined Module that owns HTTP OpenAPI or gRPC protobuf schemas and generated transport bindings.

Stream.functionModuleStream / Function

Selects the Module that owns a public generated function stub.

Endpoint.functionModuleEndpoint / Function

Selects the Module that owns a public endpoint function stub.

DataConnector.nameConnector / General

Becomes a normalized schema package/subdirectory and generated connector/client/server identifiers.

Endpoint.nameEndpoint / General

Becomes a normalized schema operation path/file and generated endpoint identity.

functionNameStream or Endpoint / Function

Becomes 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