How does CKAN work - HebaruSan/CKAN GitHub Wiki

Client

Only one part of the CKAN infrastructure runs on your local PC: the client application that manages your game folders. To do this job, it maintains a registry of metadata, as well as a cache of downloads. The client's code lives in the CKAN repository.

The registry is generated from the CKAN-meta repository, which maintains one metadata file for each version of each mod, explaining how to download and install it. Refreshing the client downloads a compressed archive of this repository. To make a mod available to the client, its metadata must be added to this repository.

The cache is downloaded from the same links that are used when installing mods manually. CKAN does not maintain its own hosting servers.

NetKAN bot

The CKAN team maintains a group of microservices, known as the bot, that crawls known mods looking for new versions. The bot scans the NetKAN repository to find the mods to check, and it downloads the latest versions to inspect them for changes. Any new data it finds is added to the CKAN-meta repository. The bot's code is in the NetKAN-Infra repository, look there for details on how it works.

The bot runs about once every 2-6 hours. Every 5 minutes it updates its status page at http://status.ksp-ckan.space/ with any errors it encountered. This can be used to identify problems with indexing new mod versions. This page's code is in the NetKAN-status repository.

Pull requests

CKAN-meta can be updated manually, as can NetKAN. This is done via pull requests on GitHub. These can be created by anyone, but merged only by members of the CKAN team.

When a mod is added to SpaceDock, the author can check a checkbox to opt in to CKAN, which auto-generates a pull request in the NetKAN repository. This is then reviewed by the team, often revised, and merged to add the mod to the index.

These pull requests are validated by scripts in the xKAN-meta_testing repository, the validation happens mostly by checks built into netkan.exe.

⚠️ **GitHub.com Fallback** ⚠️