Projects are top-level records that parent manifests, versions, and channels. They're used to annotate a group of releases.
Like other ATProto records, they are uniquely identified by the combination of their owner's DID and the record's rkey. This means that it is possible to have two separate entities publish projects under the same name.
rkey structure
Projects use an alphanumeric rkey structure with a limited alphabet, favoring unique slugs to prevent name collisions within the same DID identity. The software.release.project#name field must also be set to this value.
The valid alphabet is as follows: lowercase ASCII alphanumerics and interior hyphens only, no dots, no leading or trailing hyphen, no colons.
Hierarchy
Projects have a parent field that should be specified in a parent/child project scenario.
Renaming
Project rkeys are stable and should not be changed.
If you wish to rename your project, you should copy the existing software.release.project record to one using the rkey you desire while updating the name field, then set the renamedTo field on the original project. This will allow any consumers using the old rkey to resolve to your renamed project.
Metadata
You will likely want to attach more information to a project than is specified here in the lexicon. We recommend doing that in a separate record that you define, and then link back to your software.release.project record.
This structure enables your programs to index a subsection of all software.project.release records, instead of requiring you to subscribe to all projects and then filtering based on the ones you care about.