The End of an Era: R-Forge Package Hosting Platform to Retire After Two Decades, Paving the Way for Modern Git-Based Solutions like Codeberg
After two decades of dedicated service to the R programming community, the R-Forge package hosting platform is set to retire, marking a significant transition for countless R package developers. The platform, which has long served as a collaborative hub for R projects, will soon transition to a read-only state, prompting a migration to more contemporary, Git-based hosting solutions. Codeberg, a non-profit, community-led initiative, has emerged as a prominent modern alternative, sharing many of R-Forge’s foundational principles while offering advanced features and a robust infrastructure. To facilitate this shift, a comprehensive tutorial has been provided, guiding developers through the process of transitioning their projects to Codeberg or other Git-based platforms.
A Legacy of Collaborative Development: The Genesis of R-Forge
R-Forge was established in 2006, a year after the second annual useR! conference. The inception of the platform was driven by a vision articulated by Kurt Hornik, who proposed that R should possess its own equivalent of SourceForge. This was a forward-thinking concept, particularly given that GitHub, now a ubiquitous force in software development, had not yet been established. The core philosophy behind R-Forge was to create a code-sharing platform built by the R community, for the R community. Stefan Theussl spearheaded the implementation in the subsequent months, leveraging GForge/FusionForge, a derivative of the software underpinning SourceForge. The initiative received crucial hosting and financial support from WU Wirtschaftsuniversität Wien and The R Project.
For many years, R-Forge provided essential services for collaborative R package development. Its Subversion (SVN) repositories facilitated version control, while a suite of accompanying features—daily package builds and checks, forums, mailing lists, bug trackers, and project web pages—represented the state-of-the-art in collaborative software development at the time. The platform’s significance was recognized early on, with a detailed introduction published in the inaugural issue of The R Journal in 2009: "Collaborative Software Development Using R-Forge" by TheuùŸl & Zeileis.
The Inevitable Evolution: Technological Advancements and R-Forge’s Sunset
The decision to retire R-Forge stems from the fact that its underlying FusionForge system is no longer actively maintained. This technological stagnation has become increasingly apparent as the platform exhibits a certain "00s" aesthetic, as noted by some users, and critically, lacks many features that have become standard in modern software development workflows over the past two decades. These missing functionalities include integrated issue tracking, pull request workflows, and continuous integration (CI) capabilities, all of which are now considered essential for efficient and robust software development. The planned transition to a read-only state signifies the end of active development and support for new projects on the platform.
Embracing the Future: Codeberg as a Successor
Codeberg presents itself as a compelling modern alternative, built upon principles that resonate with R-Forge’s original ethos. It is a non-profit, community-driven platform dedicated to supporting free and open-source software projects. Codeberg offers a comprehensive suite of services, including Git hosting powered by Forgejo, project pages, and continuous integration tools. The platform is managed by Codeberg e.V., a registered non-profit organization based in Berlin, Germany, which welcomes contributions and membership from its users.
The adoption of Git as the de facto standard for version control, coupled with the widespread adoption of platforms like GitHub, GitLab, and now Codeberg, has fundamentally reshaped how software is developed and shared. These Git-based platforms offer advanced features such as branching, merging, and collaborative review processes through pull requests, which significantly enhance development efficiency and code quality. Codeberg, by embracing these modern tools, provides R package developers with a robust and scalable environment for their projects.
Navigating the Transition: A Step-by-Step Guide to Migrating Projects
The migration from R-Forge’s SVN-based system to a Git-based platform like Codeberg involves several key steps. Reto Stauffer has developed a detailed tutorial, outlining the process for transitioning projects, which can be adapted for Codeberg or other Git hosting services.

