Git Product home page Git Product logo

nft.storage's Introduction

Free decentralized storage and bandwidth for NFTs on IPFS and Filecoin.

nft.storage screenshot

Table of Contents

Client Libraries

The JS client library is the official and supported client to nft.storage. Other libraries listed have been generated from the OpenAPI schema and are experimental, unsupported and may not work at all!

  • JavaScript
  • Go (Generated from OpenAPI schema)
  • Java (Generated from OpenAPI schema)
  • PHP (Generated from OpenAPI schema)
  • Python (Generated from OpenAPI schema)
  • Ruby (Generated from OpenAPI schema)
  • Rust (Generated from OpenAPI schema)
  • Unity (C#)

HTTP API

Check out the HTTP API documentation.

Developer Tools

We've created some scripts to help developers with bulk imports, status checks, file listings and more:

https://github.com/nftstorage/nft.storage-tools

Development

Instructions for developers working on the nft.storage API and website.

psst: want to do some frontend work done without an environment? check out this guide

Getting Started

We use yarn in this project and commit the yarn.lock file.

  1. Install dependencies.
    # install all dependencies in the mono-repo
    yarn
    # setup git hooks
    npx simple-git-hooks
  2. Follow the getting started guides in /packages/api and /packages/website.
  3. Run locally by following the instructions below.

Local environment configuration

In the root folder create a .env file with the following:

# Cloudflare
CF_TOKEN=<token>
CF_ACCOUNT_ID=<account-id>

# IPFS Cluster
CLUSTER1_API_URL = https://nft.storage.ipfscluster.io/api/
CLUSTER1_BASIC_AUTH_TOKEN=<token>

CLUSTER2_API_URL = https://nft2.storage.ipfscluster.io/api/
CLUSTER2_BASIC_AUTH_TOKEN=<token>

# Postgrest API
DATABASE_URL=http://localhost:3000
# Create a token, for role "postgres", using secret value PGRST_JWT_SECRET from 'packages/api/db/docker/docker-compose.yml'
# https://postgrest.org/en/v8.0/tutorials/tut1.html#step-3-sign-a-token
DATABASE_TOKEN=<token>

PROD_DATABASE_URL=https://db.nft.storage
PROD_DATABASE_TOKEN=<token>

STAGING_DATABASE_URL=https://db-staging.nft.storage
STAGING_DATABASE_TOKEN=<token>

# Postgres Database
DATABASE_CONNECTION=postgresql://postgres:postgres@localhost:5432/postgres

PROD_DATABASE_CONNECTION=<connection-string>

STAGING_DATABASE_CONNECTION=<connection-string>

# Pinata
PINATA_JWT=<token>

# Sentry.io
SENTRY_DSN=<dsn>
SENTRY_TOKEN=<token>
# Note: tokens can be created here https://sentry.io/settings/account/api/auth-tokens/ and need the following scopes `event:admin` `event:read` `member:read` `org:read` `project:read` `project:releases` `team:read`.
SENTRY_UPLOAD=false # toggle for sentry source/sourcemaps upload (capture will still work)

# dag cargo
DAG_CARGO_HOST=<ip>
DAG_CARGO_DATABASE=<db-name>
DAG_CARGO_USER=<db-user>
DAG_CARGO_PASSWORD=<db-password>

Production vars should be set in Github Actions secrets.

Running Locally

To run nft.storage locally, start the following processes:

  1. Local IPFS Cluster (docker-compose up in your cluster home dir).
  2. Localtunnel to expose cluster (yarn lt in /packages/api).
  3. API server (yarn dev --env USER in /packages/api).
  4. Web server (yarn dev in /packages/website).

The site should now be available at http://localhost:4000

Release

Release Please automates CHANGELOG generation, the creation of GitHub releases, and version bumps for our packages. Release Please does so by parsing your git history, looking for Conventional Commit messages, and creating release PRs.

What's a Release PR?

Rather than continuously releasing what's landed to our default branch, release-please maintains Release PRs:

These Release PRs are kept up-to-date as additional work is merged. When we're ready to tag a release, we simply merge the release PR.

When the release PR is merged the release job is triggered to create a new tag, a new github release and run other package specific jobs. Only merge ONE release PR at a time and wait for CI to finish before merging another.

Release PRs are created individually for each package in the mono repo.

How should I write my commits?

Release Please assumes you are using Conventional Commit messages.

The most important prefixes you should have in mind are:

  • fix: which represents bug fixes, and correlates to a SemVer patch.
  • feat: which represents a new feature, and correlates to a SemVer minor.
  • feat!:, or fix!:, refactor!:, etc., which represent a breaking change (indicated by the !) and will result in a SemVer major.

Contributing

Feel free to join in. All welcome. Open an issue!

License

Dual-licensed under MIT + Apache 2.0

nft.storage's People

Contributors

alanshaw avatar andrew avatar codigo-fuentes avatar dashcraft avatar davidbrai avatar dchoi27 avatar github-actions[bot] avatar gozala avatar hugomrdias avatar jdiogopeixoto avatar jessicaschilling avatar jonyg80 avatar kevinji avatar momack2 avatar olizilla avatar rafaelramalho19 avatar redaphid avatar ribasushi avatar the-simian avatar vasco-santos avatar yusefnapora avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.