Software Forge Performance Index
This webpage collects performance information about various hosted software development services. The reports are updated weekly, most recently on February 7, 2024 at 11:14 UTC, and were generated with Lighthouse 6.3.0. Patches welcome!
Disclaimer: This website is maintained by SourceHut.
Expand for details on methodology
We ran Lighthouse 6.3.0 on Alpine Linux x86_64, with the following command line:
lighthouse <url> \ --only-categories=performance,accessibility \ --profile=desktop \ --throttling.cpuSlowdownMultiplier=1
The desktop profile is used because it's rare that a developer is coding on a mobile device — and some forges have separate mobile sites, so a separate test suite would be warranted.
We left the throttling settings at the Lighthouse default, because it's less rare that a developer is tethered to their phone or working from a community with less privileged internet access. The simulated latency also helps to reduce the variable impact of real-world latency. Additionally, simulating a low-bandwidth connection helps to draw out the differences between services more clearly. This controls for network conditions; the same tests have been run from various datacenters with various degrees of favorability to each hosting provider with no discernible change in the results.
CPU throttling is disabled to offset the effects of not having a GPU available in our testing environment. If you run these tests locally, it is recommended that you remove this constraint.
The source code is available if you wish to run these benchmarks on your own system; it takes about an hour.
All performance results
Bitbucket | Codeberg | GitHub | GitLab | Pagure | SourceHut | |
---|---|---|---|---|---|---|
Browsing Git repositories | ||||||
Summary page | 33 | 88 | 67 | 58 | 76 | 100 |
Tree (best case) | 28 | 89 | 67 | 58 | 92 | 100 |
Tree (worst case) | 19 | 9 | 49 | 33 | 55 | 86 |
Log (best case) | 36 | 96 | 47 | 59 | 83 | 100 |
Log (worst case) | 36 | 94 | 47 | 57 | 0 | 90 |
Commit | 32 | 97 | 74 | 61 | 69 | 100 |
Source file (best case) | 0 | 75 | 43 | 55 | 77 | 100 |
Source file (worst case) | 0 | 8 | 49 | 54 | 42 | 97 |
Blame (best case) | 61 | 47 | 64 | 64 | 54 | 100 |
Blame (worst case) | 0 | 0 | n/a | 51 | 0 | 0 |
Browsing tickets/issues | ||||||
Browsing | 55 | 93 | 90 | 50 | 91 | 100 |
Search | 55 | 93 | 87 | 52 | 88 | 100 |
Details and comments | 56 | 49 | 71 | 50 | 71 | 100 |
Code review | ||||||
Browsing patches | 0 | 90 | 84 | 55 | 82 | 100 |
Patch discussion | 25 | 95 | 70 | 51 | 62 | 100 |
Patch diff | 25 | 85 | 59 | 50 | 60 | 100 |
Browsing Git repositories
Summary page
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 34 KiB | 100 | 100 | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 10 requests | 585 KiB | 88 | 78 | 2.2 s | 1.7 s | 1.7 s | 1.7 s | 1.7 s | 40 ms | HTML • JSON • stderr |
Pagure | 20 requests | 721 KiB | 76 | 67 | 3.1 s | 2.6 s | 4.2 s | 4.2 s | 4.2 s | 20 ms | HTML • JSON • stderr |
GitHub | 131 requests | 1174 KiB | 67 | 98 | 4.7 s | 2.6 s | 2.6 s | 7.6 s | 8.3 s | 70 ms | HTML • JSON • stderr |
GitLab | 60 requests | 1907 KiB | 58 | 89 | 5.6 s | 1.8 s | 1.8 s | 1.8 s | 11.6 s | 150 ms | HTML • JSON • stderr |
Bitbucket | 54 requests | 2140 KiB | 33 | 100 | 9.6 s | 9.6 s | 11.1 s | 14.5 s | 13.7 s | 290 ms | HTML • JSON • stderr |
Tree (best case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 33 KiB | 100 | ? | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Pagure | 19 requests | 519 KiB | 92 | 96 | 2.5 s | 2.5 s | 3.1 s | 3.1 s | 3.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 10 requests | 498 KiB | 89 | 86 | 1.6 s | 1.5 s | 1.5 s | 1.5 s | 1.5 s | 50 ms | HTML • JSON • stderr |
GitHub | 110 requests | 1107 KiB | 67 | 92 | 5.6 s | 2.6 s | 2.6 s | 7.3 s | 8.0 s | 100 ms | HTML • JSON • stderr |
GitLab | 57 requests | 1888 KiB | 58 | 91 | 6.1 s | 1.7 s | 3.4 s | 3.4 s | 11.0 s | 190 ms | HTML • JSON • stderr |
Bitbucket | 53 requests | 2136 KiB | 28 | 100 | 9.6 s | 9.6 s | 11.2 s | 12.7 s | 12.8 s | 390 ms | HTML • JSON • stderr |
Tree (worst case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 86 KiB | 86 | ? | 11.1 s | 1.4 s | 1.4 s | 1.4 s | 1.4 s | 20 ms | HTML • JSON • stderr |
Pagure | 19 requests | 1248 KiB | 55 | 96 | 5.7 s | 5.7 s | 5.7 s | 5.7 s | 5.7 s | 20 ms | HTML • JSON • stderr |
GitHub * | 112 requests | 1120 KiB | 49 | 92 | 7.4 s | 3.6 s | 3.6 s | 8.8 s | 9.7 s | 190 ms | HTML • JSON • stderr |
GitLab | 66 requests | 1964 KiB | 33 | 91 | 2.8 s | 1.7 s | 3.5 s | 3.5 s | 12.5 s | 360 ms | HTML • JSON • stderr |
Bitbucket * | 53 requests | 2144 KiB | 19 | 100 | 9.6 s | 9.6 s | 11.2 s | 11.2 s | 12.9 s | 390 ms | HTML • JSON • stderr |
Codeberg | 10 requests | 3160 KiB | 9 | 86 | 14.9 s | 14.9 s | 14.9 s | 16.4 s | 16.7 s | 500 ms | HTML • JSON • stderr |
- * Bitbucket: Trees with more than 500 entries are truncated.
- * GitHub: Trees with more than 1,000 entries are truncated.
Log (best case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 38 KiB | 100 | ? | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 15 requests | 817 KiB | 96 | 78 | 2.6 s | 2.1 s | 2.1 s | 2.1 s | 2.1 s | 40 ms | HTML • JSON • stderr |
Pagure | 69 requests | 693 KiB | 83 | 78 | 3.6 s | 3.1 s | 4.2 s | 4.2 s | 4.2 s | 40 ms | HTML • JSON • stderr |
GitLab | 54 requests | 1712 KiB | 59 | 88 | 5.1 s | 1.9 s | 1.9 s | 1.9 s | 10.7 s | 160 ms | HTML • JSON • stderr |
GitHub | 118 requests | 1076 KiB | 47 | 100 | 6.1 s | 3.6 s | 3.6 s | 8.4 s | 8.9 s | 370 ms | HTML • JSON • stderr |
Bitbucket | 37 requests | 1674 KiB | 36 | 100 | 9.6 s | 9.6 s | 9.8 s | 9.9 s | 10.1 s | 170 ms | HTML • JSON • stderr |
Log (worst case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
Codeberg | 11 requests | 651 KiB | 94 | 78 | 3.6 s | 2.3 s | 2.3 s | 2.3 s | 2.3 s | 40 ms | HTML • JSON • stderr |
SourceHut | 4 requests | 43 KiB | 90 | ? | 7.2 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
GitLab | 73 requests | 1728 KiB | 57 | 91 | 5.9 s | 1.9 s | 1.9 s | 1.9 s | 10.4 s | 160 ms | HTML • JSON • stderr |
GitHub | 114 requests | 1069 KiB | 47 | 100 | 5.4 s | 2.8 s | 2.8 s | 7.3 s | 8.0 s | 310 ms | HTML • JSON • stderr |
Bitbucket | 40 requests | 1672 KiB | 36 | 98 | 9.6 s | 9.6 s | 9.9 s | 10.0 s | 10.2 s | 170 ms | HTML • JSON • stderr |
Pagure | n/a | n/a | The page provided is not HTML (served as MIME type ). | HTML • JSON • stderr |
Commit
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 36 KiB | 100 | 83 | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 11 requests | 729 KiB | 97 | 78 | 2.1 s | 2.1 s | 2.1 s | 2.1 s | 2.1 s | 50 ms | HTML • JSON • stderr |
GitHub | 89 requests | 911 KiB | 74 | 100 | 4.6 s | 2.7 s | 3.1 s | 5.9 s | 6.6 s | 60 ms | HTML • JSON • stderr |
Pagure | 24 requests | 797 KiB | 69 | 72 | 3.5 s | 2.7 s | 3.9 s | 5.4 s | 5.7 s | 70 ms | HTML • JSON • stderr |
GitLab | 50 requests | 1824 KiB | 61 | 93 | 4.7 s | 1.5 s | 3.4 s | 3.4 s | 11.0 s | 100 ms | HTML • JSON • stderr |
Bitbucket | 62 requests | 3328 KiB | 32 | ? | 10.6 s | 9.6 s | 14.1 s | 14.1 s | 17.8 s | 220 ms | HTML • JSON • stderr |
Source file (best case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 5 requests | 57 KiB | 100 | 94 | 1.5 s | 1.2 s | 1.2 s | 1.2 s | 1.2 s | 20 ms | HTML • JSON • stderr |
Pagure | 22 requests | 906 KiB | 77 | 94 | 2.7 s | 2.5 s | 5.1 s | 5.6 s | 5.7 s | 90 ms | HTML • JSON • stderr |
Codeberg | 9 requests | 780 KiB | 75 | 83 | 3.2 s | 3.0 s | 3.0 s | 3.0 s | 3.0 s | 50 ms | HTML • JSON • stderr |
GitLab | 58 requests | 2583 KiB | 55 | 94 | 4.7 s | 1.5 s | 3.4 s | 3.4 s | 10.8 s | 170 ms | HTML • JSON • stderr |
GitHub | 105 requests | 1055 KiB | 43 | 92 | 9.0 s | 3.9 s | 3.9 s | 8.3 s | 8.7 s | 170 ms | HTML • JSON • stderr |
Bitbucket | n/a | n/a | An error occured, see the log for more details. | HTML • JSON • stderr |
Source file (worst case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 5 requests | 39 KiB | 97 | 94 | 4.0 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
GitLab | 57 requests | 2698 KiB | 54 | 94 | 5.1 s | 1.7 s | 3.4 s | 3.4 s | 10.9 s | 170 ms | HTML • JSON • stderr |
GitHub | 102 requests | 1223 KiB | 49 | 92 | 6.2 s | 3.5 s | 3.5 s | 8.1 s | 8.8 s | 300 ms | HTML • JSON • stderr |
Pagure | 20 requests | 1176 KiB | 42 | ? | 9.5 s | 5.1 s | 5.5 s | 6.8 s | 6.8 s | 320 ms | HTML • JSON • stderr |
Codeberg | 9 requests | 5037 KiB | 8 | ? | 24.3 s | 24.3 s | 24.3 s | 27.1 s | 27.3 s | 1,080 ms | HTML • JSON • stderr |
Bitbucket | n/a | n/a | An error occured, see the log for more details. | HTML • JSON • stderr |
Blame (best case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 5 requests | 65 KiB | 100 | 94 | 1.9 s | 1.2 s | 1.2 s | 1.2 s | 1.2 s | 20 ms | HTML • JSON • stderr |
GitLab | 36 requests | 1676 KiB | 64 | 94 | 4.0 s | 1.8 s | 1.8 s | 1.8 s | 10.2 s | 130 ms | HTML • JSON • stderr |
GitHub | 116 requests | 1114 KiB | 64 | 92 | 5.9 s | 2.7 s | 2.7 s | 7.1 s | 7.5 s | 200 ms | HTML • JSON • stderr |
Bitbucket | 32 requests | 25551 KiB | 61 | 85 | 45.1 s | 2.9 s | 2.9 s | 5.5 s | 131.0 s | 210 ms | HTML • JSON • stderr |
Pagure | 21 requests | 1220 KiB | 54 | 83 | 7.7 s | 4.2 s | 4.2 s | 4.9 s | 5.3 s | 150 ms | HTML • JSON • stderr |
Codeberg | 16 requests | 1710 KiB | 47 | 83 | 6.5 s | 6.5 s | 6.5 s | 6.8 s | 7.0 s | 160 ms | HTML • JSON • stderr |
Blame (worst case)
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
GitLab | 36 requests | 1712 KiB | 51 | 96 | 12.5 s | 2.0 s | 2.0 s | 2.0 s | 10.3 s | 160 ms | HTML • JSON • stderr |
Pagure | n/a | n/a | An error occured, see the log for more details. | HTML • JSON • stderr | |||||||
SourceHut | n/a | n/a | The page provided is not HTML (served as MIME type ). | HTML • JSON • stderr | |||||||
Bitbucket | n/a | n/a | Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Status code: 500) | HTML • JSON • stderr | |||||||
Codeberg | n/a | n/a | An error occured, see the log for more details. | HTML • JSON • stderr |
- * GitHub: The page loads, but shows "This blame took too long to generate". GitHub has been omitted from the test results.
Browsing tickets/issues
Browsing
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 36 KiB | 100 | 89 | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 29 requests | 2094 KiB | 93 | 78 | 2.3 s | 2.3 s | 2.3 s | 4.3 s | 4.6 s | 70 ms | HTML • JSON • stderr |
Pagure | 21 requests | 633 KiB | 91 | 80 | 4.1 s | 2.7 s | 2.7 s | 2.7 s | 2.7 s | 20 ms | HTML • JSON • stderr |
GitHub | 78 requests | 854 KiB | 90 | 100 | 3.1 s | 2.5 s | 2.5 s | 4.9 s | 5.3 s | 70 ms | HTML • JSON • stderr |
Bitbucket | 27 requests | 671 KiB | 55 | 92 | 6.1 s | 5.3 s | 5.3 s | 5.3 s | 5.3 s | 60 ms | HTML • JSON • stderr |
GitLab | 60 requests | 1960 KiB | 50 | 96 | 6.8 s | 1.5 s | 3.9 s | 3.9 s | 12.0 s | 250 ms | HTML • JSON • stderr |
Search
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 36 KiB | 100 | 89 | 1.7 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 29 requests | 2095 KiB | 93 | 78 | 2.3 s | 2.3 s | 2.3 s | 4.2 s | 4.5 s | 70 ms | HTML • JSON • stderr |
Pagure | 20 requests | 619 KiB | 88 | 80 | 3.9 s | 2.7 s | 2.7 s | 2.7 s | 2.7 s | 20 ms | HTML • JSON • stderr |
GitHub | 78 requests | 855 KiB | 87 | 98 | 3.7 s | 2.4 s | 2.4 s | 5.5 s | 6.2 s | 60 ms | HTML • JSON • stderr |
Bitbucket | 28 requests | 672 KiB | 55 | 92 | 6.0 s | 5.2 s | 5.2 s | 5.2 s | 5.3 s | 70 ms | HTML • JSON • stderr |
GitLab | 60 requests | 1959 KiB | 52 | 90 | 6.1 s | 1.5 s | 3.9 s | 3.9 s | 12.1 s | 250 ms | HTML • JSON • stderr |
Details and comments
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 49 KiB | 100 | 91 | 1.2 s | 1.2 s | 1.2 s | 1.2 s | 1.2 s | 20 ms | HTML • JSON • stderr |
Pagure | 40 requests | 3540 KiB | 71 | 87 | 3.5 s | 3.1 s | 4.2 s | 4.2 s | 4.2 s | 20 ms | HTML • JSON • stderr |
GitHub | 105 requests | 1077 KiB | 71 | 94 | 5.1 s | 3.2 s | 3.2 s | 5.3 s | 5.8 s | 70 ms | HTML • JSON • stderr |
Bitbucket | 27 requests | 671 KiB | 56 | 92 | 5.9 s | 5.2 s | 5.2 s | 5.2 s | 5.3 s | 60 ms | HTML • JSON • stderr |
GitLab | 103 requests | 2852 KiB | 50 | 88 | 5.4 s | 1.9 s | 1.9 s | 1.9 s | 15.0 s | 240 ms | HTML • JSON • stderr |
Codeberg | 38 requests | 2478 KiB | 49 | 78 | 8.1 s | 4.1 s | 5.2 s | 6.1 s | 7.9 s | 120 ms | HTML • JSON • stderr |
Code review
Browsing patches
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 34 KiB | 100 | 83 | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 1.1 s | 20 ms | HTML • JSON • stderr |
Codeberg | 29 requests | 2142 KiB | 90 | 78 | 2.6 s | 2.6 s | 2.6 s | 4.5 s | 4.8 s | 70 ms | HTML • JSON • stderr |
GitHub | 78 requests | 854 KiB | 84 | 98 | 3.4 s | 2.6 s | 2.6 s | 4.6 s | 4.9 s | 80 ms | HTML • JSON • stderr |
Pagure | 19 requests | 577 KiB | 82 | 82 | 4.7 s | 2.8 s | 2.8 s | 2.8 s | 2.8 s | 20 ms | HTML • JSON • stderr |
GitLab | 57 requests | 1882 KiB | 55 | 86 | 6.6 s | 1.7 s | 1.7 s | 1.7 s | 11.4 s | 190 ms | HTML • JSON • stderr |
Bitbucket | n/a | n/a | Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Status code: 404) | HTML • JSON • stderr |
Patch discussion
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut | 4 requests | 83 KiB | 100 | ? | 2.1 s | 1.4 s | 1.4 s | 1.4 s | 1.4 s | 20 ms | HTML • JSON • stderr |
Codeberg | 14 requests | 1173 KiB | 95 | 76 | 3.2 s | 2.3 s | 2.3 s | 2.3 s | 2.3 s | 50 ms | HTML • JSON • stderr |
GitHub | 103 requests | 1071 KiB | 70 | 100 | 5.1 s | 3.2 s | 3.2 s | 7.0 s | 7.6 s | 100 ms | HTML • JSON • stderr |
Pagure | 40 requests | 3934 KiB | 62 | 85 | 8.3 s | 4.4 s | 4.4 s | 4.4 s | 4.4 s | 30 ms | HTML • JSON • stderr |
GitLab | 94 requests | 2524 KiB | 51 | 90 | 6.7 s | 1.9 s | 4.5 s | 4.5 s | 14.5 s | 160 ms | HTML • JSON • stderr |
Bitbucket | 109 requests | 4247 KiB | 25 | ? | 11.8 s | 2.3 s | 2.3 s | 2.3 s | 26.7 s | 400 ms | HTML • JSON • stderr |
Patch diff
Page tested | Performance | Accessibility | Speed Index | FCP | FMP | First Idle | TTI | Max FID | Full report | ||
---|---|---|---|---|---|---|---|---|---|---|---|
SourceHut * | 4 requests | 83 KiB | 100 | ? | 2.1 s | 1.4 s | 1.4 s | 1.4 s | 1.4 s | 20 ms | HTML • JSON • stderr |
Codeberg | 11 requests | 951 KiB | 85 | 72 | 3.2 s | 3.2 s | 3.2 s | 3.2 s | 3.2 s | 40 ms | HTML • JSON • stderr |
Pagure | 40 requests | 3934 KiB | 60 | 85 | 7.9 s | 4.3 s | 4.3 s | 4.3 s | 4.3 s | 30 ms | HTML • JSON • stderr |
GitHub | 100 requests | 1002 KiB | 59 | 99 | 5.4 s | 2.9 s | 2.9 s | 6.8 s | 7.6 s | 130 ms | HTML • JSON • stderr |
GitLab | 84 requests | 2444 KiB | 50 | 88 | 9.1 s | 1.9 s | 4.5 s | 4.5 s | 13.9 s | 190 ms | HTML • JSON • stderr |
Bitbucket * | 109 requests | 4247 KiB | 25 | ? | 12.0 s | 2.3 s | 2.3 s | 2.3 s | 26.5 s | 390 ms | HTML • JSON • stderr |
- * Bitbucket: The diff and the discussion pages are not separate.
- * SourceHut: The diff and the discussion pages are not separate.