diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d37fb774ea7276322c247051374558b1e5f83f91..bf4db2cb600ad5c7be5328da66224d5aa468ae9a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,7 +10,7 @@ include:
     file: '/templates/validation.yml'
   - project: 'to-be-continuous/bash'
     ref: '3.3'
-    file: 'templates/gitlab-ci-bash.yml'
+    file: '/templates/gitlab-ci-bash.yml'
   - project: 'to-be-continuous/semantic-release'
     ref: '3.7'
     file: '/templates/gitlab-ci-semrel.yml'
diff --git a/README.md b/README.md
index bbe96c8b9965f2cc20bb59e58c5e92eac5c80118..f3acfc5aeeee1cca9ce5341f5aa9f887742a6844 100644
--- a/README.md
+++ b/README.md
@@ -4,25 +4,48 @@ This project implements a GitLab CI/CD template to build, test and analyse your
 
 ## Usage
 
-In order to include this template in your project, add the following to your `gitlab-ci.yml`:
+This template can be used both as a [CI/CD component](https://docs.gitlab.com/ee/ci/components/#use-a-component-in-a-cicd-configuration) 
+or using the legacy [`include:project`](https://docs.gitlab.com/ee/ci/yaml/index.html#includeproject) syntax.
+
+### Use as a CI/CD component
+
+Add the following to your `gitlab-ci.yml`:
+
+```yaml
+include:
+  # 1: include the component
+  - component: gitlab.com/to-be-continuous/golang/gitlab-ci-golang@4.7.0
+    # 2: set/override component inputs
+    inputs:
+      image: "registry.hub.docker.com/library/golang:buster" # ⚠ this is only an example
+```
+
+### Use as a CI/CD template (legacy)
+
+Add the following to your `gitlab-ci.yml`:
 
 ```yaml
 include:
+  # 1: include the template
   - project: 'to-be-continuous/golang'
     ref: '4.7.0'
     file: '/templates/gitlab-ci-golang.yml'
+
+variables:
+  # 2: set/override template variables
+  GO_IMAGE: "registry.hub.docker.com/library/golang:buster" # ⚠ this is only an example
 ```
 
 ## Global configuration
 
 The Go template uses some global configuration used throughout all jobs.
 
-| Name             | Description                                                                                                | Default value   |
+| Input / Variable | Description                                                                                                | Default value   |
 |------------------|------------------------------------------------------------------------------------------------------------|-----------------|
-| `GO_IMAGE`       | The Docker image used to run Go for `go-build` <br/>:warning: **set the version required by your project** | `registry.hub.docker.com/library/golang:buster` |
-| `GO_TEST_IMAGE`  | The Docker image used to run Go for `go-test` <br/>:warning: **set the version required by your project**  | _none_          |
-| `GO_PROJECT_DIR` | Go project root directory                                                                                  | `.`             |
-| `GOPROXY`        | URL of Go module proxy                                                                                     | _none_          |
+| `image` / `GO_IMAGE` | The Docker image used to run Go for `go-build` <br/>:warning: **set the version required by your project** | `registry.hub.docker.com/library/golang:bookworm` |
+| `test-image` / `GO_TEST_IMAGE` | The Docker image used to run Go for `go-test` <br/>:warning: **set the version required by your project**  | _none_          |
+| `project-dir` / `GO_PROJECT_DIR` | Go project root directory                                                                                  | `.`             |
+| `goproxy` / `GOPROXY` | URL of Go module proxy                                                                                     | _none_          |
 
 ## Jobs
 
@@ -68,18 +91,18 @@ go-build:
 
 These jobs use the following variable:
 
-| Name                    | Description                                                                                                             | Default value                                 |
+| Input / Variable | Description                                                                                                             | Default value                                 |
 |-------------------------|-------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
-| `GO_BUILD_MODE`         | The template build mode (accepted values are `application`, `modules` and `auto`)                                       | `auto`                                        |
-| `GO_BUILD_FLAGS`        | Flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)                   | `-mod=readonly`                               |
-| `GO_BUILD_LINKER_FLAGS` | Linker flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies) `-ldflags` | `-s -w`                                       |
-| `GO_BUILD_PACKAGES`     | Packages to build with the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)          | `./...`                                       |
-| `GO_TEST_FLAGS`         | Flags used by the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)                                        | `-mod=readonly -v -race`                      |
-| `GO_TEST_PACKAGES`      | Packages to test with the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)                                | `./...`                                       |
-| `GO_LIST_ARGS`          | Arguments used by the list command                                                                                      | `list -u -m -mod=readonly -json all`          |
-| `GO_TARGET_OS`          | The `GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)           | _none_ (fallback to go docker image `GOOS`)   |
-| `GO_TARGET_ARCH`        | The `GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)         | _none_ (fallback to go docker image `GOARCH`) |
-| `GO_COBERTURA_FLAGS`    | The `GOFLAGS` to use with `gocover-cobertura` if needed                                                                 | _none_                                        |
+| `build-mode` / `GO_BUILD_MODE` | The template build mode (accepted values are `application`, `modules` and `auto`)                                       | `auto`                                        |
+| `build-flags` / `GO_BUILD_FLAGS` | Flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)                   | `-mod=readonly`                               |
+| `build-linker-flags` / `GO_BUILD_LINKER_FLAGS` | Linker flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies) `-ldflags` | `-s -w`                                       |
+| `build-packages` / `GO_BUILD_PACKAGES` | Packages to build with the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)          | `./...`                                       |
+| `test-flags` / `GO_TEST_FLAGS` | Flags used by the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)                                        | `-mod=readonly -v -race`                      |
+| `test-packages` / `GO_TEST_PACKAGES` | Packages to test with the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)                                | `./...`                                       |
+| `list-args` / `GO_LIST_ARGS` | Arguments used by the list command                                                                                      | `list -u -m -mod=readonly -json all`          |
+| `target-os` / `GO_TARGET_OS` | The `GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)           | _none_ (fallback to go docker image `GOOS`)   |
+| `target-arch` / `GO_TARGET_ARCH` | The `GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)         | _none_ (fallback to go docker image `GOARCH`) |
+| `cobertura-flags` / `GO_COBERTURA_FLAGS` | The `GOFLAGS` to use with `gocover-cobertura` if needed                                                                 | _none_                                        |
 
 In addition to a textual report in the console, the test jobs produce the following reports, kept for one day:
 
