2017-11-01 11:56:40 -04:00
---
comments: false
2018-05-09 07:07:11 -04:00
description: 'Learn how to contribute to GitLab.'
2017-11-01 11:56:40 -04:00
---
2019-08-12 05:52:48 -04:00
# Contributor and Development Docs
2014-04-24 13:53:18 -04:00
2019-08-22 04:50:31 -04:00
## Get started
2016-08-04 06:45:59 -04:00
2018-09-19 12:03:00 -04:00
- Set up GitLab's development environment with [GitLab Development Kit (GDK) ](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/README.md )
2018-10-11 07:57:49 -04:00
- [GitLab contributing guide ](contributing/index.md )
2020-01-28 16:08:56 -05:00
- [Issues workflow ](contributing/issue_workflow.md ) (issue tracker guidelines, triaging, labels, feature proposals, issue weight, regression issues, technical and UX debt)
- [Merge requests workflow ](contributing/merge_request_workflow.md ) (merge request guidelines, contribution acceptance criteria, definition of done, dependencies)
- [Style guides ](contributing/style_guides.md )
- [Implement design & UI elements ](contributing/design.md )
- [GitLab Architecture Overview ](architecture.md )
2017-10-11 01:59:34 -04:00
- [Rake tasks ](rake_tasks.md ) for development
2016-08-04 06:45:59 -04:00
2017-10-11 01:59:34 -04:00
## Processes
2020-01-28 16:08:56 -05:00
**Must-reads:**
2019-06-16 23:54:09 -04:00
- [Code review guidelines ](code_review.md ) for reviewing code and having code reviewed
2020-01-17 13:08:41 -05:00
- [Database review guidelines ](database_review.md ) for reviewing database-related changes and complex SQL queries, and having them reviewed
2019-09-17 10:16:34 -04:00
- [Pipelines for the GitLab project ](pipelines.md )
2020-01-28 16:08:56 -05:00
Complementary reads:
- [GitLab core team & GitLab Inc. contribution process ](https://gitlab.com/gitlab-org/gitlab/blob/master/PROCESS.md )
2018-05-08 06:55:02 -04:00
- [Security process for developers ](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer )
2020-01-28 16:08:56 -05:00
- [Guidelines for implementing Enterprise Edition features ](ee_features.md )
2019-09-02 20:23:52 -04:00
- [Danger bot ](dangerbot.md )
2020-01-28 16:08:56 -05:00
- [Generate a changelog entry with `bin/changelog` ](changelog.md )
- [Requesting access to Chatops on GitLab.com ](chatops_on_gitlabcom.md#requesting-access ) (for GitLabbers)
2017-10-11 01:59:34 -04:00
2019-07-11 11:00:18 -04:00
## UX and Frontend guides
2016-08-04 06:45:59 -04:00
2018-11-21 10:25:15 -05:00
- [GitLab Design System ](https://design.gitlab.com/ ) for building GitLab with existing CSS styles and elements
2017-03-22 15:30:54 -04:00
- [Frontend guidelines ](fe_guide/index.md )
2017-11-14 17:29:33 -05:00
- [Emoji guide ](fe_guide/emojis.md )
2017-10-11 01:59:34 -04:00
## Backend guides
2017-12-29 01:29:53 -05:00
- [GitLab utilities ](utilities.md )
2019-10-07 02:06:10 -04:00
- [Issuable-like Rails models ](issuable-like-models.md )
2018-11-13 17:43:16 -05:00
- [Logging ](logging.md )
2017-10-11 01:59:34 -04:00
- [API styleguide ](api_styleguide.md ) Use this styleguide if you are
2019-06-16 23:54:09 -04:00
contributing to the API
2018-06-11 23:28:29 -04:00
- [GraphQL API styleguide ](api_graphql_styleguide.md ) Use this
2019-06-14 17:20:32 -04:00
styleguide if you are contributing to the [GraphQL API ](../api/graphql/index.md )
2016-10-21 12:13:41 -04:00
- [Sidekiq guidelines ](sidekiq_style_guide.md ) for working with Sidekiq workers
2017-10-11 01:59:34 -04:00
- [Working with Gitaly ](gitaly.md )
- [Manage feature flags ](feature_flags.md )
2019-05-05 09:57:21 -04:00
- [Licensed feature availability ](licensed_feature_availability.md )
2017-10-11 01:59:34 -04:00
- [View sent emails or preview mailers ](emails.md )
- [Shell commands ](shell_commands.md ) in the GitLab codebase
2017-01-27 06:17:21 -05:00
- [`Gemfile` guidelines ](gemfile.md )
2018-07-20 01:31:51 -04:00
- [Pry debugging ](pry_debugging.md )
2017-10-11 01:59:34 -04:00
- [Sidekiq debugging ](sidekiq_debugging.md )
2019-05-02 06:54:11 -04:00
- [Accessing session data ](session.md )
2017-10-11 01:59:34 -04:00
- [Gotchas ](gotchas.md ) to avoid
2017-11-21 10:15:24 -05:00
- [Avoid modules with instance variables ](module_with_instance_variables.md ) if possible
2017-10-11 01:59:34 -04:00
- [How to dump production data to staging ](db_dump.md )
2017-10-13 12:50:36 -04:00
- [Working with the GitHub importer ](github_importer.md )
2019-01-14 13:18:54 -05:00
- [Import/Export development documentation ](import_export.md )
2020-01-23 16:08:35 -05:00
- [Test Import Project ](import_project.md )
2019-05-05 09:57:21 -04:00
- [Elasticsearch integration docs ](elasticsearch.md )
2018-04-09 17:24:26 -04:00
- [Working with Merge Request diffs ](diffs.md )
2019-01-23 15:48:38 -05:00
- [Kubernetes integration guidelines ](kubernetes.md )
2018-09-10 06:54:52 -04:00
- [Permissions ](permissions.md )
2018-09-04 09:01:34 -04:00
- [Prometheus metrics ](prometheus_metrics.md )
2018-08-16 11:14:14 -04:00
- [Guidelines for reusing abstractions ](reusing_abstractions.md )
2018-10-14 18:58:29 -04:00
- [DeclarativePolicy framework ](policies.md )
2019-03-19 09:25:12 -04:00
- [How Git object deduplication works in GitLab ](git_object_deduplication.md )
2019-05-05 09:57:21 -04:00
- [Geo development ](geo.md )
2019-05-27 04:33:40 -04:00
- [Routing ](routing.md )
2019-06-18 07:11:58 -04:00
- [Repository mirroring ](repository_mirroring.md )
- [Git LFS ](lfs.md )
2019-07-18 23:04:09 -04:00
- [Developing against interacting components or features ](interacting_components.md )
2019-08-23 06:40:04 -04:00
- [File uploads ](uploads.md )
2019-10-02 02:06:28 -04:00
- [Auto DevOps development guide ](auto_devops.md )
2019-11-29 10:06:43 -05:00
- [Mass Inserting Models ](mass_insert.md )
2020-02-07 16:08:39 -05:00
- [Value Stream Analytics development guide ](value_stream_analytics.md )
2019-12-19 01:08:05 -05:00
- [Issue types vs first-class types ](issue_types.md )
2020-01-14 13:08:31 -05:00
- [Application limits ](application_limits.md )
2020-02-06 16:08:48 -05:00
- [Redis guidelines ](redis.md )
2016-08-04 06:45:59 -04:00
2017-10-11 01:59:34 -04:00
## Performance guides
2016-08-04 06:45:59 -04:00
2018-09-18 08:25:22 -04:00
- [Instrumentation ](instrumentation.md ) for Ruby code running in production
environments
- [Performance guidelines ](performance.md ) for writing code, benchmarks, and
certain patterns to avoid
2016-08-19 11:21:00 -04:00
- [Merge request performance guidelines ](merge_request_performance_guidelines.md )
for ensuring merge requests do not negatively impact GitLab performance
2018-09-18 16:17:07 -04:00
- [Profiling ](profiling.md ) a URL, measuring performance using Sherlock, or
tracking down N+1 queries using Bullet
2016-08-04 06:45:59 -04:00
2018-08-14 12:07:15 -04:00
## Database guides
### Tooling
- [Understanding EXPLAIN plans ](understanding_explain_plans.md )
- [explain.depesz.com ](https://explain.depesz.com/ ) for visualising the output
of `EXPLAIN`
2019-07-04 21:54:18 -04:00
- [pgFormatter ](http://sqlformat.darold.net/ ) a PostgreSQL SQL syntax beautifier
2016-08-11 08:22:21 -04:00
2017-10-11 01:59:34 -04:00
### Migrations
2016-08-11 08:22:21 -04:00
2016-08-04 11:17:31 -04:00
- [What requires downtime? ](what_requires_downtime.md )
2017-10-11 01:59:34 -04:00
- [SQL guidelines ](sql.md ) for working with SQL queries
- [Migrations style guide ](migration_style_guide.md ) for creating safe SQL migrations
2019-09-24 02:06:02 -04:00
- [Testing Rails migrations ](testing_guide/testing_migrations_guide.md ) guide
2017-10-11 01:59:34 -04:00
- [Post deployment migrations ](post_deployment_migrations.md )
- [Background migrations ](background_migrations.md )
- [Swapping tables ](swapping_tables.md )
2019-10-20 23:06:30 -04:00
- [Deleting migrations ](deleting_migrations.md )
2017-10-11 01:59:34 -04:00
2019-12-13 16:07:41 -05:00
### Debugging
- Tracing the source of an SQL query using query comments with [Marginalia ](database_query_comments.md )
2019-12-19 01:08:05 -05:00
- Tracing the source of an SQL query in Rails console using [Verbose Query Logs ](https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs )
2019-12-13 16:07:41 -05:00
2017-10-11 01:59:34 -04:00
### Best practices
2016-08-11 08:22:21 -04:00
- [Adding database indexes ](adding_database_indexes.md )
2017-10-11 01:59:34 -04:00
- [Foreign keys & associations ](foreign_keys.md )
- [Single table inheritance ](single_table_inheritance.md )
- [Polymorphic associations ](polymorphic_associations.md )
- [Serializing data ](serializing_data.md )
- [Hash indexes ](hash_indexes.md )
- [Storing SHA1 hashes as binary ](sha1_as_binary.md )
- [Iterating tables in batches ](iterating_tables_in_batches.md )
- [Ordering table columns ](ordering_table_columns.md )
- [Verifying database capabilities ](verifying_database_capabilities.md )
2017-11-15 22:19:14 -05:00
- [Database Debugging and Troubleshooting ](database_debugging.md )
2018-01-15 10:21:04 -05:00
- [Query Count Limits ](query_count_limits.md )
2019-06-25 11:34:35 -04:00
- [Code comments ](code_comments.md )
2019-10-24 17:06:26 -04:00
- [Creating enums ](creating_enums.md )
2020-01-29 04:08:49 -05:00
- [Renaming features ](renaming_features.md )
2017-10-11 01:59:34 -04:00
2019-10-14 11:06:07 -04:00
### Case studies
2019-07-15 09:12:38 -04:00
- [Database case study: Filtering by label ](filtering_by_label.md )
2019-08-22 08:12:28 -04:00
- [Database case study: Namespaces storage statistics ](namespaces_storage_statistics.md )
2019-07-15 09:12:38 -04:00
2019-05-05 20:56:13 -04:00
## Integration guides
- [Jira Connect app ](integrations/jira_connect.md )
2017-10-11 10:33:57 -04:00
## Testing guides
- [Testing standards and style guidelines ](testing_guide/index.md )
- [Frontend testing standards and style guidelines ](testing_guide/frontend_testing.md )
2017-10-11 01:59:34 -04:00
## Documentation guides
2018-06-06 07:32:38 -04:00
- [Writing documentation ](documentation/index.md )
- [Documentation styleguide ](documentation/styleguide.md )
2017-12-15 05:56:21 -05:00
- [Markdown ](../user/markdown.md )
2017-10-11 01:59:34 -04:00
## Internationalization (i18n) guides
2017-05-16 14:26:12 -04:00
2017-10-09 05:28:01 -04:00
- [Introduction ](i18n/index.md )
2017-09-26 17:15:19 -04:00
- [Externalization ](i18n/externalization.md )
- [Translation ](i18n/translation.md )
2017-05-16 14:26:12 -04:00
2019-09-18 10:02:45 -04:00
## Event tracking guides
- [Introduction ](event_tracking/index.md )
- [Frontend tracking guide ](event_tracking/frontend.md )
- [Backend tracking guide ](event_tracking/backend.md )
2019-10-16 11:06:17 -04:00
## Experiment Guide
- [Introduction ](experiment_guide/index.md )
2017-10-11 01:59:34 -04:00
## Build guides
- [Building a package for testing purposes ](build_test_package.md )
2016-08-04 06:45:59 -04:00
## Compliance
- [Licensing ](licensing.md ) for ensuring license compliance
2019-02-06 11:10:12 -05:00
## Go guides
- [Go Guidelines ](go_guide/index.md )
2019-05-17 15:13:55 -04:00
2019-08-05 10:47:46 -04:00
## Shell Scripting guides
- [Shell scripting standards and style guidelines ](shell_scripting_guide/index.md )
2020-01-30 10:09:15 -05:00
## Domain-specific guides
- [CI/CD development documentation ](cicd/index.md )
2019-09-25 14:06:17 -04:00
## Other Development guides
- [Defining relations between files using projections ](projections.md )
2019-05-17 15:13:55 -04:00
## Other GitLab Development Kit (GDK) guides
- [Run full Auto DevOps cycle in a GDK instance ](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/auto_devops.md )
- [Using GitLab Runner with GDK ](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/runner.md )