Choose GitLab for your next open source project is a competitor of Github. It’s a service provider for git-based source code repositories that offers much more than it’s bigger brother. In this post I will try to convince you to try it out for your next project.

GitLab is not only a simple git hosting; its features impact the whole development process, the way of contributing to a project, executing and running tests, protecting source code from changes, more and more.


1. Private repositories

Many newcomers to the industry struggle to find git hosting for their projects where they learn how to write good code, they experiment and don’t want to share source code, because it is low quality. On Github all you can get is one private repository, on GitLab… they don’t count. Personally I have several private repositories. I host there my projects from studies, some experiments with new languages as well as assignments in LaTeX. I used GitLab with  my friends to share revision notes before finals. I created a new repository, invited them to my projects as administrators  and we could work together on the same project while no one else could see it. GitLab goes a step ahead of this, so that you can create 3 different types of repositories:

2. Site personalisation

One of its features making GitLab even more user friendly is that you can setup what information you want to see when visiting a project or main page:


Even better, you can choose which style you want to see source code and commit diffs in! Screenshot_20160211_191136

Do I have to tell you, it’s good for people with vision problems?

3. GitLab CI

GitLab offer continuous integration service (GitLab CI) without runners for most languages. GitLab provides its own CI runner and service that is very easy to integrate into your project. Installation instructions are also very easy to follow. You will find it in project settings. This feature has its advantages and disadvantages compared to Github Travis:

+ You can test your project on multiple platforms. If your code is platform dependent, uses some kernel-API, requires some setup before tests are run, or your customer requires your software to work on Java6, Java7 and Java8, you can just setup 3 runners with 3 different environments and run tests on them. I use it to test my code on older versions of Qt on BSD and newer versions of Qt on Linux.
+ You don’t have to deal with old Ubuntu packages if you relay on newer version of a library. We had this problem in qTox where we were forced to turn off Travis because of outdated sqlcipher library
+ You can use your machines, so you control everything. You can write a script to automatically make a deploy using your known ssh key.

You need to provide your own machine that will run tests for you
You are responsible for security of that machine and code you are running there
It’s not everything. GitLab integrates very nicely with other CIs:

  • Atlassian Bamboo CI
  • Jenkins
  • Drone CI
  • JetBrains TeamCity CI

Probably some more… You can enable integration with CIs and other services under your project Settings -> Services

No matter which CI integration you choose, you will get the same view in the UI and each pushed commit will trigger CI build. It works a bit differently than naked Jenkins which you have to configure to start builds every x-hours/minutes. GitLab will automatically trigger build on configured CI when ^HEAD of a branch changes. That means, you can make 10 local commits and push to remote once, so that code will be build once in the CI, or you can push each commit to build it 10 times. Functionality covers also ignoring CI. When you make change in documentation or formatting, you don’t want to waste time, so you can add ‘[skip ci]’ text at the end of the commit message!

It integrates that nicely, that you can forget that you have Jenkins:

Or maybe you’re interested in success rate of your builds? Sure, you can see it on a graph.

4. Supporting open source culture

A couple of years ago SourceForge was one of the biggest supporters of OSS. You could host there your source code, huge binary files like ISO images. The problem with SF was that… it was proprietary itself and a lot of people didn’t and still don’t trust it. When git was created, there was a market gap for more secure, more open source friendly hosting. Github was created to fill the gap, but again… they claim to be open source friendly and at the same time they do not publish their code. Github is too expensive for self hosted solutions. They concentrate probably most on open source projects right now. I know business is business, but let’s take a look at how GitLab does it.

GitLab offers community edition source code on MIT license; they host enterprise edition for you for free on GitLab encourages project managers to specify license, publish and update changelog files and contribution guide. You’re not forced to do it, but it’s a really good practice in open source communities do to it. All of those you can see from the main page of a project:

If you want to, you can host GitLab CE on your server for free. It’s much easier than you think and it runs everything from Raspberry PI to clusters with 30 000 users. Find out more here.

5. Merge requests approves and functionality

