---
title: Before you begin
description: To download or clone a copy of the SDK Sample Apps repo, complete these steps:
component: orchsdks
page_id: orchsdks:oidc:use-cases/custom-login-ui/00-before-you-begin
canonical_url: https://developer.pingidentity.com/orchsdks/oidc/use-cases/custom-login-ui/00-before-you-begin.html
revdate: Thu, 20 Feb 2025 10:30:37 +0100
keywords: ["OAuth 2.0", "OpenID Connect", "SDK"]
section_ids:
  step_1_downloading_the_samples: Step 1. Downloading the samples
  step_2_installing_the_dependencies: Step 2. Installing the dependencies
  step_3_hosting_the_sample_apps: Step 3. Hosting the sample apps
  obtaining_your_local_ip_address: Obtaining your local IP address
  creating_a_dns_alias_for_the_javascript_client_application: Creating a DNS alias for the JavaScript client application
---

# Before you begin

## Step 1. Downloading the samples

To download or clone a copy of the SDK Sample Apps repo, complete these steps:

1. In a web browser, navigate to <https://github.com/ForgeRock/sdk-sample-apps>.

2. Download the source code using one of the following methods:

   * Download a ZIP file

     1. Click Code, and then click Download ZIP.

        ![download samples zip](../../../_images/download-samples-zip.png)Figure 1. Downloading a zip file of the sample apps repo.

     2. Extract the contents of the downloaded ZIP file to a suitable location.

   * Use a Git-compatible tool to clone the repo locally

     1. Click Code, and then copy the HTTPS URL.

        ![download samples git clone](../../../_images/download-samples-git-clone.png)Figure 2. Downloading the sample apps repo using Git clone.

     2. Use the URL to clone the repository to a suitable location.

        For example, from the command-line you could run:

        ```shell
        git clone https://github.com/ForgeRock/sdk-sample-apps.git
        ```

After completing these steps, you will have a local folder named `sdk-sample-apps`. Inside, you'll find separate folders for the Android, iOS, and JavaScript sample app projects.

## Step 2. Installing the dependencies

In the following procedure, you install the required modules and dependencies, including the Orchestration SDK for JavaScript.

1. In a terminal window, navigate to the `sdk-sample-apps/javascript` folder.

2. To install the required packages, enter the following:

   ```shell
   npm install
   ```

   The `npm` tool downloads the required packages, and places them inside a `node_modules` folder.

## Step 3. Hosting the sample apps

In a production scenario your custom login UI app would have its own fully-qualified domain name that your Android, iOS, and JavaScript clients could all connect to.

For simplicity, in this tutorial you will serve your custom login UI app from the local IP address of your host computer.

Using the local IP of your host computer means Android and iOS apps running on a simulator can resolve the address, and also JavaScript apps running locally.

### Obtaining your local IP address

Complete the following steps to obtain your local IP address:

* Windows

* macOS

1. In a command prompt, enter `ipconfig /all`

   Windows displays information about the network adapters in your computer.

   > **Collapse: Show example output**
   >
   > ```
   > Windows IP Configuration
   >    Host Name . . . . . . . . . . . . : Windows
   >    Primary Dns Suffix  . . . . . . . :
   >    Node Type . . . . . . . . . . . . : Hybrid
   >    IP Routing Enabled. . . . . . . . : No
   >    WINS Proxy Enabled. . . . . . . . : No
   >
   > Ethernet adapter Ethernet:
   >    Media State . . . . . . . . . . . : Media disconnected
   >    Description . . . . . . . . . . . : E3100G 2.5 Gigabit Ethernet Controller
   >    Physical Address. . . . . . . . . : 74-34-E2-2b-30-44
   >    DHCP Enabled. . . . . . . . . . . : Yes
   >    Autoconfiguration Enabled . . . . : Yes
   >
   > Wireless LAN adapter Local Area Connection* 1:
   >    Media State . . . . . . . . . . . : Media disconnected
   >    Description . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
   >    Physical Address. . . . . . . . . : 67-6C-EB-B3-46-82
   >    DHCP Enabled. . . . . . . . . . . : Yes
   >    Autoconfiguration Enabled . . . . : Yes
   >
   > Wireless LAN adapter Wi-Fi:
   >    Description . . . . . . . . . . . : Wireless Network Adapter (210NGW)
   >    Physical Address. . . . . . . . . : 87-6C-DF-C9-17-90
   >    DHCP Enabled. . . . . . . . . . . : Yes
   >    Autoconfiguration Enabled . . . . : Yes
   >    IPv6 Address. . . . . . . . . . . : 2406:3d08:2f61:1400::2d47
   >    Lease Obtained. . . . . . . . . . : January 27, 2025 11:09:26 AM
   >    Lease Expires . . . . . . . . . . : January 28, 2025 6:09:26 AM
   >    IPv6 Address. . . . . . . . . . . : 2406:3d08:2f61:1400::2d47
   >    Temporary IPv6 Address. . . . . . : 2604:2b08:2f93:2600:b479:b5b4:25ff:acc8
   >    Link-local IPv6 Address . . . . . : fe54::d9e5:16ff:d9d4:e22%10
   >    IPv4 Address. . . . . . . . . . . : 192.168.0.35
   >    Subnet Mask . . . . . . . . . . . : 255.255.255.0
   >    Lease Obtained. . . . . . . . . . : January 27, 2025 11:09:24 AM
   >    Lease Expires . . . . . . . . . . : January 29, 2025 11:09:26 AM
   >    Default Gateway . . . . . . . . . : fe80::bb8:c0ee:fea5:8c58%10
   >                                        192.168.0.1
   >    DHCP Server . . . . . . . . . . . : 192.168.0.1
   >    DHCPv6 IAID . . . . . . . . . . . : 893252287
   >    DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-1b-87-59-2D-74-86-C4-3C-30-88
   >    DNS Servers . . . . . . . . . . . : 2025:4e8:0:230b::11
   >                                        2025:4e8:0:230c::11
   >                                        8.8.8.8
   >    NetBIOS over Tcpip. . . . . . . . : Enabled
   > ```

2. Ignoring adapters where the **Media State** property is listed as `Media Disconnected`, locate the ethernet or wireless adapter that connects to your router.

3. Make a note of the **IPv4 Address** field.

   |   |                                                                                                                                                       |
   | - | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
   |   | The address will often start with `192.168.`, `10.0.`, or `172.16.`, which are the first digits of the commonly used reserved private IPv4 addresses. |

   In this case, the local IPv4 IP address is `192.168.0.35`.

   You will use this address to access your custom UI app for this tutorial.

1) In a terminal window, enter `ifconfig`

   macOS displays information about the network interfaces in your computer.

   > **Collapse: Show example output**
   >
   > ```
   > lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
   > 	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
   > 	inet 127.0.0.1 netmask 0xff000000
   > 	inet6 ::1 prefixlen 128
   > 	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
   > 	nd6 options=201<PERFORMNUD,DAD>
   > gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
   > stf0: flags=0<> mtu 1280
   > anpi0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   > 	options=400<CHANNEL_IO>
   > 	ether 22:d0:cb:e5:fd:09
   > 	media: none
   > 	status: inactive
   > en3: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   > 	options=404<VLAN_MTU,CHANNEL_IO>
   > 	ether f8:e4:3b:ad:67:c5
   > 	inet6 fe80::ca4:9a6c:f835:80c9%en8 prefixlen 64 secured scopeid 0x7
   > 	inet6 fd84:bb80:dd60:23b3:855:171f:3651:b7de prefixlen 64 autoconf secured
   > 	inet 192.168.0.35 netmask 0xffffff00 broadcast 192.168.0.255
   > 	nd6 options=201<PERFORMNUD,DAD>
   > 	media: autoselect (1000baseT <full-duplex>)
   > 	status: active
   > en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
   > 	options=460<TSO4,TSO6,CHANNEL_IO>
   > 	ether 36:e5:80:6e:d1:40
   > 	media: autoselect <full-duplex>
   > 	status: inactive
   > en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
   > 	options=460<TSO4,TSO6,CHANNEL_IO>
   > 	ether 36:e5:80:6e:d1:44
   > 	media: autoselect <full-duplex>
   > 	status: inactive
   > bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   > 	options=63<RXCSUM,TXCSUM,TSO4,TSO6>
   > 	ether 36:e5:80:6e:d1:40
   > 	Configuration:
   > 		id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
   > 		maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
   > 		root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
   > 		ipfilter disabled flags 0x0
   > 	member: en1 flags=3<LEARNING,DISCOVER>
   > 	        ifmaxaddr 0 port 11 priority 0 path cost 0
   > 	member: en2 flags=3<LEARNING,DISCOVER>
   > 	        ifmaxaddr 0 port 12 priority 0 path cost 0
   > 	member: en3 flags=3<LEARNING,DISCOVER>
   > 	        ifmaxaddr 0 port 13 priority 0 path cost 0
   > 	media: <unknown type>
   > 	status: inactive
   > ap1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   > 	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
   > 	ether d6:0f:2c:90:e9:b6
   > 	nd6 options=201<PERFORMNUD,DAD>
   > 	media: autoselect (none)
   > 	status: inactive
   > en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   > 	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
   > 	ether c6:2a:06:29:ee:28
   > 	nd6 options=201<PERFORMNUD,DAD>
   > 	media: autoselect
   > 	status: inactive
   > utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
   > 	inet6 fe80::a19f:5de6:a4ca:fd90%utun0 prefixlen 64 scopeid 0x13
   > 	nd6 options=201<PERFORMNUD,DAD>
   > ```

2) Looking at interfaces where the **status** property is listed as `active`, locate the ethernet or wireless interface that connects to your router.

   Often the prefix of the interface is `en`.

3) Make a note of the IPv4 address in the **inet** field.

   |   |                                                                                                                                                       |
   | - | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
   |   | The address will often start with `192.168.`, `10.0.`, or `172.16.`, which are the first digits of the commonly used reserved private IPv4 addresses. |

   In this case, the local IPv4 IP address is `192.168.0.35`.

   You will use this address to access your custom UI app for this tutorial.

### Creating a DNS alias for the JavaScript client application

You should assign a DNS alias to your localhost address to help differentiate the client application from the custom UI application during this tutorial.

You can choose whatever host name you prefer for your client application. This tutorial uses `sdkapp.example.com`.

Complete the following steps to configure a DNS alias for your local IP address:

* Windows

* macOS

1. As an administrator, in a text editor open the `%SystemRoot%\system32\drivers\etc\hosts` file.

2. Add the following:

   `127.0.0.1 sdkapp.example.com`

3. Close and save the file.

1) As an administrator, in a text editor open the `/etc/hosts` file.

2) Add the following:

   `127.0.0.1 sdkapp.example.com`

3) Close and save the file.
