! We recommend using "Contributor" wizard available at https://app.chain.love/contributor.
This repository is intentionally CSV-first so contributors can edit data in spreadsheet tools without programming knowledge.
Before editing data, read the Style Guide:
provider -> offer -> listing
references/providers/providers.csv: provider identity metadata.references/offers: canonical offer templates.listings/specific-networks/<network>: listings for one network.listings/all-networks: listings merged into every network output.
| Goal | Edit here |
|---|---|
| Add/update provider profile metadata | references/providers/providers.csv |
| Add/update provider logo files | references/providers/images/ |
| Add/update reusable offer (product/plan) | references/offers/<category>.csv |
| Add/update an offer on one chain | listings/specific-networks/<network>/<category>.csv |
| Add/update entries for every chain | listings/all-networks/<category>.csv |
| Add a new network | listings/specific-networks/<network>/ — CSV files and chain logo PNGs (see below) |
| Add/update chain logo for a network | listings/specific-networks/<network>/<chain>.png |
- Category CSV files use separate columns:
providerandoffer. - In
references/offers/*.csv, setproviderto the provider name/slug andofferto the offer name. - In listings CSV files, reference canonical offers with
!offer:<slug>in theoffercolumn. - During JSON generation, referenced fields are hydrated from
references/offers/<category>.csv. - Values in the listing row override hydrated values where provided.
- Rows from
listings/all-networksare appended to every network output.
- In
references/offers/*.csv(for exampleactionButtons), keep Markdown link style (for example[Website](https://example.com)). - In
references/providers/providers.csv, keep plain links only (no Markdown wrappers). - Use full URLs for
websiteanddocs. - For platform columns with known domains (
x,github,discord,telegram,linkedin), store only the part after the domain.- Example:
https://github.com/Chain-Love/chain-love->Chain-Love/chain-love
- Example:
Each listings/specific-networks/<network>/ folder contains PNG logo files named after
the chain values used in that network's CSVs (for example mainnet.png, testnet.png).
When adding a new network or a CSV that introduces a new chain value, include the
corresponding <chain>.png in the same PR.
Requirements:
- PNG format, transparent background, square aspect ratio, 160–500 px per side.
- No solid-colour backgrounds (white, black, etc.).
- See
listings/specific-networks/README.mdfor the full spec and logo source suggestions.
Required: Contributors must star the Chain.Love repository before opening a pull request.
- Star and fork this repository before submitting a contribution.
- Create a descriptive branch (example:
add-ankr-offer). - Edit the correct CSV based on the table above.
- Validate locally (optional) or rely on CI checks.
- Go through Before you submit below.
- Open a PR with a clear description and links to sources for changed data.
These checks catch common, avoidable reasons for change requests in review. The wiki remains the authoritative source for every definition; follow the links for details.
- Fill each column as its wiki page defines it. Pick
planTypefrom the values listed in Common Columns (Public= no payment or registration;Free= no payment, but registration is needed). In SDKs, do not filllatestKnownVersion,latestKnownReleaseDate,maintainerorlicenseby hand: they are reserved for automation and can't be modified manually. For new or changeddependencies, include only verified required peer dependencies and direct package/module prerequisites that users must provide separately, with identifiers only and no versions (SDK dependencies). Required peer dependencies remain eligible even if installed automatically. - Search open PRs for the same provider, offer or listing before opening yours. If two open PRs overlap, a maintainer confirms which one lands. An overlapping PR should not receive final approval until one of these happens: the overlap is removed, the competing PR is closed or changed, or the maintainer's choice is recorded.
- Keep CSVs sorted, booleans uppercase and provider logos in place. Keep each CSV A-Z sorted by
slug(General rules) and write booleans as uppercaseTRUE/FALSE(Booleans). A new provider also needslogoPathset to the PNG filename only (for examplealchemy.png, see Link formatting) and the official PNG logo under that name inreferences/providers/images/. Do not use SVG or other formats for provider logos. actionButtons: max 2 buttons.Publicendpoints get aSend Requestsbutton with a direct link;Enterpriseplans get aContact Salesbutton with a contact form link (Common Columns). In SDKs, at least one button must lead to an official download source such as GitHub or the npm registry (SDKs).- Resolve merge conflicts. If GitHub reports a conflict with
main, before or after you open the PR, resolve it, for example by rebasing your branch onmain. - Override only what is specific to that network. A non-blank listing cell replaces the canonical value instead of merging with it, so an
actionButtonsoverride must contain the full final set of buttons (Merge behavior). - Open every link you add and confirm that the provider supports that network before submitting (General rules).
- Choose the category from Categories definitions. If you are unsure, ask in Discussions Q&A first: a PR "may be closed simply because the category was poorly chosen". A completely network-agnostic offer should have its listing in
listings/all-networks/; its canonical offer remains inreferences/offers/(Database structure). - For data contributions, confirm that the CSV changes affect the final hydrated output. Redundant overrides should be removed. A PR that makes no change to the final hydrated data (for example, a listing override equal to the inherited canonical value) should be closed without merging.
- Keep the title and description in line with the diff. Do not use a closing keyword (
Closes #N,Fixes #N,Resolves #N) unless the PR implements all of that issue.
Our CI will automatically run on every commit you make in an open PR and verify if your patches don't break anything. However, to make your contribution cleaner - you can make your computer run the same verifications locally before every commit.
Install and enable pre-commit:
- Install
python3. - Install
pipx. - Install
pre-commitwithpipx install pre-commit. - Run
pre-commit installin the repository root.
Verification commands:
python3 --version
pipx --version
pre-commit --versionPlatform-specific install links:
Use GitHub Issues.
- Bug Report: broken database structure or Chain.Love website issue.
- DB Improvement Proposal (DBIP): suggested data model changes (categories, tables, columns).
- Blank Issue: anything else.
See the Grant Program. Database contributions may be eligible for USDT/USDC rewards under certain conditions.
Chain.Love also runs an Ecosystem Discovery Bounty Program for contributors who find relevant opportunities to add Chain.Love to external ecosystem documentation, developer catalogs, resource directories, and similar developer resources.
For this program, contributors prepare the proposed patch but must not contact the destination project or open an external PR, issue, or discussion themselves. Each prepared proposal should be submitted as a separate Discussion in the Outreach program submissions category for review by an authorized Chain.Love outreacher.
Read the full program rules before preparing a submission.