# The TUNA blogroll is a directory of readers' blogs with a pull request workflow

> The blogroll is a single file listing the blogs of people around the TUNA association, with an RSS link and a site link for each entry, published as a static site. What makes it interesting as a project is the contribution rule, which is both an anti-spam measure and a time machine, because entries are appended rather than inserted so that a later tool can tell what is new.

**tuna/blogroll** — 世界一流兼容并包TUNA协会收集的周围同学们的Blog

- Repository: https://github.com/tuna/blogroll
- Website: https://tuna.github.io/blogroll/
- Stars: 952 · Forks: 139
- Language: Python
- License: not declared
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/tuna-blogroll

## What the project is

The repository holds a directory of the blogs of people around the TUNA association, and the project description frames it as world class, compatible and inclusive, with the entries collected from the association's members and their circles. The entire content of the project is one Markdown table in the README, and the table has three columns, the name of the blog, an RSS feed URL and an HTML site URL. Some entries have both links, some have only the site. The list is long enough to be a useful directory and short enough to be read, and it is the kind of artefact that only works because a small group of people maintains it by hand. The published version lives at the project site under the TUNA GitHub Pages organisation, and the source is a Markdown file, so the whole thing is a file, a site generator and a contribution rule.

## Append only, and why that matters

The addition method is the one piece of real engineering in the repository, and it is stated plainly. You add your entry on the very bottom line, which amounts to ordering the list by time of addition rather than alphabetically, and the reason given is that it prepares the way for future incremental reminders. That is a smart constraint. A list ordered by when people joined lets a future tool work out what changed since a given date, because the new entries are all at the end, and it means a reminder of the form here are the blogs that joined since last month is a file operation rather than a diff over an unordered set. It also has a second effect for humans, since a long list that is ordered by date has a visible history, and the most recent additions are the ones a reader is most likely to want to try.

## Who can edit and how

The permission model is simple and sensible. People with permission in the TUNA organisation can edit the file directly, and everyone else is asked to send a pull request. The README also asks contributors to introduce themselves briefly in the commit log or in the pull request, for example the identifiers they commonly use, and that request is doing quiet work. A directory of personal sites is a list of links to pages that can contain anything, so the pull request is a place where a human from the association sees the new entry and learns who added it and what their handle is. The community is small and the barrier is a review, not a signup, and for a project whose whole content is a table of links, that is the right amount of process.

## The FAQ answers the two questions that matter

There is a short FAQ section, and the two questions it covers are the ones that decide whether a community list stays usable. The first is whether newcomers can add a blog, and the answer is yes, without a minimum status. The second is what to do about a blog that has not been updated in a long time or has stopped working, and the answer is to open a pull request and delete it. Both answers point the same way, which is that the list is maintained by the people in it rather than by an administrator, and the removal path is as open as the addition path. That is worth noticing, because a directory of personal blogs accumulates dead links quickly, and a project with a lightweight way to prune them is unusual.

## The table as a data set

The entries themselves are the substance, and the format makes them comparable at a glance. A reader scanning the table sees, for each person, a name, a feed and a site, and the feeds are a mix of formats, with Atom, plain RSS, feedburner style URLs, and a few entries with a WordPress feed path, which shows the list predates the current feed conventions and has been kept alive by hand. Some of the better known names in the table are the kind of independent programmer or security researcher who writes long technical posts, and the mix of languages in the entries reflects how the list grew. The value of a hand-maintained directory like this is precisely that the links still work, which is why the FAQ bothers to have a removal procedure at all.

## How the site is built

The repository is small, with a .build/ directory, a .github/ directory, a .gitmodules file, a README.md and a site/ directory, which is the shape of a project that generates a static site from the Markdown file and publishes it to GitHub Pages. The .gitmodules entry suggests that the site template or the generator is pulled in from another repository rather than vendored, which keeps the repository to a single file of content and a build configuration. There is no package manifest, no test suite and no release process in the visible tree, which is consistent with a project whose artefact is a web page rather than a library. The documentation and the contributing workflow both live in the README itself, which is a sensible choice when there is only one file to read.

## The state of the project

The repository is not archived, the default branch is master, and the last push was on 2026-06-16, which is a while before the current date. No GitHub releases are published, which is normal for a repository whose content is a single Markdown file, and the licence field is not recorded, so a reader who wants to reuse the list or the tooling has no licence to point at. The home page is the published site rather than the repository, and the project is linked from the association's own infrastructure. Taken together, this is a low-traffic, low-churn community artefact: a file that is worth having, maintained by the people in it, and dependent on somebody remembering to prune the dead links.

## Conclusion

The blogroll fits a community that wants a single page where the blogs of its members are listed, and it fits a reader who wants to follow a dozen writing-focused blogs from one page rather than from a feed reader. It does not fit a directory project, since there is no tagging, no search and no aggregation beyond the two links per entry, and it does not fit anybody who needs the list to stay current, because a directory of personal sites rots and the project has no crawler to notice. Before you add your own blog, read the contribution rule and add the entry as the last line, and note the release state, where the repository publishes no releases and the last push was on 2026-06-16, with the generated site published from the master branch.

## FAQ

### What is the TUNA blogroll?

It is a directory of the blogs of people around the TUNA association, presented as a table with a name, an RSS feed URL and a site URL for each entry, published as a static site. The whole content is a single Markdown file in the repository.

### How do I add my blog to the list?

Add the entry as the very bottom line of the table, which keeps the list ordered by time of addition, and either edit the file directly if you are in the organisation or send a pull request otherwise. The README asks that you introduce yourself briefly in the commit log or the pull request.

### What happens to a blog that stops being updated?

The FAQ says to open a pull request and delete it. The removal path is as open as the addition one, which is what keeps a hand-maintained directory of personal sites from filling with dead links.

### Can anyone add a blog, or only members?

Yes, newcomers can add a blog. The only requirement is going through the pull request, since people in the TUNA organisation can edit the file directly and everybody else is asked to send a pull request.

### Is the blogroll still updated?

The repository is not archived and the last push was on 2026-06-16. No GitHub releases are published, and the licence is not recorded in the project listing, so anyone wanting to reuse the list should ask first.

## Sources

- [Issues](https://github.com/tuna/blogroll/issues)
- [Project website](https://tuna.github.io/blogroll/)
- [README](https://github.com/tuna/blogroll/blob/master/README.md)
- [tuna/blogroll on GitHub](https://github.com/tuna/blogroll)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/tuna-blogroll
