---
title: Getting started with Symphony Extension API Examples
description: Bryan Bailey, Symphony Communication Services LLC, discusses the Symphony Extension API Examples repository and how developers can benefit by using it.
---

[Community Blog](https://www.finos.org/blog)

# [Getting started with Symphony Extension API Examples](https://www.finos.org/blog/getting-started-with-symphony-extension-api-examples)

 Written by [Bryan Bailey](https://www.finos.org/blog/author/bryan-bailey) | 9/7/17, 12:30 PM

## **What is the extension API examples repo?**

The extension API examples repository is a growing collection of examples of the Symphony [extension api services](https://extension-api.symphony.com/docs/using-services). We created these services for developers to design and deploy their own applications with full Symphony integration and capabilities. With these services, you can create custom modules, share content, creatively and dynamically render messages with structured objects, and more.

**How to get started**

To begin using the extension API examples, you’ll need a pod to run the application in.

- If you already have a pod to develop in, then skip to section **[\[Local Run\]](https://www.finos.org/blog/getting-started-with-symphony-extension-api-examples?hs_amp=true#localrun).**
- If you are a contributor of the Symphony Software Foundation, you can use the [Open Developer Platform](https://symphonyoss.atlassian.net/wiki/spaces/FM/pages/37847084/Open+Developer+Platform) (ODP) to test apps - such as extension-api-examples - against the Symphony APIs; check out [how to request access](https://symphonyoss.atlassian.net/wiki/spaces/FM/pages/37847084/Open+Developer+Platform).

After you have a development environment to test in, fork the [public Github repository](https://github.com/symphonyoss/extension-api-examples).

## **Local run**

### Prerequisites

1\. Install a package manager for your OS.

- **Mac:** install Homebrew macOS package manager with:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

- **Windows:** install the Scoop Windows package manager [here](http://scoop.sh/).

2\. Install node.js and npm for macOS or Windows, respectively, with:

brew install node || scoop install node

3\. Have port 4000 available as we'll run the demo application on this port. 

4\. To use Google Chrome to run the Hello World app, you will need to first enable the *#allow-insecure-localhost* flag in Chrome. To do this, go to chrome://flags and enable the setting ***a******llow invalid certificates for resources loaded from localhost***

### **Run the example project**

1\. Run these commands in a terminal window:

git clone https://github.com/{your\_github\_username}/extension-api-examples.git

cd extension-api-examples

npm i webpack -g

npm i webpack-dev-server -g

npm i

npm run watch

| Note: If you have trouble running the webpack-dev-server over HTTPS, check out the --https option described here:  [https://webpack.github.io/docs/webpack-dev-server.html](https://webpack.github.io/docs/webpack-dev-server.html) |
| --- |

2\. Ensure the sample app is running by visiting [https://localhost:4000/app.html](https://localhost:4000/app.html)<https://localhost:4000/app.html>

3\. Append "bundle=[https://localhost:4000/bundle.json](https://localhost:4000/bundle.json)" as a URL param to your pod’s Symphony address, for example: [https://foundation-dev.symphony.com/client/index.html?bundle=https://localhost:4000/bundle.json](https://corporate.symphony.com/client/index.html?bundle=https://localhost:4000/bundle.json)

4\. Accept the **Warning: Unauthorized App(s)** dialog and click **Continue**.

5\. Click the **Applications \> Symphony Market** entry in your left navigation bar to install the Hello World app.

## **Explore the Hello World App**

You've successfully installed the Hello World application! Click the new left navigation entry ***Hello World App*** in the Symphony grid. Explore the source code in src/javascript to understand how the app works.

## **A note on entity renderers**

The Hello World app subscribes to the ‘entity’ Service of the Extension API, which allows the application to render Structured Objects. To use the service to render your own Structured Objects, you’ll need to send either a JCurl or Postman [POST messagev4](https://rest-api.symphony.com/docs/create-message-v4)to a room in the pod where you’ll be running the application. Here is an example of a REST payload that can be used to send a custom entity that will be rendered by the app:

`{      message: "<messageML><div class="entity" data-entity-id="timer"><b><i>Please   install the Hello World application to render this entity.</i></b></div></messageML>"         data: {              "timer": {                       "type":     "com.symphony.timer",                       "version":  "1.0",                           "countdownString": "July 27, 2067"`

`           } }`When the message is sent, the default rendering will be “Please install the Hello World application to render this entity.” However, the following function tells the message controller render method to look for messages containing a Structured Object of the type ‘com.symphony.timer’:

| entityService.registerRenderer( "com.symphony.timer",{}, "message:controller"); |
| --- |

When the app is running, that default rendering will be superseded by the custom template in controller.js. For more information about the message format for Structured Objects, see [Sending Structured Objects in Messages](https://rest-api.symphony.com/docs/objects#sending-structured-objects-in-messages).

## **Coming next**

The goal for this repository is to grow with creative and robust examples of Symphony’s services as they are released. This post is a call for collaborators to submit pull requests on this repo and promote discussions about the augmentation of the extension-api.

 

  

[View full post](https://www.finos.org/blog/getting-started-with-symphony-extension-api-examples)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Bryan Bailey"
  },
  "dateModified" : "2018-04-17T00:31:48.266Z",
  "datePublished" : "2017-09-07T12:30:00Z",
  "headline" : "Getting started with Symphony Extension API Examples",
  "image" : {
    "@type" : "ImageObject",
    "height" : 3648,
    "url" : "https://cdn2.hubspot.net/hubfs/2419532/Imported_Blog_Media/pexels-photo.jpg",
    "width" : 5472
  },
  "mainEntityOfPage" : "https://www.finos.org/blog/getting-started-with-symphony-extension-api-examples",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60.0,
      "url" : "https://www.finos.org/hubfs/FINOS/finos-logo/FINOS_Icon_Wordmark_RGB.svg",
      "width" : 60.000004
    },
    "name" : "Thoughts, news and events from our community"
  }
}
```