Website profiles · Technology insights · Alternatives

codeberg.page

No paid content found
Visit website
Profile views 6 Outbound visits 1 Normal
Codeberg Pages Full homepage screenshot

At a glance

Category
Cloud & Hosting
Language
English
Paid-content signal
No paid content foundObserved
Registered
2020
Hosting
Individual Network Berlin (IN-Berlin) e.V.Inferred
HTTPS certificate trusted
PassedObserved
Last updated

Website review

This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.

What is Codeberg Pages?

Codeberg Pages is a free static-site hosting service tied to Codeberg, a Git hosting platform. You put plain HTML, CSS, images, fonts and other static files into a repository, and Codeberg serves them at a URL like https://USERNAME.codeberg.page/REPOSITORY. It is aimed at open-source project homepages, developer blogs and small web experiments rather than database-backed applications.

How it works, in practice

There are two deployment routes:

  • Manual/static files: Create a public repository with a branch named pages, add a Forgejo webhook pointing at your site URL, and push your files. The branch filter should be pages.
  • With a static site generator: If you use Jekyll, Hugo or a similar tool, you can build and deploy through Forgejo Actions. The documentation covers that workflow.

If your repository is itself named pages, the repository name is dropped from the URL, giving you the main subdomain.

Custom domains

Codeberg Pages supports custom domains through DNS records: a CNAME to codeberg.page, or an ALIAS record for apex domains. Where ALIAS is unavailable, the alternative is A and AAAA records plus a TXT record. You also need a TXT record on the _git-pages-repository subdomain containing your repository's Git HTTPS clone URL, which authorizes the Pages server to deploy it.

Who it suits

  • A maintainer who wants a project homepage without paying for separate hosting.
  • A developer who wants a blog generated by Hugo or Jekyll and deployed on every push.
  • Someone experimenting with static HTML who only needs a public URL.

Trade-offs to weigh

Because it serves static files only, anything needing server-side code, a database or dynamic forms is out of scope. The setup is more manual than some hosted alternatives: you configure branches and webhooks yourself, and custom domains require several DNS records. On the other hand, it keeps your site next to your source code and fits naturally into a Git-based workflow.

A useful next step

If you already have a Codeberg repository, decide first whether you will build the site with a generator or upload finished files. That choice determines whether you configure Forgejo Actions or a plain webhook. For a broader look at the platform hosting the repositories, see Codeberg.

How do I set up a static website on Codeberg Pages without using CI?

Create a public repository with a pages branch, add a webhook pointing to your Codeberg Pages URL, then push your static files. No CI or build step is involved.

Steps

  1. Create the repository and branch. Either make a public repo named pages with a branch called pages (this serves at your main subdomain), or add a pages branch to any public repo:
    git switch --orphan pages
    git rm --cached -r .
    
  2. Add the deployment webhook. In the repo's Settings → Webhooks, click Add webhook, choose Forgejo as the type, set the Target URL to your site address, set the Branch filter to pages, and save. The target is https://USERNAME.codeberg.page/REPOSITORY (drop /REPOSITORY if the repo is named pages).
  3. Push your files. HTML, CSS, fonts and images go on the pages branch and appear at that URL.

Custom domain

  • Add CNAME codeberg.page. for subdomains, or ALIAS codeberg.page. for apex domains.
  • If ALIAS isn't supported, use A 217.197.84.141 and AAAA 2a0a:4580:103f:c0de::2.
  • Add a TXT record on _git-pages-repository containing your repo's Git HTTPS clone URL to authorize deployment.

When to choose this over CI

Webhook only With CI
Best for Hand-written HTML, pre-built output Jekyll, Hugo, other generators
Build step None Runs in Forgejo Actions
Effort One-time webhook setup Workflow file plus config

If your source files are already the final site, the webhook path is simpler. If a generator transforms Markdown or templates into HTML, use the CI route instead — see the Codeberg Pages documentation linked from Codeberg Pages.

A practical next step: confirm your target URL resolves before pushing, since the webhook fires on every push to pages and a wrong URL silently sends deployments nowhere.

How do I configure a custom domain for my Codeberg Pages site?

You configure a custom domain by pointing DNS at Codeberg Pages and then authorizing the server to deploy your repository to that domain. The exact DNS records depend on whether you use a subdomain or an apex domain.

DNS records to add

Your domain type Record to add Value
Subdomain (e.g. www.example.com, blog.example.com) CNAME codeberg.page.
Apex domain where CNAME is not allowed ALIAS codeberg.page.
Apex domain where ALIAS is not supported A and AAAA 217.197.84.141 and 2a0a:4580:103f:c0de::2

If you fall back to A/AAAA, also add the TXT record described below.

Authorize the deployment

Add a TXT record on the subdomain _git-pages-repository whose value is the Git HTTPS clone URL of your repository, in the form https://codeberg.org/user/repo.git. This tells the Codeberg Pages server it may deploy that repository to your domain.

Connect the repository side

In your repository's Settings → Webhooks, add a webhook of type Forgejo, set the target URL to your site URL, and set the branch filter to pages. When you don't have a custom domain, that URL is https://USERNAME.codeberg.page/REPOSITORY (omit REPOSITORY if the repository is itself named pages). With a custom domain, use the domain you just configured. Push your static files to the pages branch and they are served.

A practical decision path

If you are setting up a project homepage, a subdomain like docs.example.com is the simplest case: one CNAME record plus the TXT authorization. Choose an apex domain only if you specifically need the bare domain to serve the site, since that is where the ALIAS or A/AAAA fallback and the extra TXT record come in.

One thing to verify before you start: the TXT value must match your repository's actual clone URL, including the .git suffix, or deployment authorization will not line up. If DNS changes seem to have no effect, check that record first.

Can I use a static site generator like Hugo or Jekyll with Codeberg Pages?

Yes. Codeberg Pages is built to serve static output, and the page explicitly names Jekyll and Hugo as examples of generators you can pair with it. The generator runs in the build pipeline, not on the hosting side: you generate HTML, CSS, and assets, then publish the result to the pages branch.

Two ways to deploy a generated site

Approach How it works Best for
CI build A Forgejo Actions workflow runs your generator and deploys the built site Hugo, Jekyll, or any generator with a CLI; sites that change often
No CI You build locally, push the finished files, and a webhook deploys changes Hand-written static files, or simple generators you prefer to run yourself

The webhook route is the manual option: add a Forgejo webhook in your repository settings, point the Target URL at your site address, and set the branch filter to pages. Every push to that branch then triggers deployment.

What to watch for

Codeberg Pages serves static files only. Anything requiring a server runtime — server-side includes, PHP, database queries, or on-demand rendering — won't work, so generators that pre-render everything are the right fit and dynamic frameworks are not. The URL pattern is https://USERNAME.codeberg.page/REPOSITORY, and a repository literally named pages drops the repository segment. Custom domains are supported through DNS records, with CNAME or ALIAS for the usual cases and A/AAAA records as a fallback for apex domains.

A practical starting point

If you use Hugo or Jekyll, start with the CI route: create a public repository with a pages branch, add a Forgejo Actions workflow that builds the site and publishes the output, and push. Verify the built public/ or _site/ directory ends up on the branch rather than your source files — that's the most common mistake. If you'd rather not maintain a workflow, build locally and use the webhook instead.

For setup details, see the Codeberg Pages documentation at Codeberg Pages. If you're weighing hosts, GitHub Pages offers a comparable static workflow, though its build tooling and configuration differ.

What are the differences between using a repository named 'pages' and a branch named 'pages'?

A repository named pages and a branch named pages are two different ways to publish the same kind of static site. The repository name controls the URL path; the branch name is what triggers deployment.

Repository named pages: The site is served at the main subdomain, https://USERNAME.codeberg.page/, with no repository segment in the URL. This is the cleaner option when the site is the main point of your account, such as a personal homepage or project landing page.

Branch named pages in any public repository: The site is served at https://USERNAME.codeberg.page/REPOSITORY, where REPOSITORY is the repository name. This is better when you want several separate sites under one account, or when the site is tied to a specific project rather than your whole profile.

Setup Resulting URL Best for
Public repository named pages, branch pages https://USERNAME.codeberg.page/ A main site or profile homepage
Branch pages in a public repository https://USERNAME.codeberg.page/REPOSITORY Project-specific sites, multiple sites per account

The mechanics are otherwise the same: you put static files on the pages branch and configure a Forgejo webhook so changes deploy. If you use a static site generator such as Jekyll or Hugo, the documentation describes integrating deployment into a Forgejo Actions workflow instead of relying on the webhook alone.

