Skip to content
 
 

Repository files navigation

gitnostr

Git bridge to Nostr for gittr. Same codebase as arbadacarbaYK/gitnostr on gittr.

Components: git-nostr-bridge · git-nostr-ssh · git-nostr-db · git-nostr-cli (gn)

Docs hub: gittr-docu — what gittr is and the clickable platform map. This repo is the git bridge, not the website.

This repo’s Page: root index.html (same visual language as the hub). After Push Manifest, save site name gitnostr.

Where this sits (platform map)

This repo is the git server layer — not the website and not the AI tools. You are here = gitnostr Bridge (git.gittr.space, teal). Cyan-outlined host boxes = public hostnames (teal = this repo; cyan outline = host URLs).

Platform map: gitnostr Bridge at git.gittr.space

flowchart LR
  UI["gittr Client<br/>gittr.space"]
  MCP["gittr-mcp<br/>AI agents"]
  CLI["git / gn / SSH"]
  Bridge["★ YOU ARE HERE · gitnostr Bridge<br/>git.gittr.space<br/>SSH / HTTPS · bare repos"]
  RelayGittr["gittr Pyramid relay<br/>relay.gittr.space<br/>wss · open forge + GRASP"]
  Relays["Other Nostr relays"]
  Pages["Pages / nsite<br/>pages.gittr.space"]
  Blossom["Blossom<br/>blossom.gittr.space"]
  Remote["git remote nostr<br/>optional · ngit"]

  UI -->|announce · push UI| RelayGittr
  UI -->|announce · push UI| Relays
  UI -->|import / sync| Bridge
  UI -->|Pages blobs| Blossom
  MCP -->|HTTP + Nostr auth| Bridge
  MCP --> RelayGittr
  MCP --> Relays
  CLI -->|SSH / HTTPS git| Bridge
  Bridge -->|watch kinds · bare repos| RelayGittr
  Bridge -->|watch kinds · bare repos| Relays
  Pages -.->|sites, not git objects| Relays
  Pages --> Blossom
  Remote -.->|same NIP-34 events| Relays

  classDef youAreHere fill:#0f766e,stroke:#5eead4,stroke-width:3px,color:#ecfdf5
  classDef hostUrl fill:#164e63,stroke:#22d3ee,stroke-width:2px,color:#ecfeff
  class Bridge youAreHere
  class Pages,Blossom,RelayGittr hostUrl
Loading
Piece Host / on gittr Talks to this bridge how?
gittr Client gittr · gittr.space Push/import → bridge API; clone URLs point at git.gittr.space
★ gitnostr (this README) gitnostr · git.gittr.space You are here — bare repos, SSH keys (kind 52), permissions
gittr-mcp gittr-mcp Agents push/list via HTTPS + signed Nostr headers
Pages / nsite nsite-gateway · pages.gittr.space Separate — static sites from Nostr, not the git object store
Blossom gittr-blossom · blossom.gittr.space Blob storage for Pages and Nostr git. Not git objects
gittr Pyramid relay pyramid · relay.gittr.space Open wss:// forge relay the bridge also watches
gittr-helper-tools gittr-helper-tools Snippets only — not a runtime host (omitted from the diagram)
git remote nostr ngit-cli Optional; reads/writes same relay events; may also hit clone HTTPS

Addressing: on disk, owner dirs are hex pubkey; HTTPS clone tags use npub via npub → hex symlinks on git.gittr.space (NIP-34-friendly). SSH accepts hex or npub.

Where the Code tab gets files: latest live 30617 is the map; a forge source is the tree when present (stale files on this bridge are replaced); otherwise first non-empty clone[] listing. Write-up: gittr FILE_FETCHING_INSIGHTS.md. This repo’s piece is the on-disk mirror: file-fetch-flow.md.

gitnostr vs ngit

They speak the same NIP-34 language on relays (repo announcement 30617, state 30618, issues, PRs). They are not the same software.

  • gitnostr (this repo) is a git server. It keeps bare repos on disk and serves them over SSH and HTTPS. The matching website is gittr.
  • ngit is a CLI plus git-remote-nostr. You clone nostr://…; the actual git bytes live on GRASP hosts (HTTPS git and a relay on the same hostname). The matching website is gitworkshop.
  • Running a GRASP host yourself means ngit-grasp (Rust), not this Go bridge. Same kind of job (store git, speak Nostr), different protocol and no SSH.

Name trap: gitnostr.com is a public GRASP host on the ngit stack. It is not this repository.

gitnostr (this bridge) ngit + git-remote-nostr
What it is Git server you run (git-nostr-bridge, git-nostr-ssh, gn) Git client on your laptop
Day-to-day git SSH / HTTPS (git@git.gittr.space:<npub>/repo.git) git clone nostr://<npub>/<repo>
Where files live Bare repos on your host (e.g. git.gittr.space) On the GRASP / clone[] hosts you listed (e.g. relay.ngit.dev)
Who may push SSH keys from Nostr kind 52, plus HTTPS ACL Signed kind 30618 (repo state); helper then pushes git over HTTPS
Kind 52 SSH keys Yes → authorized_keys No
Lightning paywall on git push Yes (push_cost_sats) No
Watches relays and creates/deletes mirrors Yes No (it is not a server)
nostr:// remotes Interop — install ngit’s helper if you want them Native
Pull requests Normal git branches; issues/PRs in gittr pr/ branches → kinds 1618 / 1619; ngit send / ngit pr
Issues from the terminal Limited (gn); rest is gittr ngit issue
Self-host the git store This repo Deploy ngit-grasp, or pick a public GRASP host
Pairs with gittr.space gitworkshop.dev

Web-forge extras (GitHub import, Pages, bounties, /apps) live in gittr, not in this bridge. ngit extras (ngit merge, stacked PRs, GRASP-06 contributor push) live in the ngit CLI, not here.

Day-to-day on gittr.space: SSH/HTTPS to this bridge, not the ngit binary. Install git-remote-nostr only if you want nostr:// as well.

Deeper internals: Architecture (more detailed than this map).

Docs on gittr: Architecture · README · SSH guide

gittr forge: arbadacarbaYK/gittr · bridge setup

Build here (monorepo):

make git-nostr-bridge git-nostr-ssh
make git-nostr-cli   # gn

Go module security pins (gorilla/websocket v1.5.3+, golang.org/x/mod v0.40.0+) must match gittr ui/gitnostr/go.mod. The two trees are not auto-synced. Details: GO_MODULE_EXPLANATION.md.

About

gittr-adapted Git bridge for Nostr git hosting. Bare repos over SSH and HTTPS, kind-52 keys, apps, Pages, zaps, and bounties. Alternative to ngit. Live at git.gittr.space.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages