# What is ipfs.js/js-ipfs?

**URL:** <https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70>\
**Category:** Help\
**Created:** [January 14, 2017, 12:33pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70 "2017-01-14T12:33:27Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![martha1](https://avatars.discourse-cdn.com/v4/letter/m/3ec8ea/32.png) [@martha1](https://discuss.ipfs.tech/u/martha1)\
**Post date:** [January 14, 2017, 12:33pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/1 "2017-01-14T12:33:27Z")

</div>

IPFS implementation is in Go, right? What’s the reason and purpose or re-implementing all of it in javascript?

[This page](https://github.com/ipfs/ipfs.js) shows this code

```
<script src="ipfs.js"></script>
<img src="/ipfs/QmbhfRQtxEdWN2HzwQveahspuMaRcMT6cUMk1t38omKDQT/tree-in-cosmos.jpg" />

```

does this mean that I (the website developer) can use any IPFS URI, and the user (browser) will retrieve the file from IPFS instead of from my HTTP server? How does this work on the client side, technically speaking? Does the user need to have a local running IPFS node, and the ipfs.js somehow magically connects to it?

---

<div class="post-metadata">

**Author:** ![Mateon1](https://avatars.discourse-cdn.com/v4/letter/m/41988e/32.png) [@Mateon1](https://discuss.ipfs.tech/u/Mateon1)\
**Post date:** [January 14, 2017, 12:41pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/2 "2017-01-14T12:41:11Z")

</div>

js-ipfs is a complete implementation of the IPFS protocol in Javascript, made so it can work directly in the browser.  
It achieves that by connecting to other js-ipfs peers with WebRTC, and to go-ipfs peers with spdy or websockets.

The user does not need a go-ipfs node running on their computer, but the js-ipfs node can peer with the go-ipfs node on the same host.

---

<div class="post-metadata">

**Author:** ![mukka](https://avatars.discourse-cdn.com/v4/letter/m/e68b1a/32.png) [@mukka](https://discuss.ipfs.tech/u/mukka)\
**Post date:** [January 14, 2017, 9:15pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/3 "2017-01-14T21:15:07Z")

</div>

`src` should start with `fs://ipfs/....`

---

<div class="post-metadata">

**Author:** ![mukka](https://avatars.discourse-cdn.com/v4/letter/m/e68b1a/32.png) [@mukka](https://discuss.ipfs.tech/u/mukka)\
**Post date:** [January 14, 2017, 9:17pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/4 "2017-01-14T21:17:20Z")

</div>

The downside is that it’s a 2.2MB file! Which is quite a lot. The size should be reduced, or it should all be embedded into some browser addon (webextension)…

---

<div class="post-metadata">

**Author:** ![mukka](https://avatars.discourse-cdn.com/v4/letter/m/e68b1a/32.png) [@mukka](https://discuss.ipfs.tech/u/mukka)\
**Post date:** [January 14, 2017, 9:17pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/5 "2017-01-14T21:17:53Z")

</div>

What’s its status as of today? Alpha/Beta/Stable?

---

<div class="post-metadata">

**Author:** ![Kubuxu](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/kubuxu/32/17_2.png) [@Kubuxu](https://discuss.ipfs.tech/u/Kubuxu)\
**Post date:** [January 15, 2017, 5:15pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/6 "2017-01-15T17:15:43Z")

</div>

`fs:/ipfs/...` to be precise, double slash would suggest the `ipfs` is authority, it isn’t, it is authority-less URI.

---

<div class="post-metadata">

**Author:** ![mukka](https://avatars.discourse-cdn.com/v4/letter/m/e68b1a/32.png) [@mukka](https://discuss.ipfs.tech/u/mukka)\
**Post date:** [January 15, 2017, 7:14pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/7 "2017-01-15T19:14:47Z")

</div>

Could you please elaborate more on the `/` `//` authority thing?

---

<div class="post-metadata">

**Author:** ![flyingzumwalt](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/flyingzumwalt/32/12_2.png) [@flyingzumwalt](https://discuss.ipfs.tech/u/flyingzumwalt)\
**Post date:** [January 15, 2017, 8:20pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/8 "2017-01-15T20:20:06Z")

</div>

FYI: I created a github issue related to martha1’s original questions in this thread. [https://github.com/ipfs/js-ipfs/issues/710:](https://github.com/ipfs/js-ipfs/issues/710:) _Clarify purpose & status of js-ipfs in Readme & Roadmap_

---

<div class="post-metadata">

**Author:** ![Kubuxu](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/kubuxu/32/17_2.png) [@Kubuxu](https://discuss.ipfs.tech/u/Kubuxu)\
**Post date:** [January 15, 2017, 9:49pm UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/9 "2017-01-15T21:49:06Z")

</div>

It is simple, the RFC spec says, if there is double slash after the schema definition (`fs:`), the next field is the authority that owns the resource under identification. It also defines that if there is just single slash after the schema definition then URI has no authority.

For example if we had URI `fs://someauthority/ipfs/QmAAA` the authority-less version of it would be `fs:/ipfs/QmAAA`. It has few consequences later on in applications.

---

<div class="post-metadata">

**Author:** ![daviddias](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/daviddias/32/40_2.png) [@daviddias](https://discuss.ipfs.tech/u/daviddias)\
**Post date:** [April 11, 2017, 6:53am UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/10 "2017-04-11T06:53:07Z")

</div>

Hi!

You can find the answer to this question here: [https://github.com/ipfs/faq/issues/97](https://github.com/ipfs/faq/issues/97)

Hope it clarifies, let me know if there are any outstanding questions 🙂

---

<div class="post-metadata">

**Author:** ![daviddias](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/daviddias/32/40_2.png) [@daviddias](https://discuss.ipfs.tech/u/daviddias)\
**Post date:** [April 11, 2017, 6:54am UTC](https://discuss.ipfs.tech/t/what-is-ipfs-js-js-ipfs/70/11 "2017-04-11T06:54:44Z")

</div>

Other important and relevant information can be found in the following issues:

- [https://github.com/ipfs/faq/issues/180](https://github.com/ipfs/faq/issues/180)
- [https://github.com/ipfs/faq/issues/60](https://github.com/ipfs/faq/issues/60)
