pull down to refresh

If I understand it correctly, the actual source files for any given project are still likely to be on GitHub, GitLab, etc?

Are there plans to push further decentralization mechanisms, for example (thinking off the top of my head) enabling multiple reference sources on different platforms (or better: self-hosted) that sync from each other?

Enabling multiple reference sources on different platforms (or better: self-hosted) that sync from each other?

You can already do that, it's called repository mirroring.

This means you can push to your self-hosted Gitea instance, and it will automatically push to Github etc.

reply

na thats not what this does as this can live on nostr

reply
21 sats \ 1 reply \ @ek 20 Nov 2025

I know that this isn’t what your thing does. I wanted to say that what was requested doesn’t need your thing, because a solution already exists.

reply

Yep, that's how I understood it too.

reply

As someone interested in this problem, would this be like how torrents work? I’m just thinking from the user’s perspective: how would hosting, downloading and guaranteeing availability work?

reply

yes thats a very good comparison. its about discoverability mostly. fetching from mulitple sources but they can also "live on nostr"

reply

https://github.com/arbadacarbaYK/gittr/blob/main/docs/FILE_FETCHING_INSIGHTS.md#file-opening-flow---correct-strategy-order if you're looking for a more detailed description this might give you some clue as its complicated and can either live within events on ngit servers or link to external sources. Thats the difference import vs. create repo enacts.

User clicks on a file

Strategy 1: Check if file content is embedded in repoData.files array
├─ If found with content → Use embedded content ✅
└─ If not found → Continue to Strategy 2

Strategy 2: Try git-nostr-bridge API
├─ Resolve ownerPubkey:
│ ├─ Check repoData.ownerPubkey
│ ├─ Check localStorage for matching repo
│ ├─ Decode npub from params.entity
│ └─ Fallback to resolveEntityToPubkey utility
├─ Success → Use content from git-nostr-bridge ✅
├─ 404 (not cloned) → Check if GRASP server
│ ├─ If GRASP → Trigger clone → Poll (max 10 attempts, 2s delay) ✅
│ └─ If not GRASP → Continue to Strategy 3
└─ Error → Continue to Strategy 3

Strategy 3: Try external git servers via API proxy
├─ GitHub → /api/git/file-content?sourceUrl=...&path=...&branch=...
├─ GitLab → /api/git/file-content?sourceUrl=...&path=...&branch=...
├─ Codeberg → /api/git/file-content?sourceUrl=...&path=...&branch=...
└─ GRASP → /api/git/file-content?sourceUrl=...&path=...&branch=...

Handle binary vs text files
├─ Binary → Return base64, frontend creates data URL
└─ Text → Return UTF-8 content

reply

No files are either in an event blob or hybrid, where the blob links to external sources. Thats some rough high level description :P if you click around youll find some of each, in the sidebar youll see where it came from

reply