# Getting Started

## Learn How Easy It Can Be To Build Scalable Newsfeeds and Activity Streams

Stream has official clients for JS/Node, Ruby, Python, PHP, Go, Java and C#/.NET.

## Setup

Let's get set up! First, install the client as specified below:

```js label="JavaScript"
// install via npm
npm install getstream

// or yarn
yarn add getstream

// or download the UMD built version from Github
https://raw.githubusercontent.com/GetStream/stream-js/master/dist/js/getstream.js
```

>
> **Info:** All source code can be found on [GitHub](https://github.com/GetStream).
>

To instantiate the client you need an `API key` and `secret` . You can find the key and secret on the [dashboard.](https://getstream.io/signin/?product=feeds) The examples below already include your key and secret.

```js label="JavaScript"
const stream = require("getstream");

// instantiate a new client (server side)
const client = stream.connect("{{ api_key }}", "{{ api_secret }}");

// OR

import stream from "getstream";

const client = stream.connect("{{ api_key }}", "{{ api_secret }}");
```

If you want to use Stream on your mobile or web application, you need to generate a token server-side that the client can use to authenticate as a user of your application.

### Generate User Token Server-Side

This code generates the token for one of your users; a common place to do this is at signup or login. The token is then passed to the frontend.

```js label="JavaScript"
const userToken = client.createUserToken("the-user-id");
```

### Use Stream API client-side

```js label="JavaScript"
const stream = require("getstream");

// Instantiate new client with a user token
const client = stream.connect(
  "{{ api_key }}",
  "{{ feed_token }}",
  "{{ app_id }}",
);

// OR

import stream from "getstream";

const client = stream.connect(
  "{{ api_key }}",
  "{{ feed_token }}",
  "{{ app_id }}",
);
```

>
> **Info:** More details about authentication can be found in the REST docs
>

### Quick Start

The quick start below shows you how to build a scalable social network. It highlights the most common API calls:

```js label="JavaScript"
const chris = client.feed("user", "chris");

// Add an Activity; message is a custom field - tip: you can add unlimited custom fields!
await chris.addActivity({
  actor: "chris",
  verb: "add",
  object: "picture:10",
  foreign_id: "picture:10",
  message: "Beautiful bird!",
});

// Create a following relationship between Jack's "timeline" feed and Chris' "user" feed:
const jack = client.feed("timeline", "jack");
await jack.follow("user", "chris");

// Read Jack's timeline and Chris' post appears in the feed:
const results = await jack.get({ limit: 10 });

// Remove an Activity by referencing it's Foreign Id:
await chris.removeActivity({ foreignId: "picture:10" });
```

That was a good deal of information at once. The [getting started](https://getstream.io/activity-feeds/tour/) docs provide a more detailed and interactive explanation.

---

For the most recent version of this documentation, visit [https://getstream.io/activity-feeds/docs/javascript/v2/](https://getstream.io/activity-feeds/docs/javascript/v2/).