Skip to content

Git Contributors#

View Markdown

When ssg.contributors is enabled, each article lists the unique git authors of its source file. Names are escaped. The feature is off unless you turn it on. Existing sites stay unchanged.

import { oxContent } from "@ox-content/vite-plugin";

export default {
  plugins: [
    oxContent({
      ssg: {
        contributors: true,
      },
    }),
  ],
};

false or omitted keeps the list off. true enables names only. An object enables the feature and can set ignore and avatars.

oxContent({
  ssg: {
    contributors: {
      ignore: ["dependabot[bot]", "ci@example.com"],
      avatars: true,
    },
  },
});
Option Type Default
ssg.contributors boolean / { ignore?, avatars? } false
ignore string[] []
avatars boolean false

Authors come from git log --format=%an%x09%ae on the source file. Duplicates are merged by email when an email is present, otherwise by name. Comparison is case-insensitive. The first name seen for that key is the one that is rendered. Commit counts are available from the native helper but are not shown in the default theme.

The ignore list matches a full author name or a full email, case-insensitive. Partial strings do not match. Ignored authors are dropped before HTML is generated.

Avatars#

Names only is the default. Set avatars: true to load a Gravatar image when the git author email is present. The image URL is https://www.gravatar.com/avatar/{md5(email)}. The raw email is never written into HTML, mailto: links, or href.

Turning avatars on hashes the git author email and requests gravatar.com. Sites that must not publish author-email hashes should leave avatars off.

No GitHub profile URL is invented from an email. A https://github.com/{login} link is not emitted unless a later option supplies an explicit login. This version does not accept that mapping.

Unsafe avatar URLs (javascript:, data:, protocol-relative //, http:) are omitted. Only https: avatar URLs reach the markup.

Missing .git#

A published npm tarball, a CI checkout without history, or a path that is not inside a git work tree yields an empty list. The build does not fail. The page emits no contributor markup and no warning is required at runtime. This page is the documented behavior.

The native helper getGitContributors(filePath, root?) returns [] when root is omitted, git is missing, git log fails, or the file has no commits. Results are cached per file path and HEAD commit for the life of the process.

Markup#

The list is rendered under the article, after last-updated when that option is also on. The container uses .contributors. Each author is a .contributor item with an optional .contributor-avatar image and a .contributor-name span. Hostile names are escaped (<, ", and the other HTML specials).

Bare mode still receives the same contributors array on page data. The default bare template does not emit the list; a custom ssg.render theme can read page.contributors.

Last updated: