Releases: besoeasy/Originless
Releases · besoeasy/Originless
Release list
1.0.2 — Lightweight standalone node (Nostr offloaded)
Originless 1.0.2
Lightweight standalone node
- Nostr integration offloaded: In-node Nostr scraping and mirroring has been removed and moved to the dedicated nostr-backup integration.
- Removed internal archiver: Removed
/archivefilesystem volume, SQLite tables (archive,archive_events,nostr_cursors,archive_attempts), and the background crawler worker. - Cleaned API & Telemetry: Removed
/archiveand/archive.htmlendpoints; removed Nostr relay/npub payload fromGET /statusand archive counters fromGET /metrics. - Trimmed dependencies: Removed
github.com/gorilla/websocketand Nostr Bech32 encoding utilities from the node binary. - Simplified container: Streamlined
Dockerfileanddocker-compose.ymlto focus purely on fast, reliable IPFS storage, pinning, anonymized media uploading, and gateway proxying.
Full Changelog: v1.0.1...v1.0.2
1.0.1 — Reliable P2P connectivity on boot
Originless 1.0.1
Better P2P connectivity on boot
- Entrypoint now waits on the Kubo HTTP API (instead of offline
ipfs id, which racedrepo.lock) before joining the swarm - Swarm connect retries DNS and QUIC-v1 dials before falling back, and re-applies the swarm listen address every boot so Docker-published
4001is actually bound - Cleared
Swarm.AddrFiltersso Docker Compose / LAN peers can dial
Improved finding
- Seeded explicit bootstrap peers instead of relying on Kubo 0.41's
["auto"]remote autoconf, which could leave a fresh node at 0 peers forever if the fetch timed out IPFS_PEER_NODESlets Compose peers find and dial each other over DNS- Port 4001 exposed on the Compose stack so peers can actually reach you
- Relaxed healthchecks onto
/statusduring swarm join so containers stop restart-looping while the node comes up
Trusted nodes
- Added a few trusted bootstrap peers (
bootstrap.libp2p.io,va1.bootstrap.libp2p.io,amigarage.bootstrap.libp2p.io)
Cleanup
- Gateway format selector removed; examples emit
ipfs://only - Originless response headers and CORS no longer leak onto the Kubo
/ipfspath
Full changelog: v1.0.0...v1.0.1
1.0.0 — Automatic Nostr IPFS archive
Originless 1.0.0
A private IPFS pin node that automatically mirrors IPFS media from Nostr onto a local archive — then keeps those CIDs alive on the swarm.
Automatic Nostr → IPFS archive
Pass the accounts you care about. Originless does the rest.
docker run -d \
--name originless \
--restart unless-stopped \
-p 3232:3232 -p 8080:8080 \
-e STORAGE_MAX=100GB \
-e NOSTR_NPUBS=npub1...,npub1... \
-v originless-archive:/archive \
ghcr.io/besoeasy/originless:latestWhat happens next:
- Walks those
npubs on famous relays (orNOSTR_RELAYS) every 15 minutes, first scan at startup - Pulls IPFS objects out of notes, pictures, files, and long-form:
ipfs://…in content- public gateway URLs (
ipfs.io,dweb.link, Pinata, Cloudflare,{cid}.ipfs.*) - NIP-92
imetatags - NIP-94 kind
1063file events (url,m,xsha256)
- Kinds scanned:
1notes ·6reposts ·20pictures ·1063files ·30023/30024long-form ·9802highlights - Writes verified bytes to
/archive(never GC’d) - Pins immediately, then re-pins every 6 hours so DHT provider records stay fresh
- The janitor never unpins archive CIDs
List what landed, then fetch it from this node:
curl http://localhost:3232/archive
curl -O "http://localhost:3232/ipfs/$CID"GET /status reports archive size, last scan, last re-pin, and per-npub counts.
Also in 1.0.0
- HTTP API reference — every route in
api.md. No keys, no accounts. - Self-hosted gateway —
GET /ipfs/{cid}on this node (disable withENABLE_GATEWAY=false)./statusnow shows whether the gateway is serving, plus the public URL. POST /media— strip EXIF/GPS/XMP before pin so the CID is not the camera original.- Folder / DApp uploads —
POST /uploadfolderpins a tree as one root CID. - Disposable node data — only
/archiveis a volume. Recreate the container and/data(Kubo repo + pin log) is gone; archive media is re-pinned on boot. - Dashboard — pin library, archive view, gateway picker, agent prompt for LLM tools.
Run it
docker run -d \
--name originless \
--restart unless-stopped \
-p 3232:3232 -p 8080:8080 \
-e STORAGE_MAX=100GB \
-v originless-archive:/archive \
ghcr.io/besoeasy/originless:latestDashboard: http://localhost:3232 · API: http://localhost:3232/status