Files
zitadel/CONTRIBUTING.md
Elio Bischof 37acd2a9d9 chore: rehaul DevX (#10571)
# Which Problems Are Solved

Replaces Turbo by Nx and lays the foundation for the next CI
improvements. It enables using Nx Cloud to speed the up the pipelines
that affect any node package.
It streamlines the dev experience for frontend and backend developers by
providing the following commands:

| Task | Command | Notes |
|------|---------|--------|
| **Production** | `nx run PROJECT:prod` | Production server |
| **Develop** | `nx run PROJECT:dev` | Hot reloading development server
|
| **Test** | `nx run PROJECT:test` | Run all tests |
| **Lint** | `nx run PROJECT:lint` | Check code style |
| **Lint Fix** | `nx run PROJECT:lint-fix` | Auto-fix style issues |

The following values can be used for PROJECT:

- @zitadel/zitadel (root commands)
- @zitadel/api,
- @zitadel/login,
- @zitadel/console,
- @zitadel/docs,
- @zitadel/client
- @zitadel/proto

The project names and folders are streamlined:

| Old Folder | New Folder |
| --- | --- |
| ./e2e | ./tests/functional-ui |
| ./load-test | ./benchmark |
| ./build/zitadel | ./apps/api |
| ./console | ./apps/console (postponed so the PR is reviewable) |

Also, all references to the TypeScript repo are removed so we can
archive it.

# How the Problems Are Solved

- Ran `npx nx@latest init`
- Replaced all turbo.json by project.json and fixed the target configs
- Removed Turbo dependency
- All JavaScript related code affected by a PRs changes is
quality-checked using the `nx affected` command
- We move PR checks that are runnable using Nx into the `check`
workflow. For workflows where we don't use Nx, yet, we restore
previously built dependency artifacts from Nx.
- We only use a single and easy to understand dev container
- The CONTRIBUTING.md is streamlined
- The setup with a generated client pat is orchestrated with Nx
- Everything related to the TypeScript repo is updated or removed. A
**Deploy with Vercel** button is added to the docs and the
CONTRIBUTING.md.

# Additional Changes

- NPM package names have a consistent pattern.
- Docker bake is removed. The login container is built and released like
the core container.
- The integration tests build the login container before running, so
they don't rely on the login container action anymore. This fixes
consistently failing checks on PRs from forks.
- The docs build in GitHub actions is removed, as we already build on
Vercel.

# Additional Context

- Internal discussion:
https://zitadel.slack.com/archives/C087ADF8LRX/p1756277884928169
- Workflow dispatch test:
https://github.com/zitadel/zitadel/actions/runs/17760122959

---------

Co-authored-by: Florian Forster <florian@zitadel.com>
Co-authored-by: Tim Möhlmann <tim+github@zitadel.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
(cherry picked from commit f69a6ed4f3)

# Conflicts:
#	.github/workflows/build.yml
#	.github/workflows/console.yml
#	.github/workflows/core.yml
#	CONTRIBUTING.md
#	Makefile
#	backend/v3/storage/database/events_testing/events_test.go
#	backend/v3/storage/database/events_testing/id_provider_instance_test.go
#	backend/v3/storage/database/events_testing/instance_test.go
#	console/README.md
#	console/package.json
#	internal/api/grpc/group/v2/integration_test/query_test.go
#	pnpm-lock.yaml
2025-10-09 16:53:19 +02:00

37 KiB

Contributing to Zitadel

Zitadel is an open-source identity and access management platform built with a modern tech stack including Go (API), Next.js/React (Login), Angular (Console), and Docusaurus (Docs) - all orchestrated through an Nx monorepo with pnpm for efficient development workflows.

Quick Start

  1. Clone the repository: git clone https://github.com/zitadel/zitadel or open it in a local Dev Container or create a GitHub Codespace

  2. If you cloned the repository to your local machine, install the required development dependencies

    WSL2 on Windows 10 users (click to expand)

    For Cypress tests on WSL2, you may need to configure X11 forwarding. Following suggestions here and here. Use at your own risk.

    1. Install VcXsrv Windows X Server
    2. Set shortcut target to "C:\Program Files\VcXsrv\xlaunch.exe" -ac
    3. In WSL2: export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
    4. Disable access control when starting XLaunch
  3. Use Corepack to make sure you have pnpm installed in the correct version: corepack enable.

  4. Install node module dependencies: pnpm install

  5. Generate code pnpm nx run-many --target generate

  6. Optionally, install the following VSCode plugins:

Jump to the dedicated sections for developing a specific project:

Development Commands Cheat Sheet

This repository contains multiple interconnected projects. You can build and start any project with Nx commands.

Task Command Notes Details
Production pnpm nx run PROJECT:prod Production server
Develop pnpm nx run PROJECT:dev Development server
Generate pnpm nx run PROJECT:generate Generate .gitignored files
Generate Go Files pnpm nx run @zitadel/api:generate-go Regenerate checked-in files This is needed to generate files using Stringer, Enumer or gomock
Test - Unit pnpm nx run PROJECT:test-unit Run unit tests
Test - Integration pnpm nx run PROJECT:test-integration Run integration tests Learn mnore about how to debug API integration tests
Test - Integration Stop pnpm nx run PROJECT:test-integration-stop Stop integration containers
Test - Functional UI pnpm nx run @zitadel/functional-ui:test Run functional UI tests Learn more about how to develop the Console and opening the interactive Test Suite
Test - Functional UI Stop pnpm nx run @zitadel/functional-ui:stop Run functional UI containers
Test pnpm nx run PROJECT:test Run all tests
Lint pnpm nx run PROJECT:lint Check code style
Lint Fix pnpm nx run PROJECT:lint-fix Auto-fix style issues

Replace PROJECT with one of the following:

  • @zitadel/zitadel (you can omit this root level project when using pnpm nx run, like pnpm nx run db)
  • @zitadel/api
  • @zitadel/login
  • @zitadel/console
  • @zitadel/docs
  • @zitadel/client
  • @zitadel/proto

Instead of the project names, you can also use their directory names for PROJECT, like pnpm nx run login:dev. Alternatively, you can use the infix-notation, like pnpm nx dev @zitadel/login or pnpm nx dev login. To stream all logs instead of opening the interactive terminal, disable the TUI with pnpm nx --tui false .... If a command is stuck because a process is already running, stop the Nx daemon and try again: pnpm nx daemon --stop.

Introduction

Thank you for your interest in contributing! As you might know there is more than code to contribute. You can find all information needed to start contributing here.

Please give us and our community the chance to get rid of security vulnerabilities by responsibly disclosing these issues to security@zitadel.com.

The strongest part of a community is the possibility to share thoughts. That's why we try to react as soon as possible to your ideas, thoughts and feedback. We love to discuss as much as possible in an open space like in the issues and discussions section here or in our chat, but we understand your doubts and provide further contact options here.

If you want to give an answer or be part of discussions please be kind. Treat others like you want to be treated. Read more about our code of conduct here.

What can I contribute?

For people who are new to Zitadel: We flag issues which are a good starting point to start contributing. You can find them here. We add the label "good first issue" for problems we think are a good starting point to contribute to Zitadel.

Help shape the future of Zitadel:

Make Zitadel more popular and give it a

Follow @zitadel on twitter

Contribute

How to contribute

We strongly recommend talking to us before you start contributing to streamline your work with ours.

We accept contributions through pull requests. You need a github account for that. If you are unfamiliar with git have a look at Github's documentation on creating forks and creating pull requests. Please draft the pull request as soon as possible. Go through the following checklist before you submit the final pull request:

Components

The code consists of the following parts:

name description language where to find Development Guide
API implementation Service that serves the grpc(-web) and RESTful API go API implementation Contribute to API
API definitions Specifications of the API Protobuf ./proto/zitadel Contribute to API
Console Frontend the user interacts with after log in Angular, Typescript ./console Contribute to Frontend
Login Modern authentication UI built with Next.js Next.js, React, TypeScript ./apps/login Contribute to Frontend
Docs Project documentation made with docusaurus Docusaurus ./docs Contribute to Frontend
translations Internationalization files for default languages YAML ./console and ./internal Contribute Translations

Please follow the guides to validate and test the code before you contribute.

Submitting a pull request (PR)

  1. Fork the zitadel/zitadel repository on GitHub

  2. On your fork, commit your changes to a new branch

    git checkout -b my-fix-branch main

  3. Make your changes following the guidelines in this guide. Make sure that all tests pass.

  4. Commit the changes on the new branch

    git commit --all

  5. Merge the latest commit of the main-branch

  6. Push the changes to your branch on Github

    git push origin my-fix-branch

  7. Use Semantic Release commit messages to simplify creation of release notes. In the title of the pull request correct tagging is required and will be requested by the reviewers.

  8. On GitHub, send a pull request to zitadel:main. Request review from one of the maintainers.

Review a pull request

The reviewers will provide you feedback and approve your changes as soon as they are satisfied. If we ask you for changes in the code, you can follow the GitHub Guide to incorporate feedback in your pull request.

Commit messages

Make sure you use semantic release messages format.

<type>(<scope>): <short summary>

Type

Must be one of the following:

  • feat: New Feature
  • fix: Bug Fix
  • docs: Documentation

Scope

This is optional to indicate which component is affected. If in doubt, leave blank (<type>: <short summary>)

Short summary

Provide a brief description of the change.

Quality assurance

Please make sure you cover your changes with tests before marking a Pull Request as ready for review:

  • Integration tests against the gRPC server ensure that one or multiple API calls that belong together return the expected results.
  • Integration tests against the gRPC server ensure that probable good and bad read and write permissions are tested.
  • Integration tests against the gRPC server ensure that the API is easily usable despite eventual consistency.
  • Integration tests against the gRPC server ensure that all probable login and registration flows are covered."
  • Integration tests ensure that certain commands emit expected events that trigger notifications.
  • Integration tests ensure that certain events trigger expected notifications.

General Guidelines

Gender Neutrality and Inclusive Language

We are committed to creating a welcoming and inclusive community for all developers, regardless of their gender identity or expression. To achieve this, we are actively working to ensure that our contribution guidelines are gender-neutral and use inclusive language.

Use gender-neutral pronouns: Don't use gender-specific pronouns unless the person you're referring to is actually that gender. In particular, don't use he, him, his, she, or her as gender-neutral pronouns, and don't use he/she or (s)he or other such punctuational approaches. Instead, use the singular they.

Choose gender-neutral alternatives: Opt for gender-neutral terms instead of gendered ones whenever possible. Replace "policeman" with "police officer," "manpower" with "workforce," and "businessman" with "entrepreneur" or "businessperson."

Avoid ableist language: Ableist language includes words or phrases such as crazy, insane, blind to or blind eye to, cripple, dumb, and others. Choose alternative words depending on the context.

API

Zitadel follows an API first approach. This means all features can not only be accessed via the UI but also via the API. The API is designed to be used by different clients, such as web applications, mobile applications, and other services. Therefore, the API is designed to be easy to use, consistent, and reliable. Please check out the dedicated API guidelines page when contributing to the API.

Contribute to API

To start developing, make sure you followed the quick start steps.

Develop the API

Optionally build the Console

pnpm nx run @zitadel/api:build-console

Optionally start the Login in another terminal

pnpm nx run @zitadel/login:prod

Run the local development database.

pnpm nx db

Start a debug session in your IDE. For example, in VSCode, you can use a launch.json configuration like this.

   {
      "name": "Debug Zitadel API",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "env": {
            "ZITADEL_DATABASE_POSTGRES_HOST": "${env:DEVCONTAINER_DB_HOST}"
      },
      "program": "main.go",
      "args": [
            "start-from-init",
            "--config",
            "${workspaceFolder}/apps/api/prod-default.yaml",
            "--steps",
            "${workspaceFolder}/apps/api/prod-default.yaml",
            "--masterkey",
            "MasterkeyNeedsToHave32Characters"
      ]
   }

If you have built the Console and started the Login, visit http://localhost:8080/ui/console?login_hint=zitadel-admin@zitadel.localhost and enter Password1! to log in.

Call the API using the generated with grpcurl or grpcui, for example:

grpcurl -plaintext -H "Authorization: Bearer $(cat admin.pat)" localhost:8080 zitadel.user.v2.UserService.ListUsers

To connect to the database and explore Zitadel data, run psql "host=${DEVCONTAINER_DB_HOST:-localhost} dbname=zitadel sslmode=disable".

Run API Unit Tests

To test the code without dependencies, run the unit tests:

pnpm nx run @zitadel/api:test-unit

Run API Integration Tests

API tests are run as gRPC clients against a running Zitadel server binary. The server binary is built with coverage enabled.

pnpm nx run @zitadel/api:test-integration

To develop and run the test cases from within your IDE or by the command line, start only the API. The actual integration test clients reside in the integration_test subdirectory of the package they aim to test. Integration test files use the integration build tag, in order to be excluded from regular unit tests. Because of the server-client split, Go is usually unaware of changes in server code and tends to cache test results. Pass -count 1 to disable test caching.

pnpm nx run @zitadel/api:test-integration-run-api

Example command to run a single package integration test:

go test -count 1 -tags integration ./internal/api/grpc/management/integration_test

To run all available integration tests:

go test -count 1 -tags integration -parallel 1 $(go list -tags integration ./... | grep -e \"integration_test\" -e \"events_testing\")

It is also possible to run the API in a debugger and run the integrations tests against it. In order to run the server, a database with correctly set up data is required. When starting the debugger, make sure the Zitadel binary starts with start-from-init --config=./apps/api/test-integration-api.yaml --steps=./apps/api/test-integration-api.yaml --masterkey=MasterkeyNeedsToHave32Characters"

To cleanup after testing (deletes the ephemeral database!):

pnpm nx run @zitadel/devcontainer:compose down db-api-integration cache-api-integration

Run Functional UI Tests

To test the whole system, including the Console UI and the Login UI, run the Functional UI tests.

# If you made changes in the tests/functional-ui directory, make sure you reformat the files
pnpm nx run @zitadel/functional-ui:lint-fix

# Run the tests
pnpm nx run @zitadel/functional-ui:test

Contribute Frontend Code

This repository uses pnpm as package manager and Nx for build orchestration.

Project Overview

Choose your contribution area:

  • Login App (Next.js/React) - Modern authentication flows
  • Console (Angular) - Admin dashboard and user management
  • Docs (Docusaurus) - Project documentation
  • Client Packages - Shared libraries for API communication

Project Dependencies

apps/login → packages/zitadel-client → packages/zitadel-proto
console → packages/zitadel-client → packages/zitadel-proto
docs → (independent)

Nx handles this automatically - when you change zitadel-proto, Nx rebuilds dependent projects.

Contribute to Login

The Login UI is a Next.js application that provides the user interface for authentication flows. It is MIT-licensed, so you are free to change and deploy it as you like. It's located in the apps/login directory and uses pnpm and Nx for development. Get familiar with the Login ui docs.

To start developing, make sure you followed the quick start steps.

Develop the Login against a local API

Run the local development database.

pnpm nx db

In another terminal, start the API

pnpm nx run @zitadel/api:prod

In another terminal, start the Login development server

pnpm nx run @zitadel/login:dev

Visit http://localhost:8080/ui/console?login_hint=zitadel-admin@zitadel.localhost and enter Password1! to log in.

Make some changes to the source code and see how the browser is automatically updated.

Develop against a Cloud instance

If you don't want to build and run a local API, you can just run the Login development server and point it to a cloud instance.

  1. Create a personal access token and point your instance to your local Login, as described in the Docs.
  2. Save the following file to apps/login/.env.dev.local
ZITADEL_API_URL=https://[your-cloud-instance-domain]
ZITADEL_SERVICE_USER_TOKEN=[personal access token for an IAM Login Client]
  1. Start the development server.
pnpm nx run @zitadel/login:dev

Visit http://localhost:8080/ui/console?login_hint=zitadel-admin@zitadel.localhost and enter Password1! to log in.

Login Architecture

The Login application consists of multiple packages:

  • @zitadel/login - Main Next.js application
  • @zitadel/client - TypeScript client library for Zitadel APIs
  • @zitadel/proto - Protocol buffer definitions and generated code

The build process uses Nx and pnpm to orchestrate dependencies:

Pass Login Quality Checks

Reproduce the pipeline quality checks for the code you changed.

# Run Login-related linting builds and unit tests
pnpm nx run-many --projects @zitadel/login @zitadel/client @zitadel/proto --targets lint build test

Fix the quality checks, add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass.

Deploy

  • Deploy with Vercel
  • Build and deploy with Docker: pnpm nx run @zitadel/login:build && docker build -t my-zitadel-login apps/login
  • Build and deploy with NodeJS: pnpm nx run @zitadel/login:prod

Contribute to Console

To learn more about the Console, go to the Consoles README.md.

To start developing, make sure you followed the quick start steps.

Develop the Console against a local API

Run the local development database.

pnpm nx db

In another terminal, start the API

pnpm nx run @zitadel/api:prod

In another terminal, start the Login

pnpm nx run @zitadel/login:prod

Allow the API to redirect to your dev server.

In another terminal, start the Console development server

pnpm nx run @zitadel/console:dev

Visit http://localhost:4200/?login_hint=zitadel-admin@zitadel.localhost and enter Password1! to log in.

Make some changes to the source code and see how the browser is automatically updated.

Develop against a Cloud instance

If you don't want to build and run a local API, you can just run the console development server and point it to a cloud instance.

Save the following file to console/.env.local

ENVIRONMENT_JSON_URL=https://[your-cloud-instance-domain]/ui/console/assets/environment.json

Start the development server.

pnpm nx run @zitadel/console:dev

Allow the API to redirect to your dev server.

Visit http://localhost:4200/?login_hint=zitadel-admin@zitadel.localhost and enter Password1! to log in.

Configure Console Dev Server Redirects

To allow Console access via http://localhost:4200, you have to configure the Zitadel API.

  1. Navigate to http://localhost:8080/ui/console/projects.
  2. Select the ZITADEL project.
  3. Select the Console application.
  4. Select Redirect Settings
  5. Add http://localhost:4200/auth/callback to the Redirect URIs
  6. Add http://localhost:4200/signedout to the Post Logout URIs
  7. Select the Save button

Pass Console Quality Checks

Run the quality checks for the code you changed.

# Run console-related linting builds and unit tests
pnpm nx run-many --projects @zitadel/console @zitadel/client @zitadel/proto @zitadel/functional-ui --targets lint build test

Run functional UI tests against a locally built API and a dev server Console.

Allow the API to redirect to your dev server. Alternatively, create the file tests/functional-ui/.env.open.local with the following content:

CYPRESS_BASE_URL=http://localhost:8080/ui/console
# Run the API and the Console dev server
# Beware this doesn't work from within a dev container.
pnpm nx run @zitadel/functional-ui:open

Or run all tests to completion.

# Run the tests
pnpm nx run @zitadel/functional-ui:test

Fix the quality checks, add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass.

Contribute to Client Packages

To start developing, make sure you followed the quick start steps.

@zitadel/proto: Protocol buffer definitions and generated TypeScript/JavaScript clients.

pnpm nx run @zitadel/proto:generate  # Regenerate after proto changes

@zitadel/client: High-level TypeScript client library with utilities for API interaction.

pnpm nx run @zitadel/client:build  # Build after changes

Contribute to Docs

Project documentation is made with Docusaurus and is located under ./docs. The documentation uses pnpm and Nx for development and build processes.

To start developing, make sure you followed the quick start steps.

Local Development

# Start development server (recommended)
pnpm nx run @zitadel/docs:dev

# Or start production server
pnpm nx run @zitadel/docs:prod

The Docs build process automatically:

  1. Downloads required protoc plugins
  2. Generates gRPC documentation from proto files
  3. Generates API documentation from OpenAPI specs
  4. Copies configuration files
  5. Builds the Docusaurus site

Local testing

The documentation server will be available at http://localhost:3000 with live reload for fast development feedback.

Style guide

  • Code with variables: Make sure that code snippets can be used by setting environment variables, instead of manually replacing a placeholder.
  • Embedded files: When embedding mdx files, make sure the template ist prefixed by "_" (lowdash). The content will be rendered inside the parent page, but is not accessible individually (eg, by search).
  • Don't repeat yourself: When using the same content in multiple places, save and manage the content as separate file and make use of embedded files to import it into other docs pages.
  • Embedded code: You can embed code snippets from a repository. See the plugin for usage.

Following the Google style guide is highly recommended. Its clear and concise guidelines ensure consistency and effective communication within the wider developer community.

The style guide covers a lot of material, so their highlights page provides an overview of its most important points. Some of the points stated in the highlights that we care about most are given below:

  • Be conversational and friendly without being frivolous.
  • Use sentence case for document titles and section headings.
  • Use active voice: make clear who's performing the action.
  • Use descriptive link text.

Docs pull request

When making a pull request use docs(<scope>): <short summary> as title for the semantic release. Scope can be left empty (omit the brackets) or refer to the top navigation sections.

Pass Quality Checks

Verify the Docs build correctly.

pnpm nx run @zitadel/docs:build

Fix the quality checks, add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass.

Contribute Translations

Zitadel loads translations from four files:

You may edit the texts in these files or create a new file for additional language support. Make sure you set the locale (ISO 639-1 code) as the name of the new language file. Please make sure that the languages within the files remain in their own language, e.g. German must always be `Deutsch. If you have added support for a new language, please also ensure that it is added in the list of languages in all the other language files.

You also have to add some changes to the following files:

Did you find a security flaw?

Product management

The Zitadel Team works with an agile product management methodology. You can find all the issues prioritized and ordered in the product board.

Sprint

We want to deliver a new release every second week. So we plan everything in two-week sprints. Each Tuesday we estimate new issues and on Wednesday the last sprint will be reviewed and the next one will be planned. After a sprint ends a new version of Zitadel will be released, and publish to Zitadel Cloud the following Monday.

If there are some critical or urgent issues we will have a look at it earlier, than the two weeks. To show the community the needed information, each issue gets attributes and labels.

About the attributes

You can find the attributes on the project "Product Management".

State

The state should reflect the progress of the issue and what is going on right now.

  • No status: Issue just got added and has to be looked at.
  • 🧐 Investigating: We are currently investigating to find out what the problem is, which priority it should have and what has to be implemented. Or we need some more information from the author.
  • 📨 Product backlog: If an issue is in the backlog, it is not currently being worked on. These are recorded so that they can be worked on in the future. Issues with this state do not have to be completely defined yet.
  • 📝 Prioritized product backlog: An issue with the state "Prioritized Backlog" is ready for the refinement from the perspective of the product owner (PO) to implement. This means the developer can find all the relevant information and acceptance criteria in the issue.
  • 🔖 Ready: The issue is ready to take into a sprint. Difference to "prioritized..." is that the complexity is defined by the team.
  • 📋 Sprint backlog: The issue is scheduled for the current sprint.
  • 🏗 In progress: Someone is working on this issue right now. The issue will get an assignee as soon as it is in progress.
  • Blocked: The issue is blocked until another issue is resolved/done.
  • 👀 In review: The issue is in review. Please add someone to review your issue or let us know that it is ready to review with a comment on your pull request.
  • Done: The issue is implemented and merged to main.

Priority

Priority shows you the priority the Zitadel team has given this issue. In general the higher the demand from customers and community for the feature, the higher the priority.

  • 🌋 Critical: This is a security issue or something that has to be fixed urgently, because the software is not usable or highly vulnerable.
  • 🏔 High: These are the issues the Zitadel team is currently focusing on and will be implemented as soon as possible.
  • 🏕 Medium: After all the high issues are done these will be next.
  • 🏝 Low: This is low in priority and will probably not be implemented in the next time or just if someone has some time in between.

Complexity

This should give you an indication how complex the issue is. It's not about the hours or effort it takes. Everything that is higher than 8 should be split in smaller parts.

1, 2, 3, 5, 8, 13

About the labels

There are a few general labels that don't belong to a specific category.

  • good first issue: This label shows contributors, that it is an easy entry point to start developing on Zitadel.
  • help wanted: The author is seeking help on this topic, this may be from an internal Zitadel team member or external contributors.

Category

The category shows which part of Zitadel is affected.

  • category: backend: The backend includes the APIs, event store, command and query side. This is developed in golang.
  • category: ci: ci is all about continuous integration and pipelines.
  • category: design: All about the ux/ui of Zitadel
  • category: docs: Adjustments or new documentations, this can be found in the docs folder.
  • category: frontend: The frontend concerns on the one hand the Zitadel management Console (Angular) and on the other hand the Login (gohtml)
  • category: infra: Infrastructure does include many different parts. E.g Terraform-provider, docker, metrics, etc.
  • category: translation: Everything concerning translations or new languages

Language

The language shows you in which programming language the affected part is written

  • lang: angular
  • lang: go
  • lang: javascript