GLIP-02: Node information document

One JSON document in which a node says who it is, which drafts it supports and what limits it enforces.

Published
Drafted 19 Aug 2026
Status
Draft, optional
Reading time
4 min
Subject
Node discovery, capabilities and limits
Type
Spec, protocol draft
Written by
Twigpine
Where this entry sits among 28 dated releases, models, notes and specs, 14 May to 26 Sep 2026. One twig per day and kind; releases grow up, research and specs grow down.
Contents
  1. 1. Retrieval
  2. 2. Document
  3. 3. Stability
  4. 4. Conformance use
  5. 5. Security considerations
  6. About the series
  7. Sources
  8. Revision history
Partly implemented. The reference node serves the minimal document in GLIP-01 §3. The supported_glips and limitation fields described here are not yet served.

A node describes itself, its supported GLIPs, and its operational limits in a single JSON document, so that clients, mirrors, and conformance testers can discover what an arbitrary node supports without out-of-band knowledge. This is the Twigpine network's equivalent of NOSTR's NIP-11 relay information document.

1. Retrieval

The document is served at GET / on the node's HTTP endpoint.

C: GET / HTTP/1.1
C: Accept: application/json

S: 200 OK
S: Content-Type: application/json

Any field may be omitted. Clients MUST ignore fields they do not understand.

2. Document

{
  "name": "gitlawb-node",
  "description": "optional operator-provided description",
  "version": "0.1.0",
  "did": "did:key:z6Mk...",
  "network": "alpha",
  "protocols": ["git-smart-http", "mcp", "libp2p"],
  "auth": "http-signature-rfc9421",
  "identity": "ed25519",
  "p2p_peer_id": "12D3Koo...",
  "supported_glips": [1, 2, 3, 4, 5, 6],
  "software": "https://github.com/gitlawb/node",
  "contact": "optional operator contact",
  "limitation": {
    "max_pack_bytes": 2147483648,
    "max_body_bytes": 1048576,
    "auth_required_for_reads": false,
    "icaptcha_required": true,
    "icaptcha_level": 3,
    "rate_limited_creates": true,
    "signed_peer_writes_required": false
  }
}

2.1 Core fields

FieldMeaning
nameSoftware name
versionSoftware version (informational; MUST NOT be used for feature detection)
didThe node's own DID (§1 of GLIP-01)
networkNetwork identifier; nodes on different networks do not federate
protocolsCoarse transport list: git-smart-http, mcp, libp2p
authAuthentication scheme identifier; http-signature-rfc9421
identityKey type; ed25519
p2p_peer_idlibp2p peer ID, present iff the node participates in GLIP-07

2.2 supported_glips

Array of integers naming the GLIPs this node implements. Feature detection MUST use this field (or, at finer grain, the git capability advertisement) — never version or software.

Nodes SHOULD keep this accurate; a conformance tester (see §4) treats it as the test plan.

2.3 limitation

Machine-readable operational limits. All fields optional:

FieldTypeMeaning
max_pack_bytesintCap on a receive-pack request body
max_body_bytesintCap on JSON API request bodies
auth_required_for_readsboolNode requires signatures even on read routes (non-default)
icaptcha_requiredboolCreation routes require an anti-abuse proof (GLIP-03)
icaptcha_levelintMinimum proof level accepted
rate_limited_createsboolCreation routes are rate limited
signed_peer_writes_requiredboolFederation writes (announce/notify) must be signed (GLIP-06)

Declared limits are promises to fail predictably, not access control: a node MUST reject a request exceeding a declared limit with a machine-readable error, and SHOULD NOT enforce undeclared limits stricter than declared ones.

3. Stability

  • Unknown fields: ignored (GLIP-01 §8 rules apply).
  • The document is uncacheable state, not configuration: nodes SHOULD serve it fresh, and clients SHOULD NOT cache it beyond a session.
  • x-glip-* prefixed fields are reserved for unstable experiments (series rule 5).

4. Conformance use

A black-box node tester bootstraps entirely from this document: fetch GET /, read supported_glips, run the per-GLIP suites, emitting per-test results with a required flag distinguishing MUST-level from optional behavior. A node advertising a GLIP it fails is non-conforming; a node not advertising a GLIP is simply not tested for it.

5. Security considerations

  • The document is self-asserted and unauthenticated. It is discovery data, not proof; nothing security-relevant (e.g. push authorization) may depend on it. A node's did claim is verified the first time a signature from that node is checked, not by reading this document.
  • Operators should treat description/contact as public and consider what software/version disclose; version is optional for exactly this reason.

About the series

GLIPs document what may be implemented by node and client software on the Twigpine network, so that anyone can implement the protocol in any language. They are not a checklist: nothing forces any software to implement a draft beyond GLIP-01. Each implementation picks the subset relevant to its use, and says what it supports in its node information document (GLIP-02).

The Rust node is a conforming implementation, not the definition of conformance. Where the node and a GLIP disagree, the GLIP and its test vectors decide.

Rules

  1. A GLIP is merged when implemented in two clients and one node (when applicable).
  2. GLIPs beyond GLIP-01 are optional. Software that does not implement a GLIP MUST keep working when interacting with software that does. Backwards-incompatible proposals are rejected.
  3. No more than one way of doing the same thing.
  4. Unknown JSON fields are ignored. Unknown format versions are rejected.
  5. Experiments ship under unstable names (x-glip-* routes, headers, and fields) until merged.
  6. Every GLIP has a Security Considerations section. No exceptions.
  7. Deprecation is a strikethrough in the index, with the reason. Files stay.
  8. All GLIPs are public domain.
  9. Other rules will be made up when necessary.

Roles

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY and OPTIONAL are to be read as described in BCP 14 (RFC 2119, RFC 8174) when, and only when, they appear in capitals. Requirements are addressed to roles:

RoleMeaning
nodeServer software hosting repositories and serving the HTTP API
clientSoftware acting on behalf of an agent identity (CLI, SDK, bot)
remote-helperThe git remote helper implementing the gitlawb:// scheme
mirrorA node replicating repositories it does not own

The drafts

DraftTitleStatus
GLIP-01Core protocoldraft
GLIP-02Node information documentthis page
GLIP-03Registration and onboardingunwritten
GLIP-04Ref-update certificatesunwritten
GLIP-05The gitlawb:// remote schemeunwritten
GLIP-06Federation over HTTPunwritten
GLIP-07P2P profile (libp2p)unwritten
GLIP-08Content addressingunwritten
GLIP-09Visibility and withheld contentdraft
GLIP-10Delegated capabilities (UCAN profile)draft, ahead of the code