Managing a large number of repositories becomes difficult once an organization grows.
A team may have hundreds or even thousands of repositories, and each repository can have different requirements.
For example:
Is the application production-facing?
Which team owns it?
Which environment does it belong to?
Does it contain sensitive data?
What compliance level applies to it?
Is it an internal or external service?
GitHub repository custom properties provide a structured way to store this kind of metadata. Organizations can use those properties to organize repositories, search and filter them, and target repositories with rulesets.
GitHub has also added a Copilot feature that can suggest allowed values when administrators create repository custom property definitions. The feature is currently available in public preview for GitHub Copilot Business and Enterprise plans.
This makes it easier to build a consistent repository metadata model without manually thinking through every possible value.
What Are Repository Custom Properties?
A custom property is structured metadata attached to a repository.
Imagine an organization has the following repositories:
orders-api
customer-portal
payment-service
internal-tools
reporting-service
You could define properties such as:
environment
team
application-type
internet-facing
compliance
A repository might then have values such as:
Repository: payment-service
environment: production
team: payments
application-type: api
internet-facing: yes
compliance: regulated
The important difference from putting this information in a README is that custom properties are structured.
That means GitHub can use them for repository searches, filtering, and governance scenarios.
Why Custom Properties Matter
Without structured metadata, organizations often maintain spreadsheets or naming conventions.
For example:
payment-service-prod
customer-api-internal
orders-api-prod
orders-api-dev
The problem is that names are not a reliable governance system.
A repository can be renamed.
Different teams can use different naming conventions.
And after several years, nobody may remember what a particular suffix means.
Custom properties separate repository identity from repository metadata.
Instead of:
payment-service-prod
you can have:
payment-service
environment = production
That is easier to search and automate.
Where GitHub Copilot Fits In
Creating the property itself is not particularly difficult.
The harder part is deciding what values should be allowed.
Suppose you create this property:
internet-facing
You could define:
yes
no
For another property:
compliance
you might need:
none
internal
regulated
restricted
The challenge becomes more obvious when an organization has many teams.
Different administrators may choose slightly different values:
Production
production
prod
PROD
These values may mean the same thing to people, but they are different values from a governance and automation perspective.
GitHub Copilot can now suggest allowed values while you create a custom property definition.
How Copilot Suggestions Work
The new feature is designed around the property definition process.
For example, imagine creating a multi-select property:
Property name:
FedRAMP
Copilot can suggest relevant allowed values such as:
Low
Moderate
Similarly, if you create a single-select property:
internet-facing
Copilot can suggest:
yes
no
You can then accept a suggestion or refresh the suggestions instead of manually creating every value.
The important point is that Copilot is helping with the definition of the metadata schema.
It is not automatically deciding the final governance policy for your organization.
Administrators still need to review the suggestions.
Creating a Useful Property Model
Before asking Copilot for suggestions, think about what information your organization actually needs.
A simple model could look like this:
Property | Type | Example Values |
|---|---|---|
environment | Single select | development, staging, production |
team | Single select | payments, platform, data |
application-type | Single select | API, web, worker |
internet-facing | Single select | yes, no |
compliance | Multi-select | internal, regulated |
criticality | Single select | low, medium, high |
This gives your repositories a consistent vocabulary.
Do not create dozens of properties simply because you can.
Each property should have a clear purpose.
Use Properties for Governance Metadata
A good property describes something about the repository that is useful outside the source code itself.
For example:
team = payments
can help identify ownership.
environment = production
can help identify operational importance.
internet-facing = yes
can help identify repositories that may require additional security controls.
compliance = regulated
can help identify repositories that require additional governance.
These values can then be used with GitHub's repository management and ruleset capabilities.
Custom Properties and Rulesets
One of the useful reasons to keep metadata structured is that custom properties can be used to target repositories with rulesets.
Consider:
internet-facing = yes
An organization may want additional repository rules for this group.
The relationship can be thought of as:
Repository
|
v
Custom Property
|
v
Repository Selection
|
v
Ruleset
This is much easier to maintain than manually selecting hundreds of repositories.
For example, if a new repository receives:
internet-facing = yes
it can fall into the same governance scope as other repositories with that property.
Choosing Property Types Carefully
The property type matters.
Suppose you need to store whether a service is internet-facing.
A single-select property makes sense:
internet-facing
yes
no
For technology ownership, you might use:
team
platform
payments
data
frontend
For a repository that can belong to multiple compliance categories, a multi-select property may be more appropriate:
compliance
internal
PCI
SOC2
FedRAMP
The property design should reflect how the information will actually be used.
Single Select vs Multi Select
Single Select
Use a single-select property when only one value should apply.
Example:
environment
development
staging
production
A repository should normally have one primary environment classification.
Multi Select
Use multi-select when multiple values can apply simultaneously.
Example:
compliance
internal
regulated
FedRAMP
A repository might need more than one classification.
Copilot's new suggestions can be particularly useful when administrators are creating allowed values for these property types.
A Practical Example
Imagine an organization manages several .NET applications.
You decide to create these properties:
runtime
owner-team
environment
internet-facing
criticality
For runtime, the values could be:
.NET
Java
Node.js
Python
Go
For environment:
development
staging
production
For criticality:
low
medium
high
You can then assign values to individual repositories.
For example:
Repository: orders-api
runtime: .NET
owner-team: commerce
environment: production
internet-facing: yes
criticality: high
Now the repository carries useful metadata that can be searched and used by governance processes.
Using the GitHub API
Custom properties can also be managed programmatically.
GitHub provides REST API endpoints for reading and updating repository custom property values. The current API documentation includes an endpoint for creating or updating property values on a repository.
A request can conceptually look like this:
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/repos/OWNER/REPO/properties/values
A response can contain values such as:
[
{
"property_name": "environment",
"value": "production"
},
{
"property_name": "service",
"value": "web"
},
{
"property_name": "team",
"value": "commerce"
}
]
The exact permissions and authentication method should follow your organization's GitHub security policy. The API supports fine-grained permissions for managing repository custom property values.
Automating Property Updates
Once your organization has defined a stable metadata model, automation becomes useful.
For example, a provisioning process could create a repository and then assign its initial properties.
Conceptually:
Create Repository
|
v
Set Owner
|
v
Set Environment
|
v
Set Application Type
|
v
Apply Governance Rules
This reduces the amount of manual configuration required when new repositories are created.
However, automation should not blindly assign values.
The source of each value should be clear.
Keep Property Values Consistent
One of the biggest benefits of custom properties disappears if teams use inconsistent values.
Avoid:
prod
production
Production
PROD
Pick one convention.
For example:
production
Then use it everywhere.
The same applies to team names.
Avoid:
Platform
platform-team
platform
Platform Engineering
if all of them refer to the same ownership group.
Define a controlled vocabulary.
Let Copilot Suggest, But Review the Result
Copilot suggestions can save time, but suggestions should not become an automatic governance policy.
For example, if you create:
data-classification
Copilot might suggest values that appear reasonable.
Before accepting them, ask:
Do these categories match our internal policy?
Are any categories missing?
Are two values effectively duplicates?
Will teams understand them?
Can automation use them consistently?
Are the names stable enough for long-term use?
Copilot can help generate ideas, but the organization should own the final taxonomy.
Avoid Overusing Custom Properties
It is easy to create too much metadata.
For example:
team
department
business-unit
owner
technical-owner
application-owner
service-owner
If all of these represent nearly the same thing, the metadata model becomes harder to maintain.
A better model might be:
owner-team
with a clear definition.
Every property should answer a useful question.
For example:
Who owns this repository?
What environment is it for?
Is it externally exposed?
What compliance category applies?
How critical is it?
If nobody uses the answer, the property may not be necessary.
Custom Properties vs README Metadata
A README is still useful.
But the two serve different purposes.
Requirement | README | Custom Property |
|---|---|---|
Human documentation | Good | Limited |
Structured filtering | Poor | Good |
Repository governance | Limited | Good |
Ruleset targeting | Not designed for it | Supported |
Long-form explanation | Good | Poor |
Automation | More difficult | Better suited |
Use a README for information developers need to read.
Use custom properties for structured metadata that GitHub and automation need to understand.
Custom Properties vs Repository Topics
Repository topics are also useful for classification.
For example:
dotnet
api
microservices
kubernetes
Topics are useful for discoverability and general categorization.
Custom properties are better suited to organization-specific structured metadata.
For example:
environment = production
criticality = high
owner-team = payments
These are governance fields rather than general repository topics.
Copilot Custom Instructions Are Different
There is another GitHub Copilot feature that can easily be confused with repository custom properties.
Copilot custom instructions provide context about how Copilot should work with a project.
For example, a repository can contain:
.github/copilot-instructions.md
The file can explain coding conventions, project structure, testing practices, and other instructions that Copilot should consider.
For example:
# Project Guidelines
- Use C# nullable reference types.
- Use xUnit for tests.
- Prefer async APIs for I/O operations.
- Follow the repository naming conventions.
- Run unit tests before submitting changes.
This tells Copilot how to work with the codebase.
Custom properties answer a different question:
What metadata describes this repository?
So:
Custom Instructions
|
v
How should Copilot work?
Custom Properties
|
v
What metadata describes this repository?
They can complement each other, but they are not interchangeable.
A Good Repository Metadata Strategy
For a growing organization, a simple strategy works well.
Step 1: Identify Important Metadata
Start with information that is genuinely useful.
Step 2: Define a Small Vocabulary
Avoid creating unnecessary values.
Step 3: Use Copilot for Suggestions
When defining new properties, review Copilot's suggested values.
Step 4: Standardize the Values
Remove duplicates and ambiguous names.
Step 5: Assign Properties
Apply values to existing repositories.
Step 6: Connect Governance
Use properties where appropriate for repository selection and rulesets.
Step 7: Review Periodically
Repositories change.
Teams change.
Applications move between environments.
Your metadata model should be reviewed as the organization evolves.
Common Mistakes
Treating Suggestions as Policy
Copilot suggestions are not a replacement for organizational governance.
Creating Too Many Properties
Start small and add properties only when there is a clear use case.
Allowing Duplicate Values
prod, production, and Production should not become three different values for the same concept.
Using Free-Form Text Everywhere
Free-form values make automation and filtering harder.
Where possible, use controlled values.
Mixing Documentation With Metadata
Do not try to put complete architectural documentation into a custom property.
Keep detailed explanations in documentation.
Ignoring Ownership
Someone should be responsible for maintaining the property definitions and allowed values.
Without ownership, metadata becomes stale.
Best Practices
Keep Names Clear
Prefer:
internet-facing
over:
if
A property name should be understandable without additional explanation.
Use Stable Values
Prefer:
production
over values tied to temporary team terminology.
Document the Meaning
For each property, define what it means.
For example:
criticality
low = limited business impact
medium = moderate business impact
high = significant business impact
This prevents different teams from interpreting the same value differently.
Review Copilot Suggestions
Use suggestions as a starting point.
Validate them against your organization's actual requirements before accepting them.
Automate Carefully
Once the taxonomy is stable, use APIs or repository-management automation to keep values consistent. GitHub provides REST APIs for reading and updating repository custom property values.
Summary
Repository custom properties provide a structured way to describe GitHub repositories.
They can capture information such as:
owner-team
environment
application-type
internet-facing
criticality
compliance
That metadata can then be used for repository organization, filtering, automation, and ruleset targeting.
The newer GitHub Copilot capability can suggest allowed values when administrators create custom property definitions. This can make the initial design of a repository metadata model easier, especially when the right vocabulary is not obvious.
The important part is still human review.
Copilot can suggest values, but your organization should decide what those values mean and which ones should become part of the official repository taxonomy.
For teams managing a large GitHub environment, the combination of structured repository metadata, consistent property values, automation, and governance rules can make repository management much easier to scale.

Join the conversation! Your thoughts help the community grow.