• Stars
    star
    176
  • Rank 215,947 (Top 5 %)
  • Language
    JavaScript
  • Created about 10 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Micro library to use the Salesforce REST APIs in JavaScript Apps

ForceJS - JavaScript Toolkit for Salesforce APIs

ForceJS is a micro-library that makes it easy to use the Salesforce REST APIs in JavaScript applications. ForceJS allows you to easily authenticate with Salesforce using OAuth, and to manipulate Salesforce data using a simple API.

The main target of ForceJS are:

  • Client-side JavaScript applications deployed on your own server (Heroku or elsewhere)
  • Hybrid mobile apps built with Apache Cordova and the Salesforce Mobile SDK

Applications deployed inside a Salesforce instance (Visualforce Page or Lightning Components) can use one of the data access utilities built into the Salesforce Platform instead: JavaScript Remoting, Remote Objects, Lightning Data Service, etc.

Built on ECMAScript 6

Modern JavaScript applications now use ECMAScript 6 (aka ECMAScript 2015) and beyond. The current version of modern frameworks (such as React, Angular 2, and Ionic 2) are also built on top of ECMAScript 6 and beyond. To support modern application development, and to integrate nicely with these frameworks, ForceJS is now built on top of ECMAScript 6 as well.

Compatible with ECMAScript 5

The ECMAScript 6 source files are compiled into an ECMAScript 5 compatible version. The ECMAScript 5 compatible files are available in the dist directory. The ECMAScript 5 files support the Universal Module Definition (UMD) format. In other words, they can be used with AMD or CommonJS module loaders as well as globally using the force.OAuth and force.DataService variables.

The original ECMAScript 5-only version of forcejs is still available in the es5 branch of this repository. The es5 branch is no longer actively developed.

Key Characteristics

  • No dependency
  • Loaded as an ECMAScript 6 module
  • Asynchronous calls return ECMAScript 6 promises
  • Complete OAuth login workflow (User Agent)
  • Works transparently in the browser and in Cordova using the Salesforce Mobile SDK OAuth plugin
  • Automatically refreshes OAuth access_token (if available) on expiration
  • Tightly integrated with force-server, a local development server that works as a proxy and a local web server to provide a streamlined developer experience
  • Simple API to manipulate data (create, update, delete, upsert)
  • Supports connections to multiple instances of Salesforce in the same application
  • Works with modern JavaScript frameworks: React, Angular 2, Ionic 2, etc.

Modular

ForceJS is built on a modular architecture. It currently includes two modules:

  • forcejs/oauth: A module that makes it easy to authenticate with Salesforce using the OAuth User Agent workflow
  • forcejs/data-service: A module that makes it easy to access data through the Salesforce APIs

forcejs/oauth and forcejs/data-service are typically used together in an application, but you can use them separately. For example, you could use forcejs/oauth by itself if all you need is a Salesforce access token (Lightning Out use cases). Similarly, you could use forcejs/data-service by itself if you already have an access token, and all you need is a simple library to access the Salesforce APIs.

Browser and Cordova Abstraction

ForceJS can be used to develop browser-based apps or hybrid mobile apps using the Salesforce Mobile SDK and Apache Cordova. If you develop a hybrid application using the Salesforce Mobile SDK, you often switch back and forth between running the app in the browser and on device. Developing in the browser is generally faster and easier to debug, but you still need to test device-specific features and check that everything runs as expected on the target platforms. The problem is that the configuration of OAuth and REST is different when running in the browser and on device. Here is a summary of the key differences:

BrowserMobile SDK
Requires ProxyYes(*)No
OAuthWindow PopupOAuth Plugin

(*) Starting in the Spring 15 release, some Salesforce REST APIs (like Chatter and sobjects) support CORS. To allow an app to make direct REST calls against your org, register the app domain in Setup: Administer > Security Controls > CORS.

ForceJS abstracts these differences and allows you to run your app in the browser and on device without code or configuration changes.

ECMAScript 6 Usage

