FOSS Resources

How to Archive an Open Source Project Responsibly

Archiving is a communication and continuity decision before it is a repository setting.

Archiving an open source project responsibly means telling users the project is no longer active, preserving the source and release history, closing or freezing the right channels, and explaining what users should do next.

The repository setting is only one step. Users, contributors, package maintainers, downstream forks, and security reporters need clear signals before a project becomes read-only or effectively unmaintained.

Archive, transfer, fork, or minimal maintenance

Archiving is appropriate when maintainers no longer intend to accept issues, review changes, publish releases, or respond to normal support. It is not the only option.

A project may be transferred to new maintainers, forked by a community, kept in minimal maintenance for security fixes, or split into an archived core and active successor. The right choice depends on user dependency risk, security exposure, maintainer availability, and whether a credible successor exists.

Do not imply archived software is safe or maintained. Archive status tells users that ordinary maintenance has changed.

Decide from user dependency risk

Before archiving, identify who still depends on the project. Users may rely on published binaries, source releases, package-manager entries, container images, documentation, APIs, file formats, or integrations. Downstream projects may depend on a library even if the repository seems quiet.

Dependency risk affects the archive plan. A small experimental tool can be archived with a short notice. A library used by other projects may need a longer warning, package deprecation notes, successor guidance, or a call for maintainers.

If the project has known security exposure, do not leave users guessing. State whether security reports are still reviewed, redirected, or no longer handled.

Notify users and contributors

The archival notice should be visible in the README, repository description, documentation, release notes, package metadata where relevant, and community channels that users actually follow.

Good notices explain:

  • whether the project is unmaintained, read-only, or superseded;
  • whether issues and pull requests are closed;
  • whether security reports are still accepted;
  • which release was the last maintained version;
  • whether a successor, fork, or replacement exists;
  • what users should avoid assuming.

Avoid vague language such as "inactive for now" if maintainers know they are stepping away.

Write a clear archive notice

A responsible notice can be short, but it should answer the user's immediate questions. For example: "This project is archived and no longer maintained. The final maintained release is 2.4.1. Issues and pull requests are closed. Security reports are not actively reviewed. Users should evaluate alternatives before using it for new work."

If a successor exists, link it without overstating compatibility. A fork may continue development but still differ in governance, release quality, packaging, or security response.

If no successor exists, say that. A vague "community forks welcome" does not help users unless the project also explains license, trademarks, build instructions, and package status.

Freeze project surfaces deliberately

Archiving may involve making a repository read-only, closing new issues, disabling discussions, freezing release pages, or marking package versions as deprecated. Each surface should be handled intentionally.

Do not close useful historical information unless there is a privacy, abuse, or legal reason. Old issues, release notes, checksums, and documentation can help users understand the project history.

Security contact paths need special care. If nobody can respond to reports, say that plainly and avoid suggesting active security support.

Preserve enough history for future users

Archival does not mean deleting context. Source history, license files, release tags, checksums, documentation, changelogs, and build notes can help users migrate or decide whether a fork is viable.

Remove or hide information only with a clear reason, such as private data, credentials, abuse, or legal exposure. Otherwise, old issues and release notes may explain important behavior that users still encounter.

If the project used external infrastructure, document what will disappear: hosted docs, build artifacts, package registries, demo servers, domain names, or chat channels. Users need to know which links are historical and which still work.

Preserve source, licenses, and release context

Responsible archival keeps the license, source history, release tags, documentation, checksums, and build notes available where possible. Users may need those records to migrate, audit, package, or fork the project.

If binary artifacts are removed or no longer maintained, explain the change without promising availability elsewhere. If package registries or downstream repositories continue to distribute old versions, distinguish those from upstream maintenance.

Archival also affects dependencies. If other projects depend on the archived code, an early notice gives them time to plan replacements.

Handle forks and successor maintainers

If maintainers want a successor, the project should explain what kind of transfer is possible: repository ownership, package ownership, domain names, trademarks, release keys, documentation hosting, or only a code fork.

Do not transfer privileged access casually. A successor needs trust, capacity, and a clear public announcement. Users should be able to tell when authority moved and when they are simply looking at an independent fork.

If a fork becomes the practical successor, keep the archive notice neutral and factual. Link the fork only when maintainers are comfortable pointing users there, and describe it as a fork unless authority has actually transferred.