1. Initial SVN Checkout from R-Forge
The foundational step involves obtaining a local copy of the existing project from R-Forge. This is achieved through an SVN checkout. For instance, to retrieve the c403 R package, which is part of the exams project on R-Forge, the command would be:
svn checkout svn://R-Forge.R-project.org/svnroot/exams/
This command downloads the entire SVN repository structure to the local machine.
2. Compiling a Contributor List
To ensure a smooth transition of commit history and authorship, it is crucial to compile a list of all individuals who have contributed to the project on R-Forge. This can be accomplished using the svn log command. A shell script can process the log output to extract unique SVN usernames. For the c403 package, this might look like:
(cd exams/pkg/c403 && svn log -q | grep -e '^r' | awk 'BEGIN " ; print $2 ' | sort | uniq) > authors_c403.txt
This generates a file named authors_c403.txt containing a list of usernames. However, for Git to correctly attribute commits, this list needs to be augmented with the full names and email addresses of the contributors, formatted as username = Full Name <[email protected]>. It is vital to remove leading spaces from each line for subsequent commands to function correctly.
Optional Enhancement: Scraping Author Information
For projects with a large number of contributors, manually compiling this information can be tedious. An R function, rforge_authors, has been developed to automate this process. This function leverages the rvest package to scrape user profiles from R-Forge, extracting real names and email addresses, thereby populating the authors_c403.txt file.
3. Creating a Git Version from SVN
The git-svn tool is instrumental in converting the SVN repository into a Git repository. This process requires the correctly formatted authors_c403.txt file to ensure accurate author attribution. The command for this conversion is:
git svn clone svn://R-Forge.R-project.org/svnroot/exams/pkg/c403
--authors-file=authors_c403.txt --no-metadata
git-c403
This command creates a new directory, git-c403, containing the project history in Git format.
4. Optional: Filtering Repository Files
In cases where an entire R-Forge repository is being migrated, rather than just a specific package sub-folder, it may be necessary to clean up the Git history. This can involve removing extraneous files or directories, such as auto-generated README files or web content directories that are no longer relevant. Tools like git-filter-repo can be used to efficiently remove these items from the repository’s history.

git-filter-repo --force --path 'README' --invert-paths
git-filter-repo --force --path 'www' --invert-paths
5. Importing the Git Repository to Codeberg
The next step involves creating a new, empty project on Codeberg. Once the project is set up on the Codeberg platform, the local Git repository needs to be linked to this new remote origin. This is achieved by adding a new remote and then pushing the local branches to the Codeberg repository.
cd git-c403
git remote add origin ssh://[email protected]/zeileis/c403.git
git push --set-upstream origin main
Upon successful push, the entire commit history, including all past contributions, will be available on Codeberg. If contributors have associated Codeberg accounts with their email addresses, their profiles will be automatically linked to their commits.
6. Automated Package Builds and Checks with R-universe
To maintain continuous integration and automated testing for R packages hosted on Codeberg, the R-universe service, developed by Jeroen Ooms and maintained by rOpenSci, offers an excellent solution. This service, accessible via GitHub, requires setting up a dedicated repository (e.g., zeileis.r-universe.dev) containing a packages.json file that lists the R packages and their respective repository URLs.
[
"package": "c403",
"url": "https://codeberg.org/zeileis/c403"
]
The R-universe app then needs to be installed on the same GitHub account, enabling automated building and checking of packages hosted on Codeberg. Comprehensive setup instructions are available in the R-universe documentation.
7. Hosting Project Pages with Codeberg Pages
For projects requiring dedicated web pages, such as those generated by altdoc or pkgdown, Codeberg Pages provides a straightforward solution. Users can create a static site by committing content to a dedicated pages branch. This can be done manually by creating an orphan branch, adding static site files, and pushing it to the repository.
Alternatively, Forgejo actions can be utilized for automated page generation. An example of a project page hosted on Codeberg Pages is https://zeileis.codeberg.page/topmodels/, which is derived from the topmodels R package.
8. Updating Project Descriptions and Links
The final critical step involves updating project metadata to reflect the new hosting location. This includes modifying the URL and BugReports fields in the package’s DESCRIPTION file and updating the NEWS file accordingly. The addition of a README.md file is also recommended, as it has become a standard practice for projects hosted on modern platforms. Furthermore, it is advisable to add a link from the old R-Forge project page to the new Codeberg repository, ensuring a smooth transition for users. To prevent any further modifications to the R-Forge SVN, setting the permissions to read-only for the project is a recommended security measure.
The Broader Implications for the R Ecosystem
The retirement of R-Forge signifies more than just the discontinuation of a hosting service; it represents a broader trend within the R community towards embracing modern, Git-based development workflows. The transition to platforms like Codeberg, GitHub, and GitLab not only provides access to advanced collaboration features but also integrates R package development more seamlessly with the wider open-source software ecosystem. This shift is expected to foster greater collaboration, improve code quality through enhanced review processes, and streamline the development and deployment of R packages, ultimately benefiting the entire R community. The commitment of platforms like Codeberg to non-profit, community-driven development further reinforces the open-source ethos that has been central to R’s success.