2018-03-17 18:26:18 +05:30
---
comments: false
2018-11-08 19:23:39 +05:30
description: 'Learn how to contribute to GitLab.'
2018-03-17 18:26:18 +05:30
---
2014-09-02 18:07:02 +05:30
2018-03-17 18:26:18 +05:30
# GitLab development guides
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
## Get started!
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
- Setup GitLab's development environment with [GitLab Development Kit (GDK) ](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/README.md )
- [GitLab contributing guide ](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md )
- [Architecture ](architecture.md ) of GitLab
- [Rake tasks ](rake_tasks.md ) for development
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
## Processes
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
- [GitLab core team & GitLab Inc. contribution process ](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/PROCESS.md )
2017-08-17 22:00:37 +05:30
- [Generate a changelog entry with `bin/changelog` ](changelog.md )
2016-09-13 17:45:13 +05:30
- [Code review guidelines ](code_review.md ) for reviewing code and having code reviewed.
2018-03-17 18:26:18 +05:30
- [Automatic CE->EE merge ](automatic_ce_ee_merge.md )
- [Guidelines for implementing Enterprise Edition features ](ee_features.md )
2018-11-08 19:23:39 +05:30
- [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 )
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
## UX and frontend guides
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
- [UX guide ](ux_guide/index.md ) for building GitLab with existing CSS styles and elements
- [Frontend guidelines ](fe_guide/index.md )
- [Emoji guide ](fe_guide/emojis.md )
## Backend guides
- [GitLab utilities ](utilities.md )
- [API styleguide ](api_styleguide.md ) Use this styleguide if you are
contributing to the API.
2018-11-08 19:23:39 +05:30
- [GraphQL API styleguide ](api_graphql_styleguide.md ) Use this
styleguide if you are contribution to the [GraphQL API ](../api/graphql/index.md )
2018-03-17 18:26:18 +05:30
- [Sidekiq guidelines ](sidekiq_style_guide.md ) for working with Sidekiq workers
- [Working with Gitaly ](gitaly.md )
- [Manage feature flags ](feature_flags.md )
- [View sent emails or preview mailers ](emails.md )
- [Shell commands ](shell_commands.md ) in the GitLab codebase
- [`Gemfile` guidelines ](gemfile.md )
2018-11-18 11:00:15 +05:30
- [Pry debugging ](pry_debugging.md )
2018-03-17 18:26:18 +05:30
- [Sidekiq debugging ](sidekiq_debugging.md )
2016-06-02 11:05:42 +05:30
- [Gotchas ](gotchas.md ) to avoid
2018-03-17 18:26:18 +05:30
- [Avoid modules with instance variables ](module_with_instance_variables.md ) if possible
2016-06-02 11:05:42 +05:30
- [How to dump production data to staging ](db_dump.md )
2018-03-17 18:26:18 +05:30
- [Working with the GitHub importer ](github_importer.md )
2018-10-15 14:42:47 +05:30
- [Working with Merge Request diffs ](diffs.md )
2018-11-20 20:47:30 +05:30
- [Prometheus metrics ](prometheus_metrics.md )
2018-03-17 18:26:18 +05:30
## Performance guides
2016-06-02 11:05:42 +05:30
- [Instrumentation ](instrumentation.md )
- [Performance guidelines ](performance.md )
2018-03-17 18:26:18 +05:30
- [Merge request performance guidelines ](merge_request_performance_guidelines.md )
for ensuring merge requests do not negatively impact GitLab performance
2018-11-20 20:47:30 +05:30
- [Profiling ](profiling.md ) for profiling a URL
2018-03-17 18:26:18 +05:30
2018-11-20 20:47:30 +05:30
## Database guides
### Tooling
- [Understanding EXPLAIN plans ](understanding_explain_plans.md )
- [explain.depesz.com ](https://explain.depesz.com/ ) for visualising the output
of `EXPLAIN`
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
### Migrations
2016-09-13 17:45:13 +05:30
- [What requires downtime? ](what_requires_downtime.md )
2018-03-17 18:26:18 +05:30
- [SQL guidelines ](sql.md ) for working with SQL queries
- [Migrations style guide ](migration_style_guide.md ) for creating safe SQL migrations
- [Post deployment migrations ](post_deployment_migrations.md )
- [Background migrations ](background_migrations.md )
- [Swapping tables ](swapping_tables.md )
### Best practices
- [Merge Request checklist ](database_merge_request_checklist.md )
2016-09-13 17:45:13 +05:30
- [Adding database indexes ](adding_database_indexes.md )
2018-03-17 18:26:18 +05:30
- [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 )
- [Database Debugging and Troubleshooting ](database_debugging.md )
- [Query Count Limits ](query_count_limits.md )
## Testing guides
- [Testing standards and style guidelines ](testing_guide/index.md )
- [Frontend testing standards and style guidelines ](testing_guide/frontend_testing.md )
## Documentation guides
2018-11-08 19:23:39 +05:30
- [Writing documentation ](documentation/index.md )
- [Documentation styleguide ](documentation/styleguide.md )
2018-03-17 18:26:18 +05:30
- [Markdown ](../user/markdown.md )
## Internationalization (i18n) guides
- [Introduction ](i18n/index.md )
- [Externalization ](i18n/externalization.md )
- [Translation ](i18n/translation.md )
## Build guides
- [Building a package for testing purposes ](build_test_package.md )
2016-09-13 17:45:13 +05:30
## Compliance
- [Licensing ](licensing.md ) for ensuring license compliance