A practical way to decide: if you want the shortest possible address and only one site, create the repository named pages. If you expect to host more than one site, or the site belongs to a named project, use a pages branch and accept the extra path segment. For a custom domain, the DNS and TXT authorization steps are the same either way, so the choice is mainly about the default URL and how you organize repositories.

Is Codeberg Pages free to use and what are its limitations?

Yes, Codeberg Pages is free to use. It is described as a way to host static websites "quick, easy, free & fast" by placing a site in a Git repository on Codeberg, which then serves it.

What it is good for

  • Open source project homepages — a natural fit if your code already lives on Codeberg.
  • Developer blogs and static sites — works with generators like Jekyll or Hugo.
  • Web experiments and hand-written HTML — plain files can be pushed and served.

Main limitations to plan around

  • Static content only. It serves files such as HTML, CSS, fonts, and images. Anything requiring a server-side runtime, database, or dynamic backend is outside its scope.
  • Repository and branch naming rules. A public repository named pages with a branch called pages is the setup for the main subdomain; otherwise a pages branch in a public repository is used, served under a repository path.
  • Deployment setup is manual. Without a CI workflow, you configure a Forgejo webhook pointing at your site URL, with the branch filter set to pages. With a generator, deployment is integrated into a Forgejo Actions workflow instead.
  • Custom domains need DNS work. You add a CNAME to codeberg.page, or an ALIAS for apex domains, or A/AAAA records, plus a TXT record at _git-pages-repository containing your repository's Git HTTPS clone URL to authorize deployment.
  • Public repositories are required for the described setup, so it suits projects that are meant to be public.

Choosing between the two setup paths

Situation Path What you do
You use Jekyll, Hugo or similar With CI Integrate deployment into a Forgejo Actions workflow that builds the site
You push plain static files by hand Without CI Add a Forgejo webhook with the target URL and branch filter pages

A practical next step: decide whether your site is generated or hand-made, then follow the matching setup path. If you expect to need logins, form processing, or a database, plan to host those parts elsewhere and keep Codeberg Pages for the static front end.

Related questions

More questions →
What Is Codeberg Pages?

Codeberg Pages is a static website hosting service built into Codeberg. You put your site's files into a Git repository on Codeberg, and Codeberg serves them as a live website. It's designed for open source project homepages, developer blogs, and web experiments, and the service describes itself as quick, easy, free, and fast. It only serves static content — HTML, CSS, fonts, images, and similar files — so there's no server-side code execution.

How the hosting model works

Your website lives in a Git repository, and Codeberg Pages maps that repository (or a specific branch of it) to a URL. Two things determine where your site appears:

  • A repository named pages with a branch named pages makes the site available at the main subdomain.
  • A pages branch inside any public repository publishes that repository's site at a URL that includes the repository name.

The resulting address follows this pattern:

https://USERNAME.codeberg.page/REPOSITORY

USERNAME is your user or organization name, and REPOSITORY is the repository name. If the repository itself is called pages, the repository segment is omitted.

Two ways to deploy

Codeberg Pages supports both automated and manual publishing.

With CI (static site generators)

If you build your site with a generator such as Jekyll, Hugo, or a similar tool, you can integrate deployment into a Forgejo Actions workflow that builds the site. Codeberg's documentation covers the workflow setup.

Without CI (plain static files)

If you're serving hand-made static files, you configure a webhook on your repository to deploy changes. The documented steps are:

  1. Set up your repository. Either create a public repository named pages with a branch called pages, or create a pages branch in an existing public repository:

    git switch --orphan pages
    git rm --cached -r .
    
  2. Set up deployment. In your repository's Settings, go to Webhooks and click Add webhook. Choose Forgejo as the webhook type. Set the Target URL to your site's URL (for example, https://USERNAME.codeberg.page/REPOSITORY, or the custom domain if you have one). Set the Branch filter to pages, then click Add webhook.

  3. Upload your files. Push your static content — HTML, styles, fonts, images, anything else. It becomes accessible at https://USERNAME.codeberg.page[/REPOSITORY].

Using a custom domain

You can point your own domain at Codeberg Pages. The configuration has two parts: DNS records and an authorization record.

DNS records — add one of the following on your domain:

Record type Value When to use
CNAME codeberg.page. Standard subdomains
ALIAS codeberg.page. Apex domains where CNAME doesn't work
A 217.197.84.141 Fallback when ALIAS isn't supported
AAAA 2a0a:4580:103f:c0de::2 Fallback when ALIAS isn't supported

If ALIAS isn't supported, the documented fallback is to add the TXT record described below and use the A + AAAA records together.

Authorization record — add a TXT record to the subdomain _git-pages-repository containing the Git HTTPS clone URL of your repository:

TXT https://codeberg.org/user/repo.git

This authorizes the Codeberg Pages server to deploy your repository to the server.

What to check before you start

  • Static only. Codeberg Pages serves files; it doesn't run backend code. If your project needs a database or server logic, this isn't the right host.
  • Public repositories. The documented setup uses public repositories, so treat everything you push as publicly visible.
  • Branch name matters. The pages branch is what gets deployed in the webhook setup, and the branch filter must match it.
  • Custom domains need both DNS and TXT records. Missing the _git-pages-repository TXT record will block deployment to your domain even if DNS resolves correctly.

If your goal is a project homepage, a static blog, or a small web experiment that fits in a Git repo, Codeberg Pages covers it without a separate hosting account.

What URL will my Codeberg Pages site have?

Your Codeberg Pages site is served at https://USERNAME.codeberg.page/REPOSITORY, where USERNAME is your Codeberg user or organization name and REPOSITORY is the name of the repository holding the site. The one exception: if the repository is named pages, the repository segment is dropped and the site lives at https://USERNAME.codeberg.page/. If you attach a custom domain, visitors use that domain instead.

The default URL structure

Codeberg Pages maps a repository to a subdomain of codeberg.page:

Repository Resulting URL
https://codeberg.org/USERNAME/my-blog https://USERNAME.codeberg.page/my-blog
https://codeberg.org/USERNAME/pages https://USERNAME.codeberg.page/

Two details matter here:

  • USERNAME is the owner, not the pusher. If the repository belongs to an organization, the organization name appears in the URL, not your personal username.
  • The repository name is case-sensitive in the URL path. Match the exact repository name as it appears on Codeberg.

Why the pages repository is special

A repository literally named pages is treated as the account's main site, so it occupies the bare subdomain https://USERNAME.codeberg.page/ with no path segment. This is the closest equivalent to a "user site" — one per account, at the root of your subdomain.

Any other repository name becomes a path under that subdomain. So USERNAME.codeberg.page/REPOSITORY is the general case, and USERNAME.codeberg.page/ is the reserved case for the repository named pages.

What you need for the URL to resolve

The URL only serves content once three things are in place:

  1. A public repository — private repositories are not served.
  2. A branch named pages — this is the branch Codeberg Pages deploys from, regardless of your default branch.
  3. Deployment configured — either a Forgejo Actions workflow (for static site generators like Jekyll or Hugo) or a webhook pointing at your site URL with the branch filter set to pages.

If you use the webhook route, the Target URL you enter is the same URL your visitors will use — https://USERNAME.codeberg.page/REPOSITORY (or without the repository segment when the repo is named pages). Setting it correctly is what tells the deploy server where the site belongs.

Switching to a custom domain

Once a custom domain is configured, that domain becomes the address visitors use; the codeberg.page URL is no longer the public entry point. Configuration involves:

  • A DNS record: CNAME codeberg.page. — or ALIAS codeberg.page. for apex domains where CNAME does not work.
  • If ALIAS is unsupported, a TXT record plus A 217.197.84.141 and AAAA 2a0a:4580:103f:c0de::2.
  • A TXT record on _git-pages-repository containing the Git HTTPS clone URL of your repository (https://codeberg.org/user/repo.git), which authorizes the Pages server to deploy it.

Plan your repository name with this in mind: renaming a repository later changes its default URL, so pick the name you want before you start publishing.

How to Set Up a Website on Codeberg Pages

You can host a static website on Codeberg Pages by pushing files to a public repository at Codeberg. The site becomes available at https://USERNAME.codeberg.page (or https://USERNAME.codeberg.page/REPOSITORY). You have two deployment paths: a webhook for hand-written static files, or a Forgejo Actions workflow if you use a static site generator like Jekyll or Hugo.

Prerequisites

  • A Codeberg account (the username or organization name becomes part of your URL).
  • A public repository. Pages are served from public repos.
  • Static content only — HTML, CSS, fonts, images, and similar files. There is no server-side runtime.

Option A: Deploy plain static files via webhook

Use this if you write your HTML/CSS by hand and just want to push changes.

1. Set up your repository

Pick one of two layouts:

  • Main subdomain: create a public repository named pages with a branch called pages. This serves at the main subdomain.
  • Project subdomain: create a branch called pages inside any public repository:
git switch --orphan pages
git rm --cached -r .

2. Set up deployment

  1. In your repository, go to Settings → Webhooks and click Add webhook.
  2. Select Forgejo from the webhook type dropdown.
  3. Set the Target URL to your site's URL:
    • No custom domain: https://USERNAME.codeberg.page/REPOSITORY (replace USERNAME with your user or organization name and REPOSITORY with the repo name). If the repository is called pages, omit the repository part.
    • With a custom domain: configure the domain first (see below), then use that URL.
  4. Set the Branch filter to pages.
  5. Click Add webhook.

3. Upload your files

Push your static content to the pages branch. It will be accessible at https://USERNAME.codeberg.page[/REPOSITORY].

Option B: Deploy with CI (static site generators)

If you use a static site generator such as Jekyll, Hugo, or a similar tool, you can integrate deployment into a Forgejo Actions workflow that builds your site. Codeberg's documentation covers the workflow setup — this is the path to choose when your source files need a build step before they become static output.

Custom domain configuration

DNS records

Add one of the following on your domain:

  • CNAME codeberg.page.
  • For apex domains where CNAME doesn't work: ALIAS codeberg.page.
  • If ALIAS isn't supported, add the TXT record described below and use both:
    • A 217.197.84.141
    • AAAA 2a0a:4580:103f:c0de::2

Authorization TXT record

Add a TXT record authorizing the Codeberg Pages server to deploy your repository. Place it on the subdomain _git-pages-repository with the Git HTTPS clone URL of your repository as the value:

TXT https://codeberg.org/user/repo.git

Which option should you pick?

Situation Use
Hand-written HTML/CSS, no build step Webhook (Option A)
Jekyll, Hugo, or another generator Forgejo Actions (Option B)
Want the site at the main subdomain Repo named pages with a pages branch
Want the site under a project path pages branch in any public repo
Custom domain Add DNS records plus the _git-pages-repository TXT record

Common sticking points

  • Repository must be public. Private repos won't serve Pages.
  • Branch name matters. The webhook branch filter and the serving branch are both pages; pushing to another branch won't deploy.
  • Apex domains and CNAME. CNAME records don't work at the apex, so use ALIAS, or the TXT + A/AAAA combination.
  • Forgetting the authorization TXT record. Custom domains need the _git-pages-repository TXT record pointing at your repo's HTTPS clone URL, or the server won't deploy to it.
  • Repo named pages. When your repository is called pages, the repository segment is dropped from the URL.
How to Configure a Custom Domain for Codeberg Pages

To point your own domain at a Codeberg Pages site, you add DNS records at your domain registrar and then authorize Codeberg to serve your repository on that domain. The exact records depend on whether you use a subdomain (where CNAME works) or an apex/root domain (where you need ALIAS, or A + AAAA plus a TXT authorization record). You also need a TXT record under _git-pages-repository so the Codeberg Pages server is allowed to deploy your repository.

Before you start

  • Your site must already be deployed on Codeberg Pages, reachable at https://USERNAME.codeberg.page/REPOSITORY (or https://USERNAME.codeberg.page if the repository is named pages).
  • You need access to your domain's DNS settings.
  • DNS changes can take time to propagate, so verify with a DNS lookup tool if the domain doesn't resolve immediately.

Step 1: Add the DNS record for your domain

The record type depends on the kind of domain you're pointing.

For subdomains (CNAME)

Add a CNAME record:

CNAME codeberg.page.

For apex domains (ALIAS)

If your DNS provider supports ALIAS, use it for the apex domain:

ALIAS codeberg.page.

For apex domains without ALIAS support

If ALIAS isn't supported, add the TXT record described in Step 2, then use A and AAAA records:

A    217.197.84.141
AAAA 2a0a:4580:103f:c0de::2

Step 2: Authorize Codeberg Pages to deploy your repository

Add a TXT record on the subdomain _git-pages-repository. Its value is the Git HTTPS clone URL of your repository:

TXT https://codeberg.org/user/repo.git

Replace user and repo with your actual Codeberg username (or organization) and repository name. This record tells the Codeberg Pages server that it's allowed to deploy your repository to the server.

Step 3: Confirm the setup

Once the records are in place, your site should be served on your custom domain. If you set up deployment via a webhook (the non-CI path), make sure the webhook's Target URL points to your custom domain rather than the default USERNAME.codeberg.page address.

Common issues

  • Apex domain won't resolve with CNAME. CNAME records generally don't work at the apex, which is why ALIAS or A + AAAA are used instead.
  • Missing authorization record. Without the TXT record under _git-pages-repository, the Codeberg Pages server won't deploy your repository to the server.
  • Wrong repository URL in the TXT record. The value must be the Git HTTPS clone URL (https://codeberg.org/user/repo.git), not the Pages URL.
  • Webhook still pointing at the default subdomain. If you use a webhook for deployment, update its Target URL to your custom domain after configuring DNS.
Should I deploy Codeberg Pages with CI or without CI?

Use CI if your site is generated by a tool such as Jekyll or Hugo and you want the build to run automatically after each push. Use the webhook method if you already have plain, hand-made static files (HTML, CSS, images, fonts) and just want them served. Both paths publish to Codeberg Pages; the difference is whether Codeberg builds your site for you or you upload the finished output yourself.

The two deployment paths

With CI (Forgejo Actions) Without CI (webhook)
Best for Static site generators: Jekyll, Hugo, or similar Plain hand-made static files
What you push Source files; the workflow builds the site The finished files themselves
Build step Runs in the Forgejo Actions workflow None — you generate files locally
Setup effort Requires a workflow configuration Requires a repository webhook
When it fits You want deployment integrated into your build You want the simplest possible setup

Choose CI when you use a static site generator

If your site comes from a generator like Jekyll or Hugo, Codeberg's documentation describes integrating deployment into the Forgejo Actions workflow that builds your site. In practice this means you commit your source and configuration, and the workflow produces the output that gets published — you don't commit a pre-built site by hand.

This is the better fit when:

  • Your content lives in Markdown, templates, or other source formats rather than final HTML.
  • You want the site rebuilt every time you push, without running the generator locally first.
  • You're comfortable maintaining a workflow file alongside your content.

The trade-off is that you take on the workflow configuration. If the build fails, the published site won't update, so you need to watch the action results.

Choose the webhook method when you have plain static files

If you "just want to serve plain old hand-made static files," the documented route is to configure a webhook on your repository to deploy changes to Codeberg Pages. There is no build step — whatever you push is what gets served.

Step 1: Set up your repository

You have two options:

  • Create a public repository named pages with a branch called pages. This makes the site available at the main subdomain.
  • Or create a pages branch in any public repository:
git switch --orphan pages
git rm --cached -r .

Step 2: Set up deployment

  1. In your repository's Settings, go to Webhooks and click Add webhook.
  2. Select Forgejo from the drop-down list of webhook types.
  3. Set the Target URL to your site's URL. Without a custom domain, that's https://USERNAME.codeberg.page/REPOSITORY — replace USERNAME with your user or organization name and REPOSITORY with the repository name. If the repository is called pages, omit the repository part.
  4. Set the Branch filter to pages.
  5. Click Add webhook.

If you're using a custom domain, configure it first (see below) and use that URL as the target.

Step 3: Upload your files

Push your static content — HTML, styles, fonts, images, anything else. It becomes accessible at https://USERNAME.codeberg.page[/REPOSITORY].

Custom domain configuration

Add a DNS record on your domain:

  • CNAME codeberg.page.
  • For apex domains where CNAME doesn't work: ALIAS codeberg.page.

If ALIAS isn't supported, add the TXT record described below and use A + AAAA instead:

  • A 217.197.84.141
  • AAAA 2a0a:4580:103f:c0de::2

Then add a TXT record authorizing the Codeberg Pages server to deploy your repository. Put it on the subdomain _git-pages-repository with the Git HTTPS clone URL of your repository:

TXT https://codeberg.org/user/repo.git

How to decide

  • Site generated by Jekyll, Hugo, or similar → CI. You keep source in the repo and let the workflow build it.
  • Site is already final HTML/CSS/assets → webhook. Fewer moving parts; you push what you want served.
  • Not sure yet? Start with the webhook method to confirm your files serve correctly at https://USERNAME.codeberg.page[/REPOSITORY], then move to CI if you later adopt a generator.

One thing to check before either path: the repository must be public, and the branch must be named pages.

Website Overview

Limited stack disclosure and few obvious backend markers suggest a more restrained public footprint. That reduces easy fingerprinting clues but is not proof of overall security. An established domain and managed infrastructure suggest continuity of operations and may support dependable delivery, although neither guarantees service quality.

Domain and Registration

Registered in 2020, this domain has about 6 years of history. That suggests continuity, although ownership and purpose may have changed. Transfer-protection status is present, helping reduce the risk of unauthorized domain transfers. The registrar is Gandi SAS, a widely used domain service provider. The domain uses the common .page extension, which is not an independent safety signal.

DNS and Email

Nameservers are provided by desec.io, indicating managed DNS hosting. DNSSEC is enabled, allowing validating resolvers to authenticate signed DNS data. CAA records restrict which certificate authorities are authorized to issue certificates. No CNAME was found; the observed records resolve directly to addresses. No MX record was found. A conventional explicit inbound-mail route is not configured.

TLS and Certificates

The public key uses EC with 256 bits. The server supplied a complete certificate chain. No organization name is present in the certificate; the available fields are consistent with domain validation. The certificate was issued by Let's Encrypt, commonly associated with automated certificate services. The certificate's total validity is about 89 days, consistent with a short renewal cycle.

HTTP and Browser Security

The response lacks these common security headers: HSTS, CSP, Referrer-Policy, Permissions-Policy, clickjacking protection. No X-Powered-By header was found, reducing one common source of backend fingerprinting information. The via response header indicates a CDN or caching proxy in the delivery path. No obvious internal addresses or debug information were found in the headers. The Server header contains the custom value git-pages (git-pages).

Technology Stack Analysis

No obvious technology stack is exposed. This may reflect restrained information disclosure, although the underlying technologies remain unknown.

Search and Social Sharing

No homepage meta description was detected, leaving snippet selection more dependent on page text. No homepage canonical URL was detected. If duplicate URLs exist, consolidation may be less explicit. No Open Graph metadata was detected, so social previews may depend on platform inference. The title has 47 characters, within a common display range. The observed directives allow indexing and link following.

Hosting and Email

DNSdesec.io
HostingIndividual Network Berlin (IN-Berlin) e.V.
EmailUnknown
Approximate IP geolocation (inferred; a CDN or proxy may differ from the origin server) Germany flagBerlin, State of Berlin, Germany Inferred 217.197.84.141

Registration details

RDAP / WHOIS

RegistrarGandi SAS
Registered2020-10-07
Expires2030-10-07
Domain statusclient transfer prohibited
Nameserversns1.desec.io、ns2.desec.org
DNSSECsigned

DNS records

DNS

TypeNameValueTTLPriority
Acodeberg.page217.197.84.1413600—
AAAAcodeberg.page2a0a:4580:103f:c0de::23600—
NScodeberg.pagens1.desec.io3600—
NScodeberg.pagens2.desec.org3600—
CAAcodeberg.page128 iodef "mailto:[email protected]"3600—
CAAcodeberg.page128 issue "letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/193562844;validationmethods=dns-01"3600—
CAAcodeberg.page128 issue "letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/272029763;validationmethods=tls-alpn-01,http-01"3600—
CAAcodeberg.page128 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/292520050;validationmethods=tls-alpn-01,http-01"3600—
CAAcodeberg.page128 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/3580806161;validationmethods=dns-01"3600—
CAAcodeberg.page128 issuemail ";"3600—
CAAcodeberg.page128 issuevmc ";"3600—
DScodeberg.page51530 13 2 cd0f18a061debe176e0544bd392c798c0abde83069dec1c5c75fd5fd5817aa801800—

TLS and certificates

TLS / SSL

AssessmentNormal configuration
Supported protocolsTLSv1.2、TLSv1.3
Negotiated protocolTLSv1.3
Certificate subjectcodeberg.page
IssuerLet's Encrypt
Valid until2026-11-28T16:18 · Remaining when checked: 55 days
Verification detailsCertificate trust: Passed · Hostname match: Passed

HTTP response headers

HTTP

HeaderValue
content-typetext/html; charset=utf-8
cache-controlmax-age=60, stale-while-revalidate=3600
servergit-pages (git-pages)
x-content-type-optionsnosniff

Identified technologies

Technology stack: Unknown

Pages, Search and Sharing

Meta descriptionNot detected
Canonical URLNot detected
LanguageEnglish (default)
Twitter CardNot detected

Unknown

No robots.txt found

No sitemaps found

User reviews (0)

  • No reviews yet.