When your project becomes more popular, it requires more and more people to look after it. You need to be careful about changes in source code and its quality. You need more eyes on the source code… or you can just automate it. In project settings you can select a list of trusted people who can approve merge requests and number of required approvals to merge changes. It’s enough to get a few of trusted developers who care about your project, they can vote if diff is good quality and can be merged to main code base.


It offers another good function, if you reviewed changes, but CI is still running, you can enable ‘auto-merge’. Merge request will be merged after CI reports green!merge_on_pass
6. Issues

Yes, GitLab has issues. Quite serious. It’s obvious, issue can belong to milestone, can have a few labels and be assigned to a user. On GitLab an issue can also have:

  • weight – how important for developers a change is
  • votes – users can vote on issues important for them! This is what I call contribution to open source communities!
  • labels – I didn’t find out how this can be useful… but at least it’s not disturbing. You can give yourself a medal for reporting an issue… I guess


Now when someone opens me a new issue, they see content of the template in text area :) Isn’t that great? How much time would it save you if you had it 10 years ago? Why don’t you have it yet?

7. Templates!

How often someone opens new issue for a topic that was discussed many times, or users didn’t bother to search for duplicates, or they didn’t try to walk around an issue, or “DOESNT WORK”, or didn’t provide enough details… or… you what. GitLab let’s you specify template of issue and merge request. You can at least try forcing users to deliver you information you need before they click submit. It makes your life easier, saves you a lot of time, helps producing better quality reports and you don’t have to ask the same questions over and over again to every reporter.

8. Milestones are interesting things in GitLab

They work a bit like sprint boards… You can see open, ongoing and completed issues and progress of the whole milestone. It’s a bit like poor man’s JIRA.
We’re getting closer to the end of the list of things I like in GitLab, but remember this list is not complete and you will find more features like protected branches, handy way of creating git hooks to prevent committing .exe, .id, .bin, .o files to your repository, limiting max. file size, simple code review editor for diffs.

GitLab also promotes their fork of git-flow called GitLab flow that similarly as GitHub-flow fixes some issues with bare git-flow, take a read. Some other features that you might want to use in your company are LDAP support, repository mirroring.

9. Groups and permissions

As I mentioned in 1. you can create a group. A group is a list of people who share repositories which can be public, internal or private. Groups are always public, but members of groups have permissions. This systems is more complex, so I will refer you to the official documentation where it’s explained better than I could have explained it.

10. Do you value linear git history?

They solved it on merge request level. You can decide what method will be used to add new commits to your branch. If you don’t mind non-linear history, default settings are good; if you want to avoid merge commits, you can force contributors to rebase their commits on ^HEAD of your branch before merging. This way you can also improve code quality, even if there is no git conflict, there might be a change in source code that breaks tests. Learn more about linear history here.


11. Puzzles aren’t complete