@@ -97,11 +120,11 @@ This job enables a manual [GolangCI-Lint](https://github.com/golangci/golangci-l
 
 It is bound to the `build` stage, and uses the following variables:
 
-| Name                  | Description                                                                                              | Default value                          |
+| Input / Variable | Description                                                                                              | Default value                          |
 |-----------------------|----------------------------------------------------------------------------------------------------------|----------------------------------------|
-| `GO_CI_LINT_IMAGE`    | The Docker image used to run `golangci-lint`                                                             | `registry.hub.docker.com/golangci/golangci-lint:latest-alpine` |
-| `GO_CI_LINT_ARGS`     | `golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options) | `-E gosec,goimports ./...`             |
-| `GO_CI_LINT_DISABLED` | Set to `true` to disable this job                                                                        | _none_(enabled)                        |
+| `ci-lint-image` / `GO_CI_LINT_IMAGE` | The Docker image used to run `golangci-lint`                                                             | `registry.hub.docker.com/golangci/golangci-lint:latest-alpine` |
+| `ci-lint-args` / `GO_CI_LINT_ARGS` | `golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options) | `-E gosec,goimports ./...`             |
+| `ci-lint-disabled` / `GO_CI_LINT_DISABLED` | Set to `true` to disable this job                                                                        | _none_(enabled)                        |
 
 In addition to a textual report in the console, this job produces the following reports, kept for one day:
 
@@ -116,9 +139,9 @@ This job enables a manual [Go-mod-outdated](https://github.com/psampaz/go-mod-ou
 
 It is bound to the `test` stage, and uses the following variables:
 
-| Name                   | Description                                                                                   | Default value     |
+| Input / Variable | Description                                                                                   | Default value     |
 |------------------------|-----------------------------------------------------------------------------------------------|-------------------|
-| `GO_MOD_OUTDATED_ARGS` | `god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage) | `-update -direct` |
+| `mod-outdated-args` / `GO_MOD_OUTDATED_ARGS` | `god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage) | `-update -direct` |
 
 Checking outdated modules can be a long operation and therefore the job is configured to be ran **manually** by default (overridable).
 
@@ -161,11 +184,11 @@ This job generates a [SBOM](https://cyclonedx.org/) file listing installed packa
 
 It is bound to the `test` stage, and uses the following variables:
 
-| Name                  | Description                            | Default value     |
+| Input / Variable | Description                            | Default value     |
 | --------------------- | -------------------------------------- | ----------------- |
-| `GO_SBOM_DISABLED` | Set to `true` to disable this job | _none_ |
-| `GO_SBOM_IMAGE` | Image of cyclonedx-gomod used for SBOM analysis | `registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest` |
-| `GO_SBOM_OPTS` | [@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis | `-main .` |
+| `sbom-disabled` / `GO_SBOM_DISABLED` | Set to `true` to disable this job | _none_ |
+| `sbom-image` / `GO_SBOM_IMAGE` | Image of cyclonedx-gomod used for SBOM analysis | `registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest` |
+| `sbom-opts` / `GO_SBOM_OPTS` | [@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis | `-main .` |
 
 :warning: if you don't have your main class located at the root of your `GO_PROJECT_DIR`, then you will need to override the `-main` option in `GO_SBOM_OPTS` and define your real main class location.
 
@@ -182,7 +205,7 @@ This job enables Vulnerability Management with [Govulncheck](https://go.dev/blog
 
 It is bound to the `test` stage, and uses the following variables:
 
-| Name                  | Description                            | Default value     |
+| Input / Variable | Description                            | Default value     |
 | --------------------- | -------------------------------------- | ----------------- |
-| `GO_VULNCHECK_DISABLED` | Set to `true` to disable this job | _none_ 
-| `GO_VULNCHECK_ARGS`   | `govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags) | `./...` |
\ No newline at end of file
+| `vulncheck-disabled` / `GO_VULNCHECK_DISABLED` | Set to `true` to disable this job | _none_ 
+| `vulncheck-args` / `GO_VULNCHECK_ARGS` | `govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags) | `./...` |
\ No newline at end of file
diff --git a/bumpversion.sh b/bumpversion.sh
index f06829a406ca8da98e570e8ad7d8bb22367b668d..ed44d7b68b0e09f6d2cf557f7a15e52553246341 100755
--- a/bumpversion.sh
+++ b/bumpversion.sh
@@ -27,13 +27,13 @@ if [[ "$curVer" ]]; then
   log_info "Bump version from \\e[33;1m${curVer}\\e[0m to \\e[33;1m${nextVer}\\e[0m (release type: $relType)..."
 
   # replace in README
-  sed -e "s/ref: '$curVer'/ref: '$nextVer'/" README.md > README.md.next
+  sed -e "s/ref: *'$curVer'/ref: '$nextVer'/" -e "s/ref: *\"$curVer\”/ref: \”$nextVer\”/" -e "s/component: *\(.*\)@$curVer/component: \1@$nextVer/" README.md > README.md.next
   mv -f README.md.next README.md
 
   # replace in template and variants
   for tmpl in templates/*.yml
   do
-    sed -e "s/\"$curVer\"/\"$nextVer\"/" "$tmpl" > "$tmpl.next"
+    sed -e "s/command: *\[\"--service\", \"\(.*\)\", \"$curVer\"\]/command: [\"--service\", \"\1\", \"$nextVer\"]/" "$tmpl" > "$tmpl.next"
     mv -f "$tmpl.next" "$tmpl"
   done
 else
diff --git a/kicker.json b/kicker.json
index b5faad7fd4191317631b7e7ac6a547d1d0fcdc58..9c7f91223a954481cd1f3a491af20864dd197fdc 100644
--- a/kicker.json
+++ b/kicker.json
@@ -3,11 +3,13 @@
   "description": "Build, test and analyse your [Go](https://golang.org/) projects",
   "template_path": "templates/gitlab-ci-golang.yml",
   "kind": "build",
+  "prefix": "go",
+  "is_component": true,
   "variables": [
     {
       "name": "GO_IMAGE",
       "description": "The Docker image used to run Go (build+test or build only) - **set the version required by your project**",
-      "default": "registry.hub.docker.com/library/golang:buster"
+      "default": "registry.hub.docker.com/library/golang:bookworm"
     },
     {
       "name": "GO_PROJECT_DIR",
diff --git a/logo.png b/logo.png
index 17ae6fffd14eebeb1eaaa89a4047fac7bb06be46..795421951799ca4ce1c200aefe6bce2e80080195 100644
Binary files a/logo.png and b/logo.png differ
diff --git a/templates/gitlab-ci-golang.yml b/templates/gitlab-ci-golang.yml
index 2abcda5640b8bb6d8e2ff73ae16da7e25fb01729..f7a0c9aa263398a0e11ca3c600f0221dc6c6240f 100644
--- a/templates/gitlab-ci-golang.yml
+++ b/templates/gitlab-ci-golang.yml
@@ -14,6 +14,90 @@
 # Floor, Boston, MA  02110-1301, USA.
 # =========================================================================================
 # default workflow rules: Merge Request pipelines
+spec:
+  inputs:
+    image:
+      description: The Docker image used to run Go (build+test or build only) - **set the version required by your project**
+      default: registry.hub.docker.com/library/golang:bookworm
+    project-dir:
+      description: Go project root directory
+      default: .
+    goproxy:
+      description: URL of Go module proxy (see [Go env](https://golang.org/cmd/go/#hdr-Environment_variables))
+      default: ''
+    test-image:
+      description: Specific Docker image used to run Go tests (as a separate job)
+      default: ''
+    build-flags:
+      description: Flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)
+      default: -mod=readonly
+    build-mode:
+      description: The template build mode (accepted values are `application`, `modules` and `auto`)
+      options:
+      - auto
+      - application
+      - modules
+      default: auto
+    build-linker-flags:
+      description: Linker flags used by the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies) `-ldflags`
+      default: -s -w
+    build-packages:
+      description: Packages to build with the [go build command](https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies)
+      default: ./...
+    target-os:
+      description: |-
+        The `$GOOS` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)
+
+        Fallbacks to default `$GOOS` from the Go Docker image
+      default: ''
+    target-arch:
+      description: |-
+        The `$GOARCH` target [see available values](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)
+
+        Fallbacks to default `$GOARCH` from the Go Docker image
+      default: ''
+    test-flags:
+      description: Flags used by the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)
+      default: -mod=readonly -v -race
+    test-packages:
+      description: Packages to test with the [go test command](https://pkg.go.dev/cmd/go#hdr-Test_packages)
+      default: ./...
+    list-args:
+      description: Arguments used by the list command
+      default: list -u -m -mod=readonly -json all
+    cobertura-flags:
+      description: Build flags to add to use gocover-cobertura, leave blank if not needed
+      default: ''
+    ci-lint-disabled:
+      description: Disable GolangCI-Lint
+      type: boolean
+      default: false
+    ci-lint-image:
+      description: The Docker image used to run `golangci-lint`
+      default: registry.hub.docker.com/golangci/golangci-lint:latest-alpine
+    ci-lint-args:
+      description: '`golangci-lint` [command line arguments](https://github.com/golangci/golangci-lint#command-line-options)'
+      default: -E gosec,goimports ./...
+    mod-outdated-args:
+      description: '`god-mod-outdated` [command line arguments](https://github.com/psampaz/go-mod-outdated#usage'
+      default: -update -direct
+    sbom-disabled:
+      description: Disable Software Bill of Materials
+      type: boolean
+      default: false
+    sbom-image:
+      default: registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest
+    sbom-opts:
+      description: '[@cyclonedx/cyclonedx-gomod options](https://github.com/CycloneDX/cyclonedx-gomod#usage) used for SBOM analysis'
+      default: -main .
+    vulncheck-disabled:
+      description: Disable Govulncheck
+      type: boolean
+      default: false
+    vulncheck-args:
+      description: '`govulncheck` [command line arguments](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck#hdr-Flags)'
+      default: ./...
+---
 workflow:
   rules:
     # prevent branch pipeline when an MR is open (prefer MR pipeline)
@@ -56,67 +140,66 @@ workflow:
 
 variables:
   # variabilized tracking image
-  TBC_TRACKING_IMAGE: "registry.gitlab.com/to-be-continuous/tools/tracking:master"
+  TBC_TRACKING_IMAGE: registry.gitlab.com/to-be-continuous/tools/tracking:master
 
   # Default Go project root directory
-  GO_PROJECT_DIR: .
+  GO_PROJECT_DIR: $[[ inputs.project-dir ]]
 
   # Default Docker image (can be overridden)
-  GO_IMAGE: "registry.hub.docker.com/library/golang:bookworm"
+  GO_IMAGE: $[[ inputs.image ]]
 
   # Default flags for 'build' command
-  GO_BUILD_FLAGS: >-
-    -mod=readonly
+  GO_BUILD_FLAGS: $[[ inputs.build-flags ]]
 
   # Default flags for go build linker
-  GO_BUILD_LINKER_FLAGS: "-s -w"
+  GO_BUILD_LINKER_FLAGS: $[[ inputs.build-linker-flags ]]
 
   # Default packages for 'build' command
-  GO_BUILD_PACKAGES: >-
+  GO_BUILD_PACKAGES: $[[ inputs.build-packages ]]
     ./...
 
   # Default build mode (application/modules/auto)
-  GO_BUILD_MODE: auto
+  GO_BUILD_MODE: $[[ inputs.build-mode ]]
 
   # Default flags for 'test' command
-  GO_TEST_FLAGS: >-
-    -mod=readonly
-    -v
-    -race
+  GO_TEST_FLAGS: $[[ inputs.test-flags ]]
 
   # Default packages for 'test' command
-  GO_TEST_PACKAGES: >-
-    ./...
+  GO_TEST_PACKAGES: $[[ inputs.test-packages ]]
 
   # Default arguments for 'list' command
-  GO_LIST_ARGS : >-
-    list
-    -u
-    -m
-    -mod=readonly
-    -json all
+  GO_LIST_ARGS: $[[ inputs.list-args ]]
 
   # Default arguments for go-mod-outdated command
-  GO_MOD_OUTDATED_ARGS: '-update -direct'
+  GO_MOD_OUTDATED_ARGS: $[[ inputs.mod-outdated-args ]]
 
-  GO_VULNCHECK_ARGS: >-
+  GO_VULNCHECK_ARGS: $[[ inputs.vulncheck-args ]]
     ./...
 
   # Default golangci-lint Docker image (can be overridden)
-  GO_CI_LINT_IMAGE: "registry.hub.docker.com/golangci/golangci-lint:latest-alpine"
+  GO_CI_LINT_IMAGE: $[[ inputs.ci-lint-image ]]
 
   # Default arguments for golangci-lint command
-  GO_CI_LINT_ARGS: '-E gosec,goimports ./...'
+  GO_CI_LINT_ARGS: $[[ inputs.ci-lint-args ]]
+
+  GOPROXY: $[[ inputs.goproxy ]]
+  GO_TEST_IMAGE: $[[ inputs.test-image ]]
+  GO_TARGET_OS: $[[ inputs.target-os ]]
+  GO_TARGET_ARCH: $[[ inputs.target-arch ]]
+  GO_COBERTURA_FLAGS: $[[ inputs.cobertura-flags ]]
+  GO_CI_LINT_DISABLED: $[[ inputs.ci-lint-disabled ]]
+  GO_SBOM_DISABLED: $[[ inputs.sbom-disabled ]]
+  GO_VULNCHECK_DISABLED: $[[ inputs.vulncheck-disabled ]]
 
   # Image of cyclonedx-gomod used for SBOM analysis
-  GO_SBOM_IMAGE: "registry.hub.docker.com/cyclonedx/cyclonedx-gomod:latest"
+  GO_SBOM_IMAGE: $[[ inputs.sbom-image ]]
   # Options for cyclonedx-gomod used for SBOM analysis
-  GO_SBOM_OPTS: "-main ."
+  GO_SBOM_OPTS: $[[ inputs.sbom-opts ]]
 
   # default production ref name (pattern)
-  PROD_REF: '/^(master|main)$/'
+  PROD_REF: /^(master|main)$/
   # default integration ref name (pattern)
-  INTEG_REF: '/^develop$/'
+  INTEG_REF: /^develop$/
 
 stages:
   - build