import {OAuth, DataService} from 'forcejs';

let oauth = OAuth.createInstance();
oauth.login().then(oauthResult => DataService.createInstance(oauthResult));

let loadContacts = () => {
    let service = DataService.getInstance();
    service.query('select id, Name from contact LIMIT 50')
        .then(response => {
            let contacts = response.records;
            // do something with contacts
    });
}

If you are only using one of the forcejs submodules (either oauth or data), the following import syntax is recommended to make sure the compiled version does not include the module you don't use if your build tool doesn't support tree shaking:

import OAuth from 'forcejs/oauth';
//or
import DataService from 'forcejs/data-service';

Because current browsers don't yet support all the ECMAScript 6 features, you need to use a build tool to compile (transpile) your ECMAScript 6 code to ECMAScript 5 compatible code, and provide the module loading infrastructure. Webpack, Browserify, and Rollup are popular options. Webpack instructions are provided in the Quick Start sections below. Frameworks like React, Angular 2, and Ionic 2 already come with a build process. If you are using these frameworks, no additional step is necessary.

ECMAScript 5 Usage

Use the ECMAScript 5 compatible files available in the dist directory.

<script src="force.all.js"></script>
<script>
    var oauth = force.OAuth.createInstance();
    oauth.login().then(function(oauthResult) {
        force.DataService.createInstance(oauthResult);    
    });

    function loadContacts() {
        var service = force.DataService.getInstance();
        service.query('select id, Name from contact LIMIT 50')
            .then(function(response) {
                var contacts = response.records;
                // do something with contacts
            });
    }
</script>

If you are only using one of the forcejs modules (either oauth or data), the following syntax is recommended to avoid including modules you don't use:

<script src="force.oauth.js"></script>
// or
<script src="force.data-service.js"></script>

var oauth = force.OAuth.createInstance();
// or
var service = force.DataService.createInstance(oauthResult);

Quick Start 1: Simple Browser App

  1. Create a new directory for your project, navigate (cd) to that directory, and type the following command to initialize a project that uses the npm package manager (accept all the default values):

    npm init
    
  2. Type the following command to install forcejs:

    npm install forcejs --save-dev
    
  3. Type the following command to install the force-server development server:

    npm install force-server --save-dev
    
  4. Type the following command to install Webpack and Babel:

    npm install babel-core babel-loader babel-preset-es2015 webpack --save-dev
    
  5. Using your favorite editor, open package.json and modify the scripts section as follows:

    "scripts": {
        "webpack": "webpack",
        "start": "force-server"
    },
    
  6. In your project's root directory, create a file named webpack.config.js:

    var path = require('path');
    var webpack = require('webpack');
    
    module.exports = {
        entry: './app.js',
        output: {
            filename: 'app.bundle.js'
        },
        module: {
            loaders: [
                {
                    test: /\.js$/,
                    loader: 'babel-loader',
                    query: {
                        presets: ['es2015']
                    }
                }
            ]
        },
        stats: {
            colors: true
        },
        devtool: 'source-map'
    };
    
  7. In your project's root directory, create a file named index.html:

    <!DOCTYPE html>
    <html>
    <body>
        <h1>Forcejs Quick Start</h1>
        <ul id="contacts"></ul>
        <script src="app.bundle.js"></script>
    </body>
    </html>
    
  8. In your project's root directory, create a file named app.js:

    import {OAuth, DataService} from 'forcejs';
    
    let oauth = OAuth.createInstance();
    oauth.login()
        .then(oauthResult => {
            DataService.createInstance(oauthResult);
            loadContacts();
        });
    
    let loadContacts = () => {
        let service = DataService.getInstance();
        service.query('select id, Name from contact LIMIT 50')
            .then(response => {
                let contacts = response.records;
                let html = '';
                contacts.forEach(contact => html = html + `<li>${contact.Name}</li>`);
                document.getElementById("contacts").innerHTML = html;
        });
    }
    
  9. On the command line, type the following command to build your project:

    npm run webpack
    
  10. Type the following command to start the app in a browser:

    npm start
    

