Skip to content

Roadmap: Nexus Collections install (one-click bundles) — Opción B (premium + free) #222

Description

@Y4rd13

Nexus Collections install — public roadmap

This is the meta-tracker for adding one-click Nexus Collections install to RipperMod Manager (Nexus edition). Asked for by CptAnonymou5 on Nexus, scoped after a full investigation of how Vortex does it and how MO2 deliberately does not.

Scope decision: Opción B — full support, premium and free-tier. Premium users get a direct download flow; free users get the same sequential nxm:// dialog Vortex uses (one Mod Manager Download click per mod, in order).

Compliance notes

Read-only metadata + per-file downloads through the same Nexus API path RipperMod uses today. No auto-update of the manager itself. Free-tier flow forces user-initiated browser clicks per mod, matching the Nexus distribution policy.


Phase 1 — Foundation (premium-friendly first, free-aware schema)

  • PR A — Extend GraphQL collectionRevision query to fetch full manifest (fileId, name, version, size, choices, phase, instructions). Add nxm://<game>/collections/<slug>/revisions/<rev> parsing to the frontend deep-link handler. Tests.
  • PR B — DB schema: new installed_collections table (slug, revision_id, installed_revision_number, latest_revision_number, status, started_at, finished_at), installed_mods.installed_collection_id FK + collection_phase + is_optional, download_jobs.installed_collection_id for batch tracking. Idempotent migration in database.py.
  • PR C — Collection install orchestrator service (services/collection_install_service.py): resolve revision → manifest, plan ordered by phase, loop per phase, deploy once at phase end. REST endpoints (GET /api/v1/collections/{slug}/revision/{rev} for preview, POST /api/v1/games/{name}/collections/install to kickoff, GET /api/v1/collections/{id}/status SSE). Premium path only in this PR.
  • PR D — Non-interactive FOMOD driver: helper that translates collection choices format → existing dict[int, dict[int, list[int]]] schema. Add auto_deploy: bool = True flag to install_fomod to match install_mod. Tests for plugin-name lookup + graceful failure when a recorded choice no longer matches the FOMOD.
  • PR E — Frontend: CollectionPreviewDialog (preview manifest before install), CollectionInstallProgress (live SSE), CollectionFinishedDialog (summary).
  • PR F — Integration in Installed tab: collapsable groups per collection, uninstall-whole-collection action.

Phase 2 — Free-tier flow

  • PR GFreeUserDownloadDialog: sequential per-mod dialog mirroring Vortex's design. Shows current mod / total, opens the mod page in browser, waits for nxm://...?key=&expires= callback, retries on premium-status flip. Skip / Cancel actions per mod.
  • PR H — Concurrency semaphore in download_service.py (cap at e.g. 3 parallel downloads). Required for large collections — currently every create_and_start_download spawns a loose task with no cap.
  • PR I — Update detection: compare installed revision against latestPublishedRevision.revisionNumber, surface an "Update available" pill on the collection group. Trigger re-install at new revision.

Out of scope (deliberate)

  • No collection authoring/uploading — install-side only. Users wanting to publish a collection still use Vortex.
  • No collection sharing between games — one collection lives in one game (matches Nexus's own data model).
  • No partial-collection updates — Phase 2 update flow re-installs the whole collection at the new revision; per-mod diffing is too brittle.

Reference

  • Vortex implementation: extensions/collections/src/ + src/renderer/src/extensions/nexus_integration/
  • Manifest shape: collection.json per Vortex types
  • MO2 deliberate refusal: PR #2383

Want to follow along?

Comment 👍 on this issue and you'll get pinged when each PR lands. ETA for first usable premium-only build: a few weeks once PR A starts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions