Git Product home page Git Product logo

js-ipfs-examples's Introduction

IPFS in JavaScript logo

JS IPFS Examples

Collection of js-ipfs examples


Explore the docs · Report Bug · Request Feature/Example

Table of Contents

About The Project

Getting Started

Prerequisites

Make sure you have installed all of the following prerequisites on your development machine:

Installation

  1. Install yarn globally (needed to resolve dependencies correctly when working in a monorepo)
    npm install -g yarn
  2. Install NPM packages
    yarn install
  3. Run all the examples
    yarn run test

Structure

This project is broken into 2 modules, their purposes are:

IPFS Tutorials at ProtoSchool

Explore ProtoSchool's IPFS tutorials for interactive js-ipfs coding challenges, deep dives into DWeb concepts like content addressing, and more.

Documentation

ipfs or ipfs-core?

The JavaScript implementation of IPFS is available as two packages, ipfs-core and ipfs.

ipfs-core contains the core api and is intended to be used to run an IPFS node as part of your application without the need to start external processes or manage API ports and servers.

ipfs is built on ipfs-core but also includes the CLI, an HTTP RPC API server and other tools to run ipfs as a background process so is a larger install with more dependencies.

If you are writing an application that needs to access the IPFS network, use ipfs-core. If you wish to use js-IPFS in a terminal window or run it as a server for use by multiple otherwise unrelated processes, use ipfs.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the IPFS Examples Project (https://github.com/ipfs-examples/js-ipfs-examples)
  2. Create your Feature Branch (git checkout -b feature/amazing-feature)
  3. Commit your Changes (git commit -a -m 'feat: add some amazing feature')
  4. Push to the Branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Guidelines

  • Follow the example-template

    • This repository serves as template to create new examples to guarantee consistency between examples. It contains all the necessary files to create a new example
  • Follow the example-template-fork-&-go

    • This repository serves as template to be used as a reference of how to implement the CI in order to sync the example with a standalone repo (correspondent to each example)
  • Examples must:

    • Live inside the /examples/ folder
    • Have tests and should make use of test-util-ipfs-example library
      • If possible use playwright as test framework
    • Implement the following scripts:
      • clean: used to clean all the unnecessary code (e.g.: files generated by bundlers and package managers)
      • build: used to build the example
      • start: used to start the example
      • test: used to test the example
  • README must have (see example inside example-template):

    • Link to Codesandbox.com for one-click running demonstration
    • References for documentation/tutorials used to build the example
    • Optional: Screenshots, gifs, etc... under img/ folder
  • Update the CI to run the tests of the new example as standalone

    • Edit github/workflows/ci.yml
    • Add the test name to project under matrix
  • Extend the test-util-ipfs-example library if needed to reuse code in other examples

Steps to follow after adding a new example

Create a repo

Repo Details

  • Disable Releases/Environments/Packages

Repo Settings

  • Follow the instruction inside the README

Update js-ipfs to run tests against the repo

Open a PR to the ipfs/js-ipfs project that edits the .github/workflows/test.yml in order to make sure a js-ipfs release does not break your new example.

Search .github/workflows/test.yml for the test-examples section and add a block at the end of the example matrix key similar to:

- name: my super fun new example
  repo: https://github.com/ipfs-examples/js-ipfs-my-super-fun-new-example.git
  deps: ipfs-core@$PWD/packages/ipfs-core/dist,ipfs-http-client@$PWD/packages/ipfs-http-client/dist

The value of the deps key will vary depending on which modules from js-ipfs your example uses. Above we override the ipfs-core and ipfs-http-client modules, but your example may different deps.

Please see the existing setup in .github/workflows/test.yml for how to ensure you are overriding the correct modules.

Want to hack on IPFS?

The IPFS implementation in JavaScript needs your help! There are a few things you can do right now to help out:

Read the Code of Conduct and JavaScript Contributing Guidelines.

  • Check out existing issues The issue list has many that are marked as 'help wanted' or 'difficulty:easy' which make great starting points for development, many of which can be tackled with no prior IPFS knowledge
  • Look at the IPFS Roadmap This are the high priority items being worked on right now
  • Perform code reviews More eyes will help a. speed the project along b. ensure quality, and c. reduce possible future bugs.
  • Add tests. There can never be enough tests.
  • Join the Weekly Core Implementations Call it's where everyone discusses what's going on with IPFS and what's next

js-ipfs-examples's People

Contributors

achingbrain avatar alanshaw avatar daviddias avatar dependabot[bot] avatar dignifiedquire avatar dirkmc avatar dryajov avatar enricomarino avatar fsdiogo avatar gozala avatar greenkeeper[bot] avatar harlantwood avatar hugomrdias avatar jacobheun avatar lidel avatar niinpatel avatar nunofmn avatar oliveriosousa avatar olizilla avatar pcowgill avatar pkafei avatar qpakzk avatar raoulmillais avatar sgtpooki avatar sidharder avatar terichadbourne avatar travisperson avatar vasco-santos avatar victorb avatar vmx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

js-ipfs-examples's Issues

Browser P2P

Are there any examples available of how a client can download a file and at the same time share it with other nodes on the network using IPFS just when accessing the website? (without installing any extra programs)

browser-service-worker: Cannot run the example correctly

Issue description

Not able to run correctly the example, simply just can't replicate the expected behaviour

Steps to reproduce the issue

  1. Install and run the example:
  • npm install
  • npm start
  1. Perform all the steps described in the Readme file

What's the expected result?

  • Being able to see IPFS content locally using the URL

What's the actual result?

  • It is being displayed always the homepage

ReadableStream NodeJS

Hello, I would like to implement a ReadableStream in NodeJS. I was looking at the video stream example here, but I did not find an example of non browserified readable stream example to run in Node. My aim is to load on the NodeJS client a big (~1GB-3GB) file backed by IPFS.
Thanks

Unable to decode multibase string "addrs", base32 decoder only supports inputs prefixed with b

Whenever I try to use the create() function in typescript:

`import 'regenerator-runtime/runtime'
import {IPFS, create} from 'ipfs-core'
import type { CID } from 'ipfs-core'

export let node;
create()
.then((res) => {
node = res;
})
.catch(err => {
console.log("error", err);
})`

I get these errors:
WebSocket connection to 'wss://localhost:60277/' failed:
Uncaught (in promise) Error: Unable to decode multibase string "addrs", base32 decoder only supports inputs prefixed with b

It was working 2 hours ago so not sure what happened?

browser-ipns-publish: Unable to publish IPFS Hash to IPNS

Issue description

When publishing a IPFS hash it is being thrown an error running the following code:

const topic = `${namespace}${uint8ArrayToString(ipnsKeys.routingKey, 'base64url')}`;

Steps to reproduce the issue

  1. Install and run the example:
  • npm install
  • npm start
  1. Create and init an IPFS node (I used IPFS desktop)
  2. Add new address to handle WS connections
  3. In the browser (see image below)
  • Connect with the API
  • Connect via Websocket
  • IPFS Hash

What's the expected result?

  • Being able to publish an IPFS Hash to IPNS

What's the actual result?

  • See image below

Additional details / screenshot

Screenshot 2021-07-22 at 13 04 03

Remove yarn lock?

We have excessive amounts of dependabot PRs for innocuous looking semver updates (e.g. [email protected] -> [email protected]). It's quite painful to have to go through all of these.

Perhaps we should remove the lock file from the root of the project so we only get PRs for semver breaking versions?

Phase 3 Tracking

Tracking for Phase 3: Make remotely runnable

  • Add support for one-click running projects like Glitch.com and Codesandbox.com
  • The one-click run locations are automatically updated when the repo example is updated
    • With CodeSandbox it is possible to import any GitHub repository as a sandbox. An imported sandbox will automatically stay in sync with the GitHub repository; if a commit is made to GitHub it will reflect immediately in the sandbox.

Fix codesandbox/stackblitz problems

Need working simple Node.js ipfs.cat example

with latest js-ipfs and node.js 16.15.1 LTS / TypeScript
package.json

    "ipfs": "^0.63.2",
    "ts-node": "^10.8.1",
    "typescript": "^4.7.3"

tsconfig.json

    "target": "esnext",
    "module": "esnext",

I cannot succeed to get a simple ipfs.cat,

npx ts-node --esm simpleCat.ts

This is my not working code

import * as IPFS from 'ipfs-core'

const ipfs = await IPFS.create({
  repo: './tmp',
  start: true,
  EXPERIMENTAL: {
    ipnsPubsub: true
  },
  config: {
    Bootstrap: [
      "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
      "/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
      "/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
      "/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
      "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
      "/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
    ],
    Addresses: {
      Swarm: [
        "/ip4/0.0.0.0/tcp/4001",
        "/ip6/::/tcp/4001",
        "/ip4/0.0.0.0/tcp/4003/wss",
        "/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star",
        "/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star",
        "/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star"
      ]
    },
  }
})

const stream = ipfs.cat('Qmc3zqKcwzbbvw3MQm3hXdg8BQoFjGdZiGdAfXAyAGGdLi')

  const decoder = new TextDecoder()
  let data = '';

  (async () => {
    for await (const chunk of stream) {
      data += decoder.decode(chunk, { stream: true })
    }
    console.log(data)
  })

Phase 1 Tracking

Tracking for Phase 1 Multirepo-ization

  • CI setup to pull examples from remote source repos (https://github.com/ipfs-examples/ipfs-101)
  • Check if exist changes when pulling examples to avoid unnecessary commits
  • Add all the js-ipfs examples
  • Proper setup for the ipfs-examples organisation (ask andy)
  • Turn off issue/wikis/projects/discussions for all examples
  • Add descriptions in each example
  • Add website pointing back to the original source
  • PR template linking to the main repo (ipfs-examples/example-fork-go-template#1)
  • Readme files are going to be updated in Phase 2 linking to main repo using a template
  • Disable Releases/Environments/Packages in each example

Screenshot 2021-06-10 at 10 31 54

Error: Offset must be less than the file size

When I run browser-readablestream example, then console throw an error:

image

And the log is :

Stream: Asked for data starting at byte 0 and ending at byte undefined
Stream: Started receiving data
Stream: Asked for data starting at byte 3544629541 and ending at byte undefined
Error: Offset must be less than the file size

image

looks the offset start 3544629541 exceed the file's size.

Browser vite example fails to run

The vite example does not run. It errors with big number literal errors.

https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-vite

> [email protected] serve
> vite dev --port 8888


  VITE v3.0.8  ready in 140 ms

  ➜  Local:   http://localhost:8888/
  ➜  Network: use --host to expose
✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/ipfs-core/src/ipns/publisher.js:193:20:
      193 │     let seqNumber = 0n
          ╵                     ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/codecs/int64.js:12:40:
      12 │     return signed.decode(buf, offset) | 0n;
         ╵                                         ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:3:14:
      3 │ const LIMIT = 0x7fn;
        ╵               ~~~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:8:24:
      8 │         for (; value >= 0x80n; i++) {
        ╵                         ~~~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:9:22:
      9 │             value >>= 7n;
        ╵                       ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:18:22:
      18 │             value >>= 7n;
         ╵                       ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:28:20:
      28 │         if (value < 0n) {
         ╵                     ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:34:20:
      34 │         if (value < 0n) {
         ╵                     ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:46:60:
      46 │ ...signed.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);
         ╵                                               ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:46:74:
      46 │ ...signed.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);
         ╵                                                             ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/big-varint.js:46:79:
      46 │ ...signed.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);
         ╵                                                                  ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:10:69:
      10 │ ...    return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n);
         ╵                                                                 ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:18:49:
      18 │             return -(BigInt(lo) + (BigInt(hi) << 32n));
         ╵                                                  ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:20:65:
      20 │ ...    return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n);
         ╵                                                                 ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:48:22:
      48 │         if (value === 0n) {
         ╵                       ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:55:33:
      55 │         let hi = Number(value >> 32n) | 0;
         ╵                                  ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/protons-runtime/dist/src/utils/long-bits.js:56:47:
      56 │         let lo = Number(value - (BigInt(hi) << 32n)) | 0;
         ╵                                                ~~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/ipns/dist/src/selector.js:17:41:
      17 │         const aSeq = a.entry.sequence ?? 0n;
         ╵                                          ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/ipns/dist/src/selector.js:18:41:
      18 │         const bSeq = b.entry.sequence ?? 0n;
         ╵                                          ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/ipns/dist/src/utils.js:108:38:
      108 │         sequence: message.sequence ?? 0n,
          ╵                                       ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/libp2p/dist/src/metrics/stats.js:14:26:
      14 │             dataReceived: 0n,
         ╵                           ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/libp2p/dist/src/metrics/stats.js:15:22:
      15 │             dataSent: 0n
         ╵                       ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/libp2p/dist/src/metrics/stats.js:29:30:
      29 │             this.stats[key] = 0n;
         ╵                               ~~

✘ [ERROR] Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)

    node_modules/libp2p/dist/src/metrics/stats.js:169:34:
      169 │             n = this.stats[key] = 0n;
          ╵                                   ~~

/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1624
  let error = new Error(`${text}${summary}`);
              ^

Error: Build failed with 24 errors:
node_modules/ipfs-core/src/ipns/publisher.js:193:20: ERROR: Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)
node_modules/ipns/dist/src/selector.js:17:41: ERROR: Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)
node_modules/ipns/dist/src/selector.js:18:41: ERROR: Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)
node_modules/ipns/dist/src/utils.js:108:38: ERROR: Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)
node_modules/libp2p/dist/src/metrics/stats.js:14:26: ERROR: Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)
...
    at failureErrorWithLog (/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1624:15)
    at /home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1266:28
    at runOnEndCallbacks (/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1046:63)
    at buildResponseToResult (/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1264:7)
    at /home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:1377:14
    at /home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:678:9
    at handleIncomingPacket (/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:775:9)
    at Socket.readFromStdout (/home/haydenyoung/Development/scratch/js-ipfs-examples/examples/browser-vite/node_modules/esbuild/lib/main.js:644:7)
    at Socket.emit (node:events:390:28)
    at addChunk (node:internal/streams/readable:315:12) {
  errors: [
    {
      detail: undefined,
      id: '',
      location: {
        column: 20,
        file: 'node_modules/ipfs-core/src/ipns/publisher.js',
        length: 2,
        line: 193,
        lineText: '    let seqNumber = 0n',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 41,
        file: 'node_modules/ipns/dist/src/selector.js',
        length: 2,
        line: 17,
        lineText: '        const aSeq = a.entry.sequence ?? 0n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 41,
        file: 'node_modules/ipns/dist/src/selector.js',
        length: 2,
        line: 18,
        lineText: '        const bSeq = b.entry.sequence ?? 0n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 38,
        file: 'node_modules/ipns/dist/src/utils.js',
        length: 2,
        line: 108,
        lineText: '        sequence: message.sequence ?? 0n,',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 26,
        file: 'node_modules/libp2p/dist/src/metrics/stats.js',
        length: 2,
        line: 14,
        lineText: '            dataReceived: 0n,',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 22,
        file: 'node_modules/libp2p/dist/src/metrics/stats.js',
        length: 2,
        line: 15,
        lineText: '            dataSent: 0n',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 30,
        file: 'node_modules/libp2p/dist/src/metrics/stats.js',
        length: 2,
        line: 29,
        lineText: '            this.stats[key] = 0n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 34,
        file: 'node_modules/libp2p/dist/src/metrics/stats.js',
        length: 2,
        line: 169,
        lineText: '            n = this.stats[key] = 0n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 40,
        file: 'node_modules/protons-runtime/dist/src/codecs/int64.js',
        length: 2,
        line: 12,
        lineText: '    return signed.decode(buf, offset) | 0n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 14,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 5,
        line: 3,
        lineText: 'const LIMIT = 0x7fn;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 24,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 5,
        line: 8,
        lineText: '        for (; value >= 0x80n; i++) {',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 22,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 9,
        lineText: '            value >>= 7n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 22,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 18,
        lineText: '            value >>= 7n;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 20,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 28,
        lineText: '        if (value < 0n) {',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 20,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 34,
        lineText: '        if (value < 0n) {',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 60,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 46,
        lineText: '        return unsigned.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 74,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 46,
        lineText: '        return unsigned.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 79,
        file: 'node_modules/protons-runtime/dist/src/utils/big-varint.js',
        length: 2,
        line: 46,
        lineText: '        return unsigned.encodingLength(value >= 0 ? value * 2n : value * -2n - 1n);',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 69,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 3,
        line: 10,
        lineText: '            return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n);',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 49,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 3,
        line: 18,
        lineText: '            return -(BigInt(lo) + (BigInt(hi) << 32n));',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 65,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 3,
        line: 20,
        lineText: '        return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n);',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 22,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 2,
        line: 48,
        lineText: '        if (value === 0n) {',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 33,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 3,
        line: 55,
        lineText: '        let hi = Number(value >> 32n) | 0;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    },
    {
      detail: undefined,
      id: '',
      location: {
        column: 47,
        file: 'node_modules/protons-runtime/dist/src/utils/long-bits.js',
        length: 3,
        line: 56,
        lineText: '        let lo = Number(value - (BigInt(hi) << 32n)) | 0;',
        namespace: '',
        suggestion: ''
      },
      notes: [],
      pluginName: '',
      text: 'Big integer literals are not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari13" + 2 overrides)'
    }
  ],
  warnings: []

Phase 2 Tracking

Tracking for Phase 2: Improve ergonomics

  • Update existing examples to be more concise (readme's, content itself, versions, etc)
  • Check if it actually works properly
  • Check if dependencies need to be updated
  • Check if the code can be made simpler
  • Check if the tooling (npm script, bundler configs, etc) can be made simpler
  • Add more examples
  • Web Frameworks/Libraries: svelte, angular
  • Bundlers: Vite, Rollup, snowpack
  • Deno
  • Fix current issues
  • #17

Current work:

New examples

Outside examples:

Cherry pick from old example repo

Move examples:

Waiting for discussion

In Progress

  • Vite:
  • Snowpack:
  • Microbundle:
  • SvelteKit

Error: Database is not open

Currently, i am running this example https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-nextjs

This template https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-create-react-app has the same issue

Issue:
Uncaught (in promise) Error: Database is not open at maybeOpened (abstract-level.js?6b89:133:1) at eval (abstract-level.js?6b89:160:1)
Node version: v16.18.0

I am trying to search but no one has caught this issue

video example documentation unclear

Hi,
in teh video streaming examples docs there is written:

In addition to video streaming, plain audio streaming works fine as well. Simply use the same ffmpeg + ipfs procedure as described above, but with your audio file as input.

Which above? there is nothing documeted about using ffmpeg there.

Use ipfs in angular

I copy everything from browser-angular example and add my code. When i run inside the examples folder it run okay when copy for folder outside the example folder it not running it show the folowing errors.

./node_modules/libp2p-kad-dht/src/routing-table/index.js:11:27-66 - Error: Module not found: Error: Can't resolve './generated-prefix-list.json' in '/Users/xxxxxx/BFastProjects/smartstock-sales/node_modules/libp2p-kad-dht/src/routing-table'

./node_modules/ipfs-bitswap/esm/src/bitswap.js:187:29-44 - Error: export 'AbortController' (imported as 'AbortController') was not found in 'native-abort-controller' (possible exports: __esModule, createBitswap)

and a lot more errors.

Vue example

I'm getting these errors when trying to run the browser-vue example:

 ERROR  Failed to compile with 2 errors                                                                                              3:08:46 AM

 error  in ./node_modules/levelup/lib/levelup.js

Module not found: Error: Can't resolve 'util' in '/workspaces/js-ipfs-examples/examples/browser-vue/node_modules/levelup/lib'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "util": require.resolve("util/") }'
        - install 'util'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "util": false }

 error  in ./node_modules/libp2p-kad-dht/src/routing-table/index.js

Module not found: Error: Can't resolve './generated-prefix-list.json' in '/workspaces/js-ipfs-examples/examples/browser-vue/node_modules/libp2p-kad-dht/src/routing-table'

Reference Documentation for Implementation of running IPFS Node in Electron

It's difficult to find any info on running ipfs in electron with this test package
https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/run-in-electron

Specifically when configuring a node as the default .jsipfs config profile attributes are unfamiliar to me within the scope of any other ipfs standard documentation I've come across, i.e.

ipfs-repo-migrations package does not have all migration to migrate from version 11 to 12

Got this error using the script tag, as well as the code from the example on github.

full error message:

index.min.js:40 Uncaught (in promise) InvalidValueError: The ipfs-repo-migrations package does not have all migration to migrate from version 11 to 12
at UV (index.min.js:40:116932)
at Object.kNe [as revert] (index.min.js:40:115869)
at async qH.open (index.min.js:40:149971)
at async Hmt (index.min.js:83:272923)
at async Function.start (index.min.js:83:272782)
at async Object.create (index.min.js:83:328579)

"process is not defined" error in "browser-create-react-app" example

I tried to add a custom swarm addresses to IPFS node:

ipfs = await create({
   config: {
   Addresses: {
      Swarm: [
          // This is a public webrtc-star server
         '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
         '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
      ],
   },
  }
})

And I got the error in console:

Uncaught ReferenceError: process is not defined
    at destroy.js:49:1
    at Peer._destroy (index.js:444:1)
    at Peer.destroy (destroy.js:35:1)
    at index.js:525:1

Screen Shot 2022-05-12 at 18 10 46

Example not working

Not sure if it is something else or example is incorrect but I clone and ran browser-nextjs but it doesn't work and I got this on the screen.
Screenshot 2021-10-06 at 22 31 51

Update circuit relay configuration to use v2 protocol

When trying to use the Circuit Relaying example (found here in the repo), the config doesn't take the v2 procotol into account

"DisableRelay": false,
 "EnableRelayHop": true

Not available anymore and return an error / warning if the daemon launched using this configuration

ipfs  | 2022-02-17T13:00:55.456Z        FATAL   core:constructor    node/groups.go:138       The `Swarm.EnableRelayHop` config field is ignored.
ipfs  | Use `Swarm.RelayService` to configure the circuit v2 relay.
ipfs  | If you want to continue running a circuit v1 relay, please use the standalone relay daemon: https://github.com/libp2p/go-libp2p-relay-daemon (with RelayV1.Enabled: true)

bug: `yarn install` succeeds, but throws errors on M1 Mac

╰─ ✔ ❯ gh-issue-info
ProductName:	macOS
ProductVersion:	12.6
BuildVersion:	21G115
Arch: arm64
NodeJS: v16.17.1
npm: 8.15.0
yarn: 1.22.19
warning Error running install script for optional dependency: "/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/electron-eval/node_modules/electron: Command failed.
Exit code: 1
Command: node install.js
Arguments: 
Directory: /Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/electron-eval/node_modules/electron
Output:
Downloading electron-v1.8.8-darwin-arm64.zip
[>                                            ] 0.0% (0 B/s)
�[1000D�[0K�[1A�[1000D�[0K�[1A�[1000D�[0KDownloading electron-v1.8.8-darwin-arm64.zip
Error: GET https://github.com/electron/electron/releases/download/v1.8.8/electron-v1.8.8-darwin-arm64.zip returned 404
/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/electron-eval/node_modules/electron/install.js:47
  throw err
  ^

Error: Failed to find Electron v1.8.8 for darwin-arm64 at https://github.com/electron/electron/releases/download/v1.8.8/electron-v1.8.8-darwin-arm64.zip
    at Request.<anonymous> (/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/nugget/index.js:197:61)
    at Request.emit (node:events:513:28)
    at Request.onRequestResponse (/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/request/request.js:1059:10)
    at ClientRequest.emit (node:events:513:28)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (node:_http_client:674:27)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
    at TLSSocket.socketOnData (node:_http_client:521:22)
    at TLSSocket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9)"
info This module is OPTIONAL, you can safely ignore this error
warning Error running install script for optional dependency: "/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/wrtc: Command failed.
Exit code: 1
Command: node scripts/download-prebuilt.js
Arguments: 
Directory: /Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/wrtc
Output:
node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using [email protected]
node-pre-gyp info using [email protected] | darwin | arm64
node-pre-gyp WARN Using request for node-pre-gyp https download 
node-pre-gyp info check checked for \"/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/wrtc/build/Release/wrtc.node\" (not found)
node-pre-gyp http GET https://node-webrtc.s3.amazonaws.com/wrtc/v0.4.7/Release/darwin-arm64.tar.gz
node-pre-gyp http 404 https://node-webrtc.s3.amazonaws.com/wrtc/v0.4.7/Release/darwin-arm64.tar.gz
node-pre-gyp ERR! install error 
node-pre-gyp ERR! stack Error: 404 status code downloading tarball https://node-webrtc.s3.amazonaws.com/wrtc/v0.4.7/Release/darwin-arm64.tar.gz
node-pre-gyp ERR! stack     at Request.<anonymous> (/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/node-pre-gyp/lib/install.js:149:27)
node-pre-gyp ERR! stack     at Request.emit (node:events:525:35)
node-pre-gyp ERR! stack     at Request.onRequestResponse (/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/request/request.js:1059:10)
node-pre-gyp ERR! stack     at ClientRequest.emit (node:events:513:28)
node-pre-gyp ERR! stack     at HTTPParser.parserOnIncomingClient [as onIncoming] (node:_http_client:674:27)
node-pre-gyp ERR! stack     at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
node-pre-gyp ERR! stack     at TLSSocket.socketOnData (node:_http_client:521:22)
node-pre-gyp ERR! stack     at TLSSocket.emit (node:events:513:28)
node-pre-gyp ERR! stack     at addChunk (node:internal/streams/readable:315:12)
node-pre-gyp ERR! stack     at readableAddChunk (node:internal/streams/readable:289:9)
node-pre-gyp ERR! System Darwin 21.6.0
node-pre-gyp ERR! command \"/Users/sgtpooki/.asdf/installs/nodejs/16.17.1/bin/node\" \"/Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/wrtc/node_modules/.bin/node-pre-gyp\" \"install\"
node-pre-gyp ERR! cwd /Users/sgtpooki/code/work/protocol.ai/ipfs-examples/js-ipfs-examples/node_modules/wrtc
node-pre-gyp ERR! node -v v16.17.1
node-pre-gyp ERR! node-pre-gyp -v v0.13.0
node-pre-gyp ERR! not ok 
404 status code downloading tarball https://node-webrtc.s3.amazonaws.com/wrtc/v0.4.7/Release/darwin-arm64.tar.gz"

yarn-install-log.txt

Add ./examples/browser-service-worker-gateways-with-car

We have ./examples/browser-service-worker which runs in-memory js-ipfs.

That is fine setup, but comes with limitations, like WebRTC not working in Service Worker, which introduces the need for running js-ipfs outside of Service Worker, and introduces overhead of postMessage serialization.

We should add alternative example at ./examples/browser-service-worker-gateways-with-car which:

  • handles /ipfs/* and /ipns/*
  • does not run js-ipfs in-memory
  • has a list of gateways and uses them (at random or as fallback list) for fetching requested files as CAR, verifies CARs, and returns re-assembled data from Service Worker, without the need of any cross-process postMessage present in ./examples/browser-service-worker

next js example does not work

It throws an in initialization

Unhandled Runtime Error
TypeError: PubsubRouter is not a constructor

Call Stack
pubsubAdapter
node_modules/libp2p/src/pubsub-adapter.js (17:0)
new Libp2p
node_modules/libp2p/src/index.js (334:0)
Function.create
node_modules/libp2p/src/index.js (142:0)
createLibp2p
node_modules/ipfs-core/esm/src/components/libp2p.js (35:9)
configureRepo
node_modules/ipfs-core/esm/src/components/storage.js (137:35)
async loadRepo
node_modules/ipfs-core/esm/src/components/storage.js (51:0)
async Function.start
node_modules/ipfs-core/esm/src/components/storage.js (37:36)
async create
node_modules/ipfs-core/esm/src/components/index.js (275:0)

Request: Commit lock files

Please commit lock files, I get some really weird stuff during parcel build
This issue is about other repos of this org but the issues are disabled so here I am

js-ipfs-browser-ipns-publish@b5d5bf16236ad3052101e5893b9adcde332fbc23

Unknown flag bits 1616403001 0x7f8719b0c400
flags after message 1616403001
/bin/sh: line 1:  6929 Segmentation fault: 11  npm run build

js-ipfs-http-client-upload-file@44f4cd8bd0178e39e59eb8ab685dccecc4b64c89

/bin/sh: line 1:  6949 Segmentation fault: 11  npm run build

The Angular Compiler requires TypeScript >=4.4.2 and <4.7.0 but 4.7.4 was found instead.

When checking out the repo and running
yarn install followed by
yarn run test

example-browser-angular crashes with the error:

throw new Error(`The Angular Compiler requires TypeScript >=${minVersion} and <${maxVersion} but ${version} was found instead.`);
          ^

Error: The Angular Compiler requires TypeScript >=4.4.2 and <4.7.0 but 4.7.4 was found instead.

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.