Quick Start 2: Hybrid Mobile App with Cordova and the Mobile SDK

  1. Install Cordova and the Salesforce Mobile SDK for the platform of your choice. For example, for iOS:

    npm install -g cordova forceios
    

    On a Mac, you may have to use sudo:

    sudo npm install -g cordova forceios
    
  2. Create a new mobile application:

    forceios create
    
  3. Answer the prompts as follows (adjust the company id and organization name as needed):

    Enter your application type (native, hybrid_remote, or hybrid_local): hybrid_local
    Enter your application name: myforcejsapp
    Enter the output directory for your app (defaults to the current directory):
    Enter your company identifier (com.mycompany): com.mycompany.myforcejsapp
    Enter your organization name (Acme, Inc.): MyCompany, Inc.
    Enter your Connected App ID (defaults to the sample app’s ID):
    Enter your Connected App Callback URI (defaults to the sample app’s URI):
    
  4. Navigate (cd) to the project directory:

    cd myforcejsapp
    
  5. Type the following command to initialize a project that uses the npm package manager (accept all the default values):

    npm init
    
  6. Type the following command to install forcejs:

    npm install forcejs --save-dev
    
  7. Type the following command to install the force-server development server:

    npm install force-server --save-dev
    
  8. Type the following command to install Webpack and Babel:

    npm install babel-core babel-loader babel-preset-es2015 webpack --save-dev
    
  9. Using your favorite editor, open package.json and modify the scripts section as follows:

    "scripts": {
        "webpack": "webpack",
        "start": "force-server --root www"
    },
    
  10. In your project's root directory, create a file named webpack.config.js:

    var path = require('path');
    var webpack = require('webpack');
    
    module.exports = {
        entry: './app/app.js',
        output: {
            path: path.resolve(__dirname, 'www'),
            filename: 'app.bundle.js'
        },
        module: {
            loaders: [
                {
                    test: /\.js$/,
                    loader: 'babel-loader',
                    query: {
                        presets: ['es2015']
                    }
                }
            ]
        },
        stats: {
            colors: true
        },
        devtool: 'source-map'
    };
    
  11. In your project's root directory, create a directory called app

  12. In the app directory, create a file named app.js:

    import {OAuth, DataService} from 'forcejs';
    
    let oauth = OAuth.createInstance();
    oauth.login()
        .then(oauthResult => {
            DataService.createInstance(oauthResult);
            loadContacts();
        });
    
    let loadContacts = () => {
        let service = DataService.getInstance();
        service.query('select id, Name from contact LIMIT 50')
            .then(response => {
                let contacts = response.records;
                let html = '';
                contacts.forEach(contact => html = html + `<li>${contact.Name}</li>`);
                document.getElementById("contacts").innerHTML = html;
        });
    }
    
  13. In the www directory, delete all the files and directories except bootconfig.json and index.html

  14. Open index.html. Replace the content with:

    <!DOCTYPE html>
    <html>
    <body>
        <h1>Forcejs App</h1>
        <ul id="contacts"></ul>
        <script src="cordova.js"></script>
        <script src="app.bundle.js"></script>
    </body>
    </html>
    
  15. On the command line, type the following command to build your project:

npm run webpack
  1. Type the following command to run the app in the browser:

    npm start
    
  2. On a Mac, type the following command to build the app for iOS:

    cordova build ios
    
  3. Run the app on your iOS device:

    • Open platforms/ios/myforcejsapp.xcodeproj in Xcode
    • Click myforcejsapp in the left sidebar
    • In the Signing section, select a team corresponding to a valid certificate
    • Click the Run button in the toolbar to run the application on your device.

API Reference

forcejs/oauth

Basic Usage:

import OAuth from "forcejs/oauth";
let oauth = OAuth.createInstance();
oauth.login().then(result => {
    console.log(result); // Prints access token, instance URL, and refresh token (if any)
});