There are some things that GitLab is missing. Many people say it’s web-based notifications. Currently only email-based is supported and more feature complete Android client. Can you live without that?

  • MOS182

    Never heard of GitLab before reading this post. Thanks for posting it! Have been previously using BitBucket for free private repo hosting and using GitHub for some public projects and a couple or private ones thanks to the student deal they offer. Might give GitLab a try sometime soon :)

    • Sytse Sijbrandij

      Great, I hope you like it.

  • Sytse Sijbrandij

    Thank you for your kind words about GitLab. I have not heard people ask for web-based notifications before, is there already an issue for that? The best I could find as one for CI notifications made by a GitLab Inc frontend engineer in the last month

    • I don’t really know if there is an issue for this. A coupe of days ago I was convincing my friend to switch to GitLab with his new project (and he did went to GitLab), on of the points he raised was that GL lacks notification systems, similar like Reddit where you see a list of unseen comments, merge requests and can respond from the same window.

  • dialing_wand

    we’ve been using the self-hosted version of Gitlab (CE) for several years and love it. The current omnibus installs offer easy upgrades and the whole culture at GitLab (if you follow the blogs seems very positive.) We don’t use Gitlab CI, having long ago put our eggs in the Jenkins basket, but we have yet to find a service (Slack, JIRA, Jenkins) that doesn’t easily integrate with it.

    • Sytse Sijbrandij

      Glad to hear that! Hope one of the eggs will test GitLab CI soon :)

    • GitLab CE comes with MatterMost built-in, it’s enough to enable it in some ruby configuration files. MatterMost is opensource alternative to Slack. If you’re on Slack already you probably won’t change to MM, but maybe other will consider it. @sytsesijbrandij:disqus you should make MM most visible to administrators, at my company we found it accidentally ;)

  • Jay K.

    Does GitLab allow syncing between the CE edition and the and github?

    I know I could just push the changes, but it would be nice to just push the changes to my own server and then have them push them to the other services. By branch would be even better (so only commits to master go to other repos).

    • and EE offers repo mirroring. You can just provide URL of remote repo and it will be pulled every one hour. It makes git system decentralised and you don’t have to relay on single server only. It also has extremely easy to manage API and you can just script your setup with webhooks to copy repo on every commit, it’s also in repo settings.

  • Sytse Sijbrandij
  • John

    This is very exciting. A while back gitlab seemed to be way behind github, but now it seems like they have done serious catch-up. This is good news for many people, not least of which are those of us who love software freedom.

  • TheMikester

    Your first point is completely false. You can have as many free repos on GitHub as you like.

    • charlesmparks

      No, he’s right. As he mentions, it’s free _private_ repos, not just free repos. Github does not allow unlimited free private repositories.

    • Luke Swart

      I believe the author is referring to private repositories, which are unlimited in GitLab but are a paid feature in Github.

  • I’ve started using GitLab (Omnibus) at, but I wish I could theme it without fear of losing my changes when I upgrade.

  • pehrlich

    Can I migrate my issues from a private github project?

    • Mike

      Yep. Just go to New Project –> Import project from GitHub

  • Lamont Granquist

    This is going to make my life better. I’ve been trying to figure out how to setup CI on my extremely private git-over-ssh repos that I have which are only used by me. My requirements are private repos, CI, no collaboration, no authn/authz, no merge workflow, and free.

  • Anonymous

    Can you create pages like github pages ( ?

  • Piyush

    …. “its” bigger brother …

  • knocte

    I know some projects which would love to move to gitlab from sourceforge, but you don’t provide mailing lists like the latter, right?

  • Wow, I wrote this post because I think GitLab gets too little attention, less than it “deserves” and this post totally blow up. >500VP on reddit, >300 on HN. Nice to see you here @sytsesijbrandij

    • Sytse Sijbrandij

      Thank you for writing this post, it was amazing to see you explain the advantages of GitLab better than we do ourselves and to see it trend.

  • Premysl Donat

    At company where i work we got a self hosted version where the experience isn’t that great. The worst thing is page load times. When you try to show some bigger diff it can takes dozen of seconds just to show some message saying that the diff is so big that it won’t be shown.


    Actually the “Jenkins” service is only available in Gitlab’s Enterprise Edition.

  • I just want to point out that you don’t “need to provide your own machine that will run tests for you”. If you are set for running builds in a Docker image (a nice idea anyway), the shared GitLab runners will build your project just fine. See for example.

    • Yes, but it covers mostly Ruby.

      • I’m not sure where you got that idea. Maybe the tags? Those shared runners run everything. I use them for Haskell and Nix (plus really everything else that can run in Docker).

        • Sytse Sijbrandij

          Yep, the shared runners will run any docker container and any programming language.

        • Last time I used shared runners builds failed due to missing qmake. Do they run cargo (rust) too?

        • You’ll have to use a Docker image with qmake, or install qmake as part of your test script.

        • Sytse Sijbrandij

          You can just specify a docker image and then add installing qmake/cargo to the before_script

  • I just visited GitLab after a long time ago and between 1000 sign up buttons on every single page where can I actually browse public repositories? You only had 1 job… :)

    Obviously GitLab is going aggressively after GitHubs market now, but how will this sustain in the future? Your points in the article suggest that I get everything for free, but either that is not true or this will have to change in the future, pissing me off then.

    I am cool with GitLab, just want to challenge how it is really better than GitHub, because moving stuff for the sake of it is not good enough for me. It has to have more features than just a black background in my diff, especially because visually impaired people run on high contrast and they don’t care about this.

    Personally I don’t like setting up my own CI. The times where we have to maintain this shit work ourselves are over and anyone who tries to convince me to go back that route is my enemy :).

    Templates and votes are nice little gimmicks. While I like votes I hate templates. Templates feel to users more restrictive than they help maintainers IMHO.

    The milestones feature looks the nicest from what you have shown, but then we already have this + a lot more in proper agile boards. This is one of those features that looks nice in a selling conversation, but then in real life you end up using JIRA or something else, because milestones is lacking a lot of features. Better would be to allow deeper integrations with other popular software instead of duplicating everything…

    I will definitely keep an eye on GitLab, but I don’t see the USP yet…

      • And why can I not just got to and easily browse repositories? There was not even an obvious button which redirects me to …/explore. You had only 1 job… ;)

        • Because GitLab is not a place for talking and meeting new people but for working and making programming easier. You can’t also find all public posts on…

        • damien duncan

          I find your response rather confusing.What has socialising got to do with wanting to find opensource code? Even more confusing since what @dustinmoris:disqus wanted to do, IE use a search function to easily find other open projects code, can be easily achieved in Gitlab,difference being Github doesn’t force you to open an account to do so.

        • Sytse Sijbrandij

          Do you mean you can’t find the button on or on ?

  • Hi

    Issue tracker in gitlab isn’t that great. Most of the time it feels i am working alone.

    Its good if there are features to support adding users to issues (just like cc in bugzilla). Very much needed for corp projects, which is different from outside opensource world.

    • Sytse Sijbrandij

      We use a single issue tracker with 100+ people. You can /cc people by mentioning them.

  • Gambero

    Gitlab issue tracker isn’t so great, issue filtering is a pain:
    – you can’t filter for more than 1 label
    – you can’t combine label filter with text filter
    – default filter fields are not enough for search specific issues
    – no custom fields

    waiting for improvements since months..

    • Sytse Sijbrandij

      I completely agree that labels can use work. We’re working on multi label filtering in and hope for it to land in 8.6. Combining by text filter would also be awesome, consider contributing it.

  • tenfourty

    My issue with this message from Gitlab is basically that they are advocating their software as fully open source but are actually operating a business model that is based around “open core” – they have a fully open source Community Edition and a closed source Enterprise Edition with extra features – how is this any different from what GitHub are doing as they are at least honest that they are closed source only?
    A more honest business model would be to have everything fully open source, no Enterprise edition with extra features and make money from enterprise support and SaaS hosting only. The Red Hat model works well – community is bleeding edge with lots of feature velocity and the enterprise is long term stable and supported for multiple years. SaaS hosting is probably the best way that you can make money – after all running GitLab is undifferentiated heavy lifting!

    • Sytse Sijbrandij

      Thanks for your feedback We’re trying to be transparent about also having a proprietary edition but we can probably do better. Do you maybe have a suggestion about a place where to communicate this better.

      I appreciate your suggestions about monetizing. We have experience with a few, that doesn’t mean they’ll never work, this is just what we learned so far. When GitLab started we tried to make money through consulting and donations, but it didn’t work very well. Gitorious tried a fully open source model but it broke down for them. The thing I learned about running is that it is very hard to make money this way, see and

  • asker

    Does it support hosting static websites as Github do under

  • Nick Nagy

    Great post highlighting some nice features of Gitlab. We have been using it for 1 year now at our company, and we could not be happier. It gets better and better with every release, and the gitlab ci multi runner project is just simply amazing. Hope they keep up the good work :)

    • Sytse Sijbrandij

      Thanks for the kind words Nagy, we certainly intend to do that.