Recover if archival was premature

Sometimes a project is archived and later revived. Recovery should be as explicit as archival: update the README, reopen issue channels intentionally, identify current maintainers, publish a fresh release plan, and explain whether old security reports or pull requests will be reviewed.

Revival is not just flipping a repository back to writable. Users need to know whether maintenance is genuinely active again and which old assumptions remain valid.

If only a small maintenance window is reopening, state the scope. A temporary security-fix period is different from full project revival.

Security and vulnerability expectations

Archiving a project changes security expectations. Users may assume a security policy still works if the file remains in the repository. If maintainers no longer monitor reports, the archive notice should say that clearly.

For projects that keep a security contact open after archival, explain the scope. The project may accept vulnerability reports for the final release, but not publish new feature updates. It may redirect reports to a successor. It may only document known risks without committing to fixes.

Avoid presenting archived software as safe because the source is public. Source availability does not mean active security review, dependency updates, or patched releases.

Package registries and downstream artifacts

Project archival does not automatically remove packages from registries, distributions, mirrors, or downstream builds. Users may continue installing old versions long after upstream maintenance stops.

Where the ecosystem supports it, package deprecation notes can point users to the archival notice, a successor, or a migration path. Use factual wording: final maintained version, maintenance status, and known replacement if one exists.

If the upstream project does not control a downstream package, do not claim it will be removed or updated. State what upstream controls and what users should verify in their package source.

Community closure and contributor respect

Archiving can disappoint contributors who invested time in issues, pull requests, translations, or support. A respectful closure explains what will happen to open work and whether any maintainers are available for final reviews.

If open pull requests will not be reviewed, say so. If documentation-only fixes can still be accepted for a short period, name the window and owner. If discussions will be locked, explain where historical information remains.

Clear closure avoids leaving contributors waiting for a response that will never come.

Archive notices for different audiences

Different readers need different archive information. End users need current safety and replacement context. Contributors need to know whether issues and pull requests are closed. Downstream packagers need the final release, license, source tag, and dependency state. Security reporters need to know whether anyone is listening.

The README notice can summarize all of this, then link to deeper release or package notes. The repository description can be shorter but should still say archived or unmaintained clearly.

If the project has a documentation site, add a visible banner there too. Users often arrive from search without seeing the repository home page.

What not to remove

Avoid deleting license files, release notes, changelogs, build instructions, migration notes, or old documentation simply because the project is inactive. Those records can help users leave safely.

If artifacts are removed to save hosting cost or because they cannot be maintained, state that in the archive notice. Silent disappearance creates confusion and encourages users to look for unverified copies.

Mark examples and badges carefully

Archived projects often contain old badges, screenshots, status labels, package links, and installation snippets that still look current. Review those visible signals before the archive is treated as complete.

A build badge showing a historical pass, a package badge that still points to an old version, or a README sentence that says "actively maintained" can mislead users even when the repository itself is marked archived. Replace those signals with archived, final release, or unmaintained wording where appropriate.

Do not rewrite history. The goal is to distinguish preserved records from current promises. Users should be able to tell which information describes the last maintained release and which information no longer reflects active support.

This is especially important for installation snippets because users may copy them without reading the full archive notice.

Archive decision table

DecisionAffected assetUser noticeSuccessor pathRisk
Read-only archiveRepositoryREADME and repository statusFork or successor link if knownUsers keep opening dead issues
TransferOwnership and permissionsMaintainer announcementNew maintainer contactConfusion over authority
Minimal maintenanceReleases and security fixesScope statementSecurity-only branchUsers expect normal support
Package deprecationPackage registryRegistry note and release pageReplacement package if knownOld installs continue silently
Documentation freezeDocs site or wikiBanner and last-version noteMigration guideUsers follow stale instructions

Archival checklist

Before archiving:

  1. Decide whether transfer or minimal maintenance is possible.
  2. Publish a clear archival notice.
  3. Identify the final maintained release.
  4. Preserve license, source, tags, and release history.
  5. Close or freeze issues, discussions, and pull requests intentionally.
  6. Update package metadata where the ecosystem supports deprecation notices.
  7. Explain whether security reports are still handled.
  8. Link credible successors only when they actually exist.

Archiving is successful when users can tell what has changed, what remains available, and what they should not expect from the project anymore.