# go-jet/jet architecture

> Architecture diagram of the GitHub repository go-jet/jet, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/go-jet/jet
- Repository: https://github.com/go-jet/jet

## Overview

Jet combines schema-driven Go code generation with a type-safe SQL construction and query-result mapping library. The generator connects to a supported database, retrieves schema metadata, and emits SQL-builder and model types; application code then uses those types with Jet’s dialect APIs to build and execute queries and map results into Go destinations. The graph preserves the three dialect families and the statement-cache capability visible in the tree. Several internal links are omitted where the excerpts or documented relationships do not establish the caller or call direction.

Main entry points: [`generator/template/process.go`](https://github.com/go-jet/jet/blob/master/generator/template/process.go) (Template processing), [`qrm/qrm.go`](https://github.com/go-jet/jet/blob/master/qrm/qrm.go) (Query result mapping), [`cmd/jet/main.go`](https://github.com/go-jet/jet/blob/master/cmd/jet/main.go) (Jet generator CLI), [`internal/jet/clause.go`](https://github.com/go-jet/jet/blob/master/internal/jet/clause.go) (SQL expressions and clauses)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Code generation"]
  node_jet_cli["Jet generator CLI<br/>[main.go]"]
  node_mysql_generator["MySQL generator<br/>[mysql_generator.go]"]
  node_postgres_generator["PostgreSQL generator"]
  node_sqlite_generator["SQLite generator"]
  node_mysql_metadata["MySQL metadata queries<br/>[query_set.go]"]
  node_postgres_metadata["PostgreSQL metadata queries<br/>[query_set.go]"]
  node_sqlite_metadata["SQLite metadata queries<br/>[query_set.go]"]
  node_schema_metadata["Schema metadata"]
  node_model_templates["Model templates<br/>[model_template.go]"]
  node_builder_templates["SQL-builder templates"]
  node_template_process["Template processing<br/>[process.go]"]
end

subgraph group_sql["SQL construction"]
  node_sql_ast["SQL expressions and clauses<br/>[clause.go]"]
  node_sql_builder["SQL statement builder<br/>[sql_builder.go]"]
end

subgraph group_mapping["Execution and mapping"]
  node_qrm["Query result mapping<br/>[qrm.go]"]
  node_scan_context["Row scanning<br/>[scan_context.go]"]
  node_stmt_cache["Statement cache<br/>[db.go]"]
end

subgraph group_dialects["Database dialects"]
  node_postgres_api["PostgreSQL SQL API<br/>[expressions.go]"]
  node_mysql_api["MySQL SQL API<br/>[dialect.go]"]
  node_sqlite_api["SQLite SQL API"]
end

node_developer(("Go developer"))
node_database[("Database")]
node_generated["Generated packages"]

node_developer -->|"configures generation"| node_jet_cli
node_jet_cli -->|"selects source"| node_mysql_generator
node_jet_cli -->|"selects source"| node_postgres_generator
node_jet_cli -->|"selects source"| node_sqlite_generator
node_mysql_generator -.->|"retrieves metadata"| node_mysql_metadata
node_postgres_generator -.->|"retrieves metadata"| node_postgres_metadata
node_sqlite_generator -.->|"retrieves metadata"| node_sqlite_metadata
node_mysql_metadata -->|"maps query rows"| node_qrm
node_postgres_metadata -->|"maps query rows"| node_qrm
node_sqlite_metadata -->|"maps query rows"| node_qrm
node_mysql_generator -->|"uses templates"| node_template_process
node_postgres_generator -->|"uses templates"| node_template_process
node_sqlite_generator -->|"uses templates"| node_template_process
node_template_process -->|"processes models"| node_model_templates
node_template_process -->|"processes builders"| node_builder_templates
node_template_process -->|"emits code"| node_generated
node_model_templates -->|"defines model types"| node_generated
node_builder_templates -->|"defines SQL builders"| node_generated
node_developer -->|"writes queries"| node_postgres_api
node_developer -->|"writes queries"| node_mysql_api
node_developer -->|"writes queries"| node_sqlite_api
node_postgres_api -->|"uses shared expressions"| node_sql_ast
node_mysql_api -->|"uses shared expressions"| node_sql_ast
node_sqlite_api -->|"uses shared expressions"| node_sql_ast
node_sql_builder -.->|"builds statements"| node_sql_ast
node_developer -->|"executes and maps"| node_qrm
node_qrm -->|"queries rows"| node_database
node_qrm -.->|"maps scanned rows"| node_scan_context
node_developer -.->|"may cache statements"| node_stmt_cache

click node_jet_cli "https://github.com/go-jet/jet/blob/master/cmd/jet/main.go"
click node_mysql_generator "https://github.com/go-jet/jet/blob/master/generator/mysql/mysql_generator.go"
click node_postgres_generator "https://github.com/go-jet/jet/blob/master/generator/postgres/postgres_generator.go"
click node_sqlite_generator "https://github.com/go-jet/jet/blob/master/generator/sqlite/sqlite_generator.go"
click node_mysql_metadata "https://github.com/go-jet/jet/blob/master/generator/mysql/query_set.go"
click node_postgres_metadata "https://github.com/go-jet/jet/blob/master/generator/postgres/query_set.go"
click node_sqlite_metadata "https://github.com/go-jet/jet/blob/master/generator/sqlite/query_set.go"
click node_schema_metadata "https://github.com/go-jet/jet/blob/master/generator/metadata/schema_meta_data.go"
click node_model_templates "https://github.com/go-jet/jet/blob/master/generator/template/model_template.go"
click node_builder_templates "https://github.com/go-jet/jet/blob/master/generator/template/sql_builder_template.go"
click node_template_process "https://github.com/go-jet/jet/blob/master/generator/template/process.go"
click node_sql_ast "https://github.com/go-jet/jet/blob/master/internal/jet/clause.go"
click node_sql_builder "https://github.com/go-jet/jet/blob/master/internal/jet/sql_builder.go"
click node_postgres_api "https://github.com/go-jet/jet/blob/master/postgres/expressions.go"
click node_mysql_api "https://github.com/go-jet/jet/blob/master/mysql/dialect.go"
click node_sqlite_api "https://github.com/go-jet/jet/blob/master/sqlite/select_statement.go"
click node_qrm "https://github.com/go-jet/jet/blob/master/qrm/qrm.go"
click node_scan_context "https://github.com/go-jet/jet/blob/master/qrm/scan_context.go"
click node_stmt_cache "https://github.com/go-jet/jet/blob/master/stmtcache/db.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_jet_cli,node_mysql_generator,node_postgres_generator,node_sqlite_generator,node_mysql_metadata,node_postgres_metadata,node_sqlite_metadata,node_schema_metadata,node_model_templates,node_builder_templates,node_template_process toneBlue
class node_sql_ast,node_sql_builder,node_database toneAmber
class node_qrm,node_scan_context,node_stmt_cache toneMint
class node_postgres_api,node_mysql_api,node_sqlite_api toneRose
class node_developer,node_generated toneIndigo
```

## Components

### Code generation

- [Jet generator CLI](https://github.com/go-jet/jet/blob/master/cmd/jet/main.go): `cmd/jet/main.go`
- [MySQL generator](https://github.com/go-jet/jet/blob/master/generator/mysql/mysql_generator.go): `generator/mysql/mysql_generator.go`
- [PostgreSQL generator](https://github.com/go-jet/jet/blob/master/generator/postgres/postgres_generator.go): `generator/postgres/postgres_generator.go`
- [SQLite generator](https://github.com/go-jet/jet/blob/master/generator/sqlite/sqlite_generator.go): `generator/sqlite/sqlite_generator.go`
- [MySQL metadata queries](https://github.com/go-jet/jet/blob/master/generator/mysql/query_set.go): `generator/mysql/query_set.go`
- [PostgreSQL metadata queries](https://github.com/go-jet/jet/blob/master/generator/postgres/query_set.go): `generator/postgres/query_set.go`
- [SQLite metadata queries](https://github.com/go-jet/jet/blob/master/generator/sqlite/query_set.go): `generator/sqlite/query_set.go`
- [Schema metadata](https://github.com/go-jet/jet/blob/master/generator/metadata/schema_meta_data.go): `generator/metadata/schema_meta_data.go`
- [Model templates](https://github.com/go-jet/jet/blob/master/generator/template/model_template.go): `generator/template/model_template.go`
- [SQL-builder templates](https://github.com/go-jet/jet/blob/master/generator/template/sql_builder_template.go): `generator/template/sql_builder_template.go`
- [Template processing](https://github.com/go-jet/jet/blob/master/generator/template/process.go): `generator/template/process.go`

### SQL construction

- [SQL expressions and clauses](https://github.com/go-jet/jet/blob/master/internal/jet/clause.go): `internal/jet/clause.go`
- [SQL statement builder](https://github.com/go-jet/jet/blob/master/internal/jet/sql_builder.go): `internal/jet/sql_builder.go`

### Execution and mapping

- [Query result mapping](https://github.com/go-jet/jet/blob/master/qrm/qrm.go): `qrm/qrm.go`
- [Row scanning](https://github.com/go-jet/jet/blob/master/qrm/scan_context.go): `qrm/scan_context.go`
- [Statement cache](https://github.com/go-jet/jet/blob/master/stmtcache/db.go): `stmtcache/db.go`

### Database dialects

- [PostgreSQL SQL API](https://github.com/go-jet/jet/blob/master/postgres/expressions.go): `postgres/expressions.go`
- [MySQL SQL API](https://github.com/go-jet/jet/blob/master/mysql/dialect.go): `mysql/dialect.go`
- [SQLite SQL API](https://github.com/go-jet/jet/blob/master/sqlite/select_statement.go): `sqlite/select_statement.go`

### Other components

- **Go developer**
- **Database**
- **Generated packages**

## Connections

- Go developer → Jet generator CLI: configures generation
- Jet generator CLI → MySQL generator: selects source (evidence: `cmd/jet/main.go`)
- Jet generator CLI → PostgreSQL generator: selects source (evidence: `cmd/jet/main.go`)
- Jet generator CLI → SQLite generator: selects source (evidence: `cmd/jet/main.go`)
- MySQL generator → MySQL metadata queries: retrieves metadata
- PostgreSQL generator → PostgreSQL metadata queries: retrieves metadata
- SQLite generator → SQLite metadata queries: retrieves metadata
- MySQL metadata queries → Query result mapping: maps query rows (evidence: `generator/mysql/query_set.go`)
- PostgreSQL metadata queries → Query result mapping: maps query rows (evidence: `generator/postgres/query_set.go`)
- SQLite metadata queries → Query result mapping: maps query rows (evidence: `generator/sqlite/query_set.go`)
- MySQL generator → Template processing: uses templates (evidence: `generator/mysql/mysql_generator.go`)
- PostgreSQL generator → Template processing: uses templates (evidence: `generator/postgres/postgres_generator.go`)
- SQLite generator → Template processing: uses templates (evidence: `generator/sqlite/sqlite_generator.go`)
- Template processing → Model templates: processes models (evidence: `generator/template/process.go`)
- Template processing → SQL-builder templates: processes builders (evidence: `generator/template/process.go`)
- Template processing → Generated packages: emits code
- Model templates → Generated packages: defines model types
- SQL-builder templates → Generated packages: defines SQL builders
- Go developer → PostgreSQL SQL API: writes queries
- Go developer → MySQL SQL API: writes queries
- Go developer → SQLite SQL API: writes queries
- PostgreSQL SQL API → SQL expressions and clauses: uses shared expressions (evidence: `postgres/expressions.go`)
- MySQL SQL API → SQL expressions and clauses: uses shared expressions (evidence: `mysql/dialect.go`)
- SQLite SQL API → SQL expressions and clauses: uses shared expressions (evidence: `sqlite/select_statement.go`)
- SQL statement builder → SQL expressions and clauses: builds statements
- Go developer → Query result mapping: executes and maps
- Query result mapping → Database: queries rows (evidence: `qrm/qrm.go`)
- Query result mapping → Row scanning: maps scanned rows
- Go developer → Statement cache: may cache statements
