---
# System prepended metadata

title: Host IMF Infrastructure on GH

---

---
title: Host IMF Infrastructure on GH
keywords: experimental, infrastructure, identifier, minting
---

# Host IMF Infrastructure on GH?

Draft design for a complete IMF infrastructure hosted entirely on zero, or low cost services by leveraging GitHub.

## Syntax

IMF:
```
IMF:10273/ZZ88HH41
\__/\___/ \/\___/
 |   |    | |
 |   |    | + value
 |   |    + value-prefix 
 |   + prefix or NAAN
 + Identifier identifier    
```

The following rules apply:
1. The normative form is uppercase
2. Allowed characters in the value and value-prefix are {A-Z, 0-9}
3. Allowed characters in the prefix or NAAN are {0-9}
4. The identifier identifier is always "IMF:"
5. value is unique within a value-prefix
6. value-prefix + value is unique within prefix or NAAN

The value-prefix part is optional.

## NAAN Assignment

The NAAN is centrally managed by the IMF owners and is technically a single JSON registry document held in a GitHub repository owned and managed by the IMF. 

Each entry in the registry document contains metadata about the allocating agent to which the NAAN has been assigned.

## Allocating Agent

An allocating agent is responsible for creating and managing value-prefixes and creating and managing identifier values.

An allocating agent may have sub-allocators, each of which works with a value-prefix.

An allocating agent is responsible for deploying a resolving service that is capable of resolving identifier values minted by the allocating agent or redirecting to another allocating agent for resolution.

Metadata associated with each identifier is stored in JSON documents held in the GitHub repository. A single JSON document may have one or more identifier metadata entries.

The resolver service supports content negotiation via link headers to provide access to the metadata document (i.e. redirect to the content in GitHub) or to another location as determined by the registered locations associated with the identifier.

Identifier registration data:

```json
{
    "ZZ88HH41": {
        
    }
}
```