GatheRs

A fast, offline-capable card management suite for Magic: The Gathering, Riftbound, and Pokémon TCG. Rust crates to search by CLI, REST API, or a full React web UI. Or build your own solution on top of the libraries provided!

Magic: The Gathering Riftbound Pokémon TCG
3 Card Games
3 Interfaces
100% Offline Capable
Rust Backend

Everything you need to manage your collection

GatheRs provides a complete toolkit - whether you prefer typing commands, calling an API, or browsing a visual interface.

Powerful Search

Filter by name, color, rarity, set, artist, card text, and more. Searches run locally at native speed - no API rate limits.

💾

Offline First

Databases are downloaded or generated on demand. Keep searching when you have no internet connection. The first download is not offline though, sadly.

📚

Global Collection Tracking

Manage multiple collections, timestamps, and bulk import/export via CSV. Mix and match cards from all supported games. It's your collection, who am I to tell you not to put that Squirtle next to Jace?

🃏

Multi-Game

One unified tool for Magic: The Gathering, Riftbound, and Pokémon TCG - with a shared retrieval abstraction layer. Want to add One Piece? Or that old Star Wars TCG? PRs always welcome!

🔗

REST API

Self-host the server and get all the command line features exposed over HTTP. Build your own integrations with the JSON REST API, documented via OpenAPI/Swagger.

Rust Performance

We are big Rust fans in this house, so we will rep Rust. Also, it's Rust, so you know it's bug free 100%.

React Web UI

A full-featured browser app that works alongside the local server. No cloud account needed. Unless you self-host and put some login in front of it. Again, I will not stop you. You do you queen / king / royalty!

Collection browser interface
Riftbound search interface
Pokemon search interface

Supported Card Games

Each game has a dedicated retrieval system that implements a common interface - making it trivial to add new games in the future.

Magic: The Gathering
Magic: The Gathering cards

Two retrieval modes:

  • Scryfall API - live online queries, always up to date
  • Local SQLite - full AllPrintings.db from mtgjson.com
Riftbound
Riftbound logo

Dedicated local SQLite database with auto-update from official sources.

Many thanks to vikkumar2021 for their amazing work.

Pokémon TCG
Pokémon TCG cards in play

Local SQLite database for the Pokémon Trading Card Game.

Many thanks to PokeTrax for their amazing work.

Command-Line Interface

A first-class CLI for power users. Fast, scriptable, and available everywhere Rust runs.

gsh
# Search Magic cards by name + color
$ gathers --system sql --name "lightning" --color R

# Search Pokémon by energy type
$ gathers --system pokemon --energy Fire

# Search Riftbound by domain
$ gathers --system riftbound-sql --domain Fury --domain Mind

# Download / update databases
$ gathers --download

# Paginate results
$ gathers --name "bolt" --limit 10 --offset 20

NAME                 SET  NUM  RARITY   ARTIST
Lightning Bolt       LEA  183  Common   Christopher Rush
Chain Lightning      LEA   51  Common   Brian Snoddy
…

Full Filter Support

  • Card name (wildcard / partial match)
  • Color identity flags (--color W, --color U, …)
  • Rarity, set code, collector number
  • Artist name and card rules text
  • Card types, supertypes, and subtypes
  • Game-specific filters (domains, energy types)
  • Pagination via --limit and --offset
  • Pretty-printed aligned table output

Quick install

cargo install --git https://codeberg.org/morosanmihail/gathers gathers

Collection Management

Track every card you own across all supported games in a local SQLite database you fully control.

📚
Multiple Collections

Create unlimited named collections. "Main Deck", "Binder", "Trade Pile", whatever you need.

🔄
Move & Merge

Move selected cards or entire collections between named buckets.

📄
Import / Export

Bulk-import from CSV. Export any collection as a downloadable file for backup or sharing.

🔒
Local & Private

All data lives wherever you let it live. No cloud, no account, no tracking.

Collection management screenshot

REST API

Spin up just the backend API. All functionality is exposed over HTTP. Documented via OpenAPI / Swagger.

MTG Routes

  • POST /mtg/cards/search
  • GET /mtg/cards
  • GET /mtg/sets
  • GET /mtg/update

Riftbound Routes

  • POST /riftbound/cards/search
  • GET /riftbound/cards
  • GET /riftbound/sets
  • GET /riftbound/update

Pokémon Routes

  • POST /pokemon/cards/search
  • GET /pokemon/cards
  • GET /pokemon/sets
  • GET /pokemon/update

Collection Routes

  • GET /collection/list
  • POST /collection/add
  • POST /collection/remove/{id}
  • POST /collection/move/{id}
  • GET /collection/cards/{id}/list
  • GET /collection/cards/{id}/count
  • POST /collection/cards/{id}/add
  • POST /collection/cards/{id}/delete
  • POST /collection/search
  • POST /collection/import
  • GET /collection/export/{id}

Get Started

GatheRs is a Cargo workspace. You need a stable Rust toolchain and Node.js (for the web UI).

1

Clone the repo

git clone https://codeberg.org/morosanmihail/gathers.git cd gathers
2

Download the MTG database

cargo run --bin gathers -- --download

This fetches AllPrintings.db from mtgjson.com and verifies the SHA-256 checksum.

3

Start the API server

cargo run --bin server -- --system sql riftbound-sql pokemon-sql --port 5234
4

Start the web UI

cd webui && npm install && npm start

Opens at http://localhost:3000. API requests proxy automatically to port 5234.

Source Code

GatheRs is open source. Primary development happens on Codeberg; GitHub is a mirror.