createInstance(appId, loginURL, oauthCallbackURL)

  • appId

    The Salesforce Connected App Id. For convenience, ForceJS uses a default connected app if the appId is not provided. The default connected app supports http://localhost:8200/oauthcallback.html as the OAuth callback URL to provide an out-of-the-box development experience using force-server. You need to create your own connected app with your own OAuth callback URL to run your application on a different server and port.

    Optional

    Default: 3MVG9fMtCkV6eLheIEZplMqWfnGlf3Y.BcWdOf1qytXo9zxgbsrUbS.ExHTgUPJeb3jZeT8NYhc.hMyznKU92

  • loginURL

    The URL for the login window that should be used as part of the OAuth process.

    Optional

    Default: https://login.salesforce.com

  • oauthCallbackURL

    The URL Salesforce calls back with an authenticated access token (or an error) at the end of the OAuth authentication workflow.

    Optional

    Default: The base URL the application was loaded from. For example, if you load the app from http://localhost:8200, the default OAuth callback URL is http://localhost:8200/oauthcallback.html. If you load the app from https://myserver.com/myapp, the default OAuth callback URL is https://myserver.com/myapp/oauthcallback.html

login()

Starts the User Agent OAuth workflow using a popup window when running in the browser or the oauth plugin when running in Cordova.

  • Return Value: A promise. When resolved, an object with the following fields is provided: appId, accessToken, instanceURL, refreshToken, and userId.

forcejs/data-service

Basic Usage:

import Oauth from "forcejs/oauth";
import Service from "forcejs/data-service";
let oauth = OAuth.createInstance();
oauth.login().then(oauthResult => {
    Service.createInstance(oauthResult);
});

createInstance(oauth, options, name)

  • oauth. Required. An object with the following fields:

    • accessToken

      The authenticated access token

      Required, no default

    • instanceURL

      The Salesforce instance URL

      Required, no default

    • refreshToken

      The refresh token

      Optional, no default

  • options. Optional. An object with the following fields:

    • useProxy.

      By default, ForceJS will automatically determine if it needs to use a CORS proxy: It won't use a proxy if the app is running inside a Visualforce page or a Cordova app, and will use the proxy in any other case. You can force ForceJS to always use a proxy by setting this value to true.

      Starting in the Spring 15 release, some Salesforce REST APIs (like Chatter and sobjects) support CORS. To allow an app to make direct REST calls against your org, register the app domain in Setup: Administer > Security Controls > CORS. If you whitelist your domain and use APIs that support CORS, you can set useProxy to false.

      Optional. Default: false if the app is running in Cordova or in a Visualforce page, true if it's not.

    • proxyURL.

      The URL of the CORS proxy server. This parameter is ignored when the app is running in Cordova or inside a Visualforce page.

      Optional. Default: The base URL the application was loaded from. For example, if you load the app from http://localhost:8200, the default proxyURL is http://localhost:8200. If you load the app from https://myserver.com/myapp, the default proxyURL is https://myserver.com/myapp

    • apiVersion

      The version of the Salesforce API.

      Optional. Default: v36.0

  • name

    By default createInstance() creates a singleton instance which is what you want when your app works with a single Salesforce org. If you are building an app that connects to multiple Salesforce instances, provide a name that identifies the instance. For example:

    createInstance(oauth, options, "sales");
    

    You can later retrieve that specific instance using:

    getInstance("sales");
    

    Optional. Default: none. If a name is not provided a singleton instance is created. If a name is provided, a named instance is provided.

getInstance(name)

  • name

    The name of the instance you want to retrieve.

    Optional. If omitted, returns the singleton instance. If specified, return the named instance.

getUserId()

  • Return Value: the id of the authenticated user.

query(soql)

Used to execute a SOQL statement

  • soql: The SOQL statement

  • batch (optional): save query for batch call - see more under .batch()

  • Return Value: Promise

Example:

service.query("SELECT id, name FROM contact")
    .then(result => {
        console.log(result.records);
    })
    .catch(error => {
        console.log(error);
    });

create(objectName, valueObject)

Used to create a record for a Salesforce object

  • objectName. Required.
  • valueObject. Required.
  • batch (optional): save query for batch call - see more under .batch()
  • Return Value: Promise. When the promise is resolved, an object with the following fields is provided:
    • errors: an array of errors (if any)
    • id: the record id of the record that was created
    • success: true or false

Example:

service.create('contact', {FirstName: "Lisa", LastName: "Jones"})
    .then(response => {
        console.log(response);
    })
    .catch(error => {
        console.log(error);
    });

update(objectName, valueObject)

Used to update a record

  • objectName. Required.

  • valueObject. Required. The object must include and Id (or id) field to identify the record to update.

  • batch (optional): save query for batch call - see more under .batch()

  • method. Optional POST/PATCH

  • Return Value: Promise

Example:

service.update('contact', {Id: "0031a000001x7DOAAY", FirstName: "Emma", LastName: "Wong"})
    .then() => {
        console.log("Update successful");
    })
    .catch(error => {
        console.log(error);
    });

del(objectName, recordId)

Used to delete a record

  • objectName. Required.

  • recordId. Required.

  • batch (optional): save query for batch call - see more under .batch()

  • Return Value: Promise

Example:

service.del('contact', "0031a000001x7DOAAY",
    .then() => {
        console.log("Delete successful");
    })
    .catch(error => {
        console.log(error);
    });

upsert(objectName, externalIdField, externalId, data)

Used to upsert a record

Example:

service.upsert('contact', 'My_Contact_Id__c', '101', {FirstName: "Emma", LastName: "Wong"})
    .then() => {
        console.log("Upsert successful");
    })
    .catch(error => {
        console.log(error);
    });

retrieve(objectName, recordId, fields)

Used to retrieve a single record

  • objectName. Required.

  • recordId. Required.

  • fields. Optional. Array of fields to retrieve. If omitted, all available fields are retrieved.

  • batch (optional): save query for batch call - see more under .batch()

  • Return Value: Promise

Example:

service.retrieve('contact', id)
    .then(contact => {
        console.log(contact);
    })
    .catch(error => {
        console.log(error);
    });

reports(recordId)

Used to return reports

  • recordId. optional if empty it return all created reports.

  • batch (optional): save query for batch call - see more under .batch()

  • Return Value: Promise

Example:

service.reports()
    .then(contact => {
        console.log(reports);
    })
    .catch(error => {
        console.log(error);
    });

dasboard(recordId)

Used to return dashboards

  • recordId. optional if empty it return all created dashboards.

  • batch (optional): save query for batch call - see more under .batch()

  • Return Value: Promise

Example:

service.dashboard()
    .then(contact => {
        console.log(reports);
    })
    .catch(error => {
        console.log(error);
    });

apexrest(urlMapping)

Used to invoke a custom REST service endpoint implemented by your own Apex class.

  • urlMapping. Required. Value of the urlMapping annotation in your Apex class.

  • Return Value: Promise

Example:

force.apexrest("contacts")
    .then(result => {
        console.log(result)
    })
    .catch(error => {
        console.log(error);
    });

request(obj)

The core method to invoke a REST services. Other functions (query, create, update, del, upsert, apexrest) are just convenience functions invoking request() behind the scenes. You can use request() directly to invoke other REST services that are not directly exposed through a convenience function.

Example:

force.request({path: "/services/data-service"})
    .then(result => {
        console.log(result)
    })
    .catch(error => {
        console.log(error);
    });

Parameters:

  • path

    The path of the service to invoke

  • method

    The HTTP method to execute: GET, POST, PUT, DELETE, PATCH

    Default: GET

  • contentType

    The request content type.

  • params

    An object that will be turned into a query string appended to the request URL

  • data

    An object representing data to be sent as the body of the request.

chatter(obj)

A convenience function to use the Chatter API

Example:

force.chatter({path: "/users/me"})
    .then(result => {
        console.log(result)
    })
    .catch(error => {
        console.log(error);
    });

Parameters:

  • path

    The path of the Chatter API service to invoke

  • method

    The HTTP method to execute: GET, POST, PUT, DELETE, PATCH

    Default: GET

  • contentType

    The request content type.

  • params

    An object that will be turned into a query string appended to the request URL

  • data

    An object representing data to be sent as the body of the request.

versions()

Lists summary information about each Salesforce.com version currently available, including the version, label, and a link to each version's root.

resources()

Lists available resources for the client's API version, including resource name and URI.

describeGlobal()

Lists the available objects and their metadata for your organization's data.

metadata(objectName)

Describes the individual metadata for the specified object.

  • objectName Object name; e.g. "Account"
  • batch (optional): save query for batch call - see more under .batch()

describe(objectName)

Completely describes the individual metadata at all levels for the specified object.

  • objectName: object name; e.g. "Account"
  • batch (optional): save query for batch call - see more under .batch()

describeLayout(objectName, recordTypeId)

Fetches the layout configuration for a particular sobject name and record type id.

  • objectName: object name; e.g. "Account"
  • recordTypeId (optional): Id of the layout's associated record type
  • batch (optional): save query for batch call - see more under .batch()

queryMore(url)

Queries the next set of records based on pagination. This should be used if performing a query that retrieves more than can be returned in accordance with http://www.salesforce.com/us/developer/docs/api_rest/Content/dome_query.htm

  • url: the url retrieved from nextRecordsUrl or prevRecordsUrl
  • batch (optional): save query for batch call - see more under .batch()

search(sosl)

Executes the specified SOSL search.

  • sosl: a string containing the search to execute - e.g. "FIND {needle}"
  • batch (optional): save query for batch call - see more under .batch()

batch(requests)

Executes batch commands the batch parameter in the other calls like query, create will save the request for the batch. So you have to call before you execute this function. Important note: In API version 34.0 and later, subrequests can be calls to the Limits, SObject, Query/QueryAll, Search, Connect, and Chatter resources. API version 35.0 adds the ability to use Actions resources.

  • requests: Promises from the other calls like
// don't do it in production with nested promises :) Chain it or use observals
    let query: string = 'SELECT id FROM Contact LIMIT 10';
    let query1: string = 'SELECT id FROM Contact LIMIT 20';
    let query2: string = 'SELECT id FROM Contact LIMIT 30';

    DataService.getInstance().query(query, true).then(q1 => {
      DataService.getInstance().query(query1, true).then(q2 => {
        DataService.getInstance().query(query2, true).then(q3 => {
          DataService.getInstance().batch([q1, q2, q3]).then((response) => {
            console.log(q1, q2, q3);
            console.log(response);
          });
        });
      });
    });

composite(request)

  • request: Promises from the other calls like

More Repositories

1

backbone-directory

Sample Application built with Backbone.js and 3 different UI toolkits: Twitter Bootstrap, jQuery Mobile, and custom iPhone skins
PHP
1,524
star
2

nodecellar

Sample application built with Backbone.js, Twitter Bootstrap, Node.js, Express, MongoDB
JavaScript
1,203
star
3

backbone-cellar

A Backbone.js tutorial
JavaScript
911
star
4

OpenFB

Micro-library that lets you integrate browser and Cordova apps with Facebook with no plugin or SDK dependency.
CSS
505
star
5

PageSlider

A simple library providing hardware accelerated page transitions for Mobile Apps
JavaScript
498
star
6

directory-backbone-bootstrap

Employee Directory sample application built with Backbone.js and Twitter Bootstrap
JavaScript
465
star
7

sociogram-angular-ionic

A sample application demonstrating how to integrate with Facebook in your Angular/Ionic apps
JavaScript
367
star
8

cordova-tutorial

Cordova Tutorial
JavaScript
323
star
9

es6-tutorial

ECMAScript 6 Tutorial
CSS
300
star
10

angular-directory

A sample mobile application built with AngularJS
CSS
297
star
11

directory-angular-ionic

Sample Employee Directory application built with Ionic and AngularJS
JavaScript
272
star
12

angular-cellar

Sample Angular.js application (Wine Cellar Management App)
PHP
270
star
13

ionic2-realty

Sample Application with Ionic 2 and Angular 2
JavaScript
257
star
14

backbone-jquerymobile

Sample App showing how to use Backbone.js and jQuery Mobile together
JavaScript
220
star
15

ionic-tutorial

Ionic Tutorial
JavaScript
219
star
16

react-trader

Sample application built with React and Socket.io
JavaScript
215
star
17

offline-sync

Simple Offline Data Synchronization for Mobile Web and PhoneGap Applications
PHP
207
star
18

directory-ionic-nodejs

Sample Employee Directory App built with Ionic and Node.js
JavaScript
206
star
19

belgian-beer-explorer

App built with React, Bootstrap, Node.js, Postgres
JavaScript
203
star
20

pageslider-react

Micro library for animated page transitions using React
CSS
202
star
21

wine-cellar-php

PHP
183
star
22

react-employee-directory

Sample Application with the React Framework
Objective-C
175
star
23

sociogram

A sample application exploring the Facebook SDK and the Graph API
JavaScript
174
star
24

directory-react-nodejs

Sample application with React and Node.js
CSS
169
star
25

mobile-ui-patterns

JavaScript
168
star
26

directory-backbone-topcoat

Sample Mobile / PhoneGap Application built with Backbone.js and TopCoat
JavaScript
164
star
27

react-university

Sample application with React and the Lightning Design System
JavaScript
158
star
28

lightning-react-app

JavaScript
150
star
29

directory-rest-nodejs

Node.js / MongoDB RESTFul services for the Employee Directory sample application
JavaScript
140
star
30

backbone-jax-cellar

Java
136
star
31

phonegap-explorer

PhoneGap API reference app. Provides Complete PhoneGap API reference documentation and allows you to experiment with the APIs inside the application.
JavaScript
128
star
32

directory-backbone-ratchet

Sample Mobile / PhoneGap App built with Backbone.js and Ratchet
CSS
124
star
33

directory-backbone-topcoat-require

121
star
34

cors-proxy

Simple Node.js-based CORS Proxy
JavaScript
116
star
35

sociogram-mobile

Starter-Kit Application for PhoneGap/Facebook integration
JavaScript
109
star
36

ioconf

Conference sample app built with AngularJS and Ionic
JavaScript
104
star
37

salesforce-developer-workshop

Step-by-step tutorial for developers new to the Salesforce platform
CSS
99
star
38

directory-backbone-bootstrap-require

JavaScript
91
star
39

pull-to-refresh

Example of Using Pull-To-Refresh in PhoneGap / Cordova apps
CSS
86
star
40

PictureFeed

85
star
41

directory-backbone-browserify

Browserify sample applicarion, using Backbone and Handlebar templates
JavaScript
83
star
42

olympic-dashboard-d3

CSS
81
star
43

react-trivia

Trivia app built with React
JavaScript
79
star
44

ionic2-realty-rest

Sample application with Ionic 2, Angular 2, and REST services powered by Node.js
JavaScript
76
star
45

directory-rest-php

PHP-based RESTFul services for the employee directory sample app
PHP
70
star
46

belgian-beer-explorer-ionic

Belgian Beer Explorer App built with Ionic Framework
JavaScript
68
star
47

wine-cellar-java

Java
65
star
48

salesforce-conference-demo

CSS
62
star
49

phonegap-workshop

Lab materials for PhoneGap workshop
JavaScript
57
star
50

forceng

Micro-Library to use Salesforce REST API in AngularJS apps
JavaScript
52
star
51

ionic2-employee-directory

Sample app with Ionic 2
JavaScript
51
star
52

employee-directory-app

Employee Directory App for iPhone
JavaScript
50
star
53

force-server

Development server for Force.com
JavaScript
48
star
54

employee-directory-react-native

Sample Employee Directory App built with React Native
JavaScript
48
star
55

phonegap-day-eu

47
star
56

phonegap-dropbox-sync

PhoneGap Plugin for the Dropbox Sync API
JavaScript
45
star
57

lightning-container-component-samples

CSS
43
star
58

salesforce-bot-messenger

Sample Salesforce bot for Facebook Messenger
JavaScript
38
star
59

phonegap-s3-upload

upload
36
star
60

lightning-trader

Sample trader desktop app built with React and the Lightning Design System
HTML
36
star
61

olympic-dashboard-chartjs

CSS
33
star
62

keypoint-phonegap-performance

JavaScript
31
star
63

lightning-react

Project demonstrating how to build Salesforce Lightning Components with React
JavaScript
31
star
64

MobileDashboard

A sample dashboard application fro mobile devices
ActionScript
30
star
65

salesforce-bot-toolkit

A bot toolkit for Salesforce
Apex
30
star
66

slackforce

Sample Message Broker to enable Slack to Salesforce communication using Slash Commands
JavaScript
30
star
67

employee-directory-ios

A native implementation of the Employee Directory application for iOS
Objective-C
29
star
68

lightning-component-apex-continuation

Sample app showing how to invoke an Apex Continuation from a Lightning Component
JavaScript
27
star
69

es6-tutorial-react

JavaScript
26
star
70

keypoint-phonegap-backbone

JavaScript
25
star
71

force-contacts-angular-ionic

A sample contact manager application using Ionic, AngularJS, and Force.com.
JavaScript
25
star
72

MobileTrader

ActionScript
25
star
73

es6-tutorial-data

JavaScript
24
star
74

salesforce-canvas-demo

JavaScript
23
star
75

SalesbuilderMobile

ActionScript
23
star
76

phonegap-workshop-solutions

Step-by-step solutions for the phonegap-workshop
JavaScript
21
star
77

phonegap-workshop-jquk2014

JavaScript
21
star
78

lightning-code-sharing

Code Sharing Strategies in Lightning Components
JavaScript
21
star
79

salesforce-contacts-react

Sample Salesforce Application built with React
JavaScript
17
star
80

belgian-beer-explorer-lightning

CSS
17
star
81

es6-tutorial-solutions

Unit-by-unit solutions for the ES6 tutorial
JavaScript
17
star
82

angular2-salesforce

Sample application with Angular2 and Salesforce
TypeScript
17
star
83

lc-vf-communication

Example of bidirectional communication between Lightning Components and Visualforce pages
JavaScript
16
star
84

ionic2-salesforce-sample

Sample Application: Ionic 2 with a Salesforce back-end
JavaScript
15
star
85

lwc-pwa-demo

PWA sample app created with Lightning Web Components and Workbox
JavaScript
15
star
86

soql-explorer

Force.com mini API explorer
JavaScript
14
star
87

salesforce-developer-advanced

CSS
14
star
88

EmployeeDirectory

JavaScript
14
star
89

brackets-dropbox

JavaScript
13
star
90

ionic2-realty-salesforce

JavaScript
13
star
91

salesforce-bot-slack

A simple Salesforce bot for Slack
JavaScript
13
star
92

flex-spring-mobile-testdrive

Java
12
star
93

ionic-slides

JavaScript
11
star
94

react-mortgage-calc

Sample app written with React and built with Babel
JavaScript
10
star
95

javascript-data-adapters

Simple data adapters
JavaScript
9
star
96

employee-directory-services

Sample REST services for Employee Directory application
JavaScript
9
star
97

northern-trail-manufacturing

Sample application demonstrating Salesforce / Node.js integration using platform events
JavaScript
8
star
98

force-contacts-ratchet

A sample Salesforce.com Mobile App with Ratchet 2.0
JavaScript
8
star
99

intro-to-es6

JavaScript
8
star
100

training

PHP
8
star