GLFM & Bitbucket SpecificationEnterprise DevOps Guide Ā· 11 min read

GitLab & Bitbucket Markdown Tables Guide

Master GitLab Flavored Markdown (GLFM) tables for Merge Request reviews, repository wikis, and automated CI/CD reporting pipelines. Understand syntax differences from GitHub and navigate Bitbucket Cloud's parser nuances.

1. Key Differences: GitLab (GLFM) vs. GitHub (GFM)

While both platforms support standard pipe tables, GitLab relies on its own GitLab Flavored Markdown (GLFM) parser. Understanding these distinctions prevents formatting breaks:

FeatureGitLab (GLFM) BehaviorGitHub (GFM) Behavior
Outer Vertical Boundary PipesStrictly recommended; GitLab Wikis require outer pipes on every lineMore tolerant of omitted outer pipes
Internal References#123 (Issue), !456 (MR), @user, %milestone#123 (Issue/PR), @user
Hover Tooltip CardsNative rich hover popovers inside cellsStandard link preview
HTML Whitespace FilteringStrict HTML sanitization filter appliedPermits certain CSS attributes like align

2. GitLab Merge Request & Review Hacks

Merge Request descriptions and review summaries in GitLab are vastly improved by structured tables that link code changes, tickets, and QA sign-offs:

Cross-Linking Issues, MRs & Authors in Cells

When reviewing a large migration or architectural change, build a traceability table using GitLab's native shorthand prefixes:

| Component | Linked Issue | Merge Request | Lead Reviewer | Status |
| :-------- | :----------- | :------------ | :------------ | :----: |
| Auth API  | #1042        | !894          | @backend-lead | 🟢 Approved |
| Database  | #1088        | !902          | @dba-team     | 🟔 In Review |
| Webhooks  | #1105        | !915          | @devops       | ⚪ Pending |

Multi-line Checklists Inside MR Review Cells

Use <br> tags to create step-by-step checklist items inside table cells:

| Service | Deployment Checklist |
| :------ | :------------------- |
| Production API | 1. Run database migrations (`db:migrate`)<br>2. Invalidate Cloudflare CDN edge cache<br>3. Monitor Datadog p99 latency |

3. Generating Markdown Tables Automatically in GitLab CI/CD

A best practice in enterprise DevOps is having CI jobs generate markdown tables summarizing unit test results, bundle sizes, or benchmark comparisons, then posting them directly into the Merge Request as a bot comment:

.gitlab-ci.yml snippetGitLab API v4
benchmark_summary:
  stage: test
  script:
    - python3 run_benchmarks.py --output-format=markdown > table_output.md
    - |
      COMMENT_BODY=$(cat table_output.md)
      curl --request POST \
        --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \
        --header "Content-Type: application/json" \
        --data "{\"body\": \"${COMMENT_BODY}\"}" \
        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}/notes"
  only:
    - merge_requests

4. Bitbucket Cloud Support & Limitations

Bitbucket Cloud uses a Python-Markdown implementation. Keep these constraints in mind:

HTML Whitelist Restrictions

Bitbucket aggressively sanitizes raw HTML in Pull Request comments. Avoid inline CSS styles (such as style="color:red") or custom <details> tags. Stick to standard <br> and basic formatting tags (<b>, <i>, <code>).

Outer Pipe Requirement

Bitbucket Cloud's parser can silently fail if outer boundary vertical pipes are omitted. Always ensure every single line starts and finishes with a pipe character.

Format for GLFM & Bitbucket

Auto-Enclose Pipes & Format Tables for GitLab

Ensure your tables render flawlessly across GitLab wikis, issues, and Bitbucket PRs. Our free Table Formatter enforces outer pipes and balances column spacing automatically.

Frequently Asked Questions

How does GitLab Flavored Markdown (GLFM) differ from GitHub Flavored Markdown (GFM)?

While both support standard pipe tables, GitLab wikis are stricter regarding outer vertical pipes and whitespace. Furthermore, GitLab automatically recognizes internal references inside cells (such as #123 for issues, !456 for merge requests, and @username) and renders rich interactive hover cards.

Can I generate Markdown tables in GitLab CI/CD pipelines and post them to Merge Requests?

Yes. You can generate a markdown table inside your GitLab CI job (e.g., from test coverage or benchmark runs) and use curl with CI_JOB_TOKEN to post it as a comment to the Merge Request via the GitLab REST API.

Does Bitbucket Cloud support Markdown tables in pull requests and wikis?

Yes. Bitbucket supports standard pipe tables, but its Python-Markdown parser is more restrictive with inline HTML tags than GitLab or GitHub. Avoid complex inline HTML styles in Bitbucket; stick to standard markdown links, bold text, and <br> tags.

How do I create multi-line bullet lists inside a GitLab table cell?

Markdown list syntax (hyphens or asterisks) does not render as lists inside standard pipe table cells. Instead, use Unicode bullet characters ("• ") separated by "<br>" tags: "| Feature | • Item 1<br>• Item 2 |".