Skip to content

Releases: besoeasy/Originless

1.0.2 — Lightweight standalone node (Nostr offloaded)

Choose a tag to compare

@besoeasy besoeasy released this 27 Aug 19:56

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 /archive filesystem volume, SQLite tables (archive, archive_events, nostr_cursors, archive_attempts), and the background crawler worker.
  • Cleaned API & Telemetry: Removed /archive and /archive.html endpoints; removed Nostr relay/npub payload from GET /status and archive counters from GET /metrics.
  • Trimmed dependencies: Removed github.com/gorilla/websocket and Nostr Bech32 encoding utilities from the node binary.
  • Simplified container: Streamlined Dockerfile and docker-compose.yml to 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

Choose a tag to compare

@besoeasy besoeasy released this 27 Aug 18:54
30b7f31

Originless 1.0.1

Better P2P connectivity on boot

  • Entrypoint now waits on the Kubo HTTP API (instead of offline ipfs id, which raced repo.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 4001 is actually bound
  • Cleared Swarm.AddrFilters so 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_NODES lets 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 /status during 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 /ipfs path

Full changelog: v1.0.0...v1.0.1

1.0.0 — Automatic Nostr IPFS archive

Choose a tag to compare

@besoeasy besoeasy released this 23 Aug 13:48

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:latest

What happens next:

  • Walks those npubs on famous relays (or NOSTR_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 imeta tags
    • NIP-94 kind 1063 file events (url, m, x sha256)
  • Kinds scanned: 1 notes · 6 reposts · 20 pictures · 1063 files · 30023/30024 long-form · 9802 highlights
  • 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 gatewayGET /ipfs/{cid} on this node (disable with ENABLE_GATEWAY=false). /status now 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 uploadsPOST /uploadfolder pins a tree as one root CID.
  • Disposable node data — only /archive is 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:latest

Dashboard: http://localhost:3232 · API: http://localhost:3232/status