# Shared services Want to share photos without paying for cloud storage? Tired of creating throwaway accounts for free trials? Miss the days when publishing a personal website was easy? With shared services, you can do all of this directly over Jami's peer-to-peer network. Shared services are accessed directly over Jami's peer-to-peer network. No hosting provider, cloud storage account, or public IP configuration is required. ```{tip} More information on the shared services feature can be found in [this blog post](https://jami.net/shared-services/)! ``` ## What is a shared service? A shared service lets you securely share applications running on your computer—such as websites, photo galleries, game servers, file directories, or other TCP-based services—to other Jami users. For website and directory sharing, Jami includes an embedded web server, so no separate web server software is required. ## Accessing your contacts' services ```{note} The ![Planet icon](../_static/planet_24dp.svg) button appears whenever the selected contact has one or more shared services available. Shared services are available only while the person sharing them is *online*. ``` To access a contact's shared services: 1. Select one of your contacts. 2. Select the ![Planet icon](../_static/planet_24dp.svg) button next to the **Call** button. 3. A list of your contact's shared services will appear. Select the service you want to access. ```{note} Why don't I see the ![Planet icon](../_static/planet_24dp.svg) button? Your contact is probably not sharing any services with you. ``` ### Desktop If the shared service is web-based, Jami opens it in your default web browser. For other services, a link to the service is copied to your clipboard. ```{image} images/desktop-showcase.svg :alt: Quickly access photos. ``` ### Android If the shared service is web-based, Jami opens it in your default web browser. For other services, a link to the service is copied to your clipboard. ```{image} images/android-showcase.svg :alt: Viewing a shared service on Android. ``` ### iOS Jami opens the shared service in an integrated web browser within Jami. ```{note} The ![Planet icon](../_static/planet_24dp.svg) button differs slightly from the one used on the desktop and Android versions. ``` ```{important} Custom (non-web) shared services are not supported on iOS and iPadOS due to operating system restrictions. ``` ```{image} images/ios-showcase.svg :alt: Viewing a shared service on iOS. ``` ## Creating a shared service ```{note} Creating shared services is currently supported only on desktop. ``` To create a shared service, open **Settings** → **Account** → **Shared Services**. ### Directory sharing The ![Custom services icon](../_static/language_24dp.svg) **Add Website** option can also be used to share a directory of files. If the selected directory does not contain an `index.html` file, Jami automatically presents a directory listing. On the **Shared Services** page, select ![Custom services icon](../_static/language_24dp.svg) **Add Website**. ```{raw} html
``` ```{image} images/creating-a-shared-service.mp4 :alt: Creating a shared service. ``` ```{raw} html
``` ### Website sharing ```{note} Only proceed with the following if you feel comfortable with basic HTML and CSS. ``` On the **Shared Services** page, select ![Custom services icon](../_static/language_24dp.svg) **Add Website**, then select the directory you want to share. The directory must contain an `index.html` file in its root directory. You can also include additional HTML, CSS, JavaScript, images, and other assets required by your website. ```{note} If the shared directory contains an `index.html` file, Jami serves it as the website's home page. Other files remain accessible through links within the site. ``` Your contacts will be able to access your website as described above. The following is an example of a customized website. ```{image} images/custom-website.png :alt: Sharing a website. ``` ### Limiting visibility You can control who can discover and access each shared service. Jami allows you to choose from the following visibility options when sharing a service. * **Contacts**: The default visibility. Any approved contact can access the service. * **Anyone (public)**: Any Jami user can discover and access the service, even if they are not one of your contacts. * **Specific contacts only**: Only the contacts you select from your contact list can see the service. You can configure the visibility of a shared service in the configuration dialog as shown below. Set the **Accessible** option to one of the visibility options above. If you select **Specific contacts only**, you will then need to add or remove contacts using the chips in the dialog. ```{raw} html
``` ```{image} images/limiting-visibility.mp4 :alt: Limiting visibility. ``` ```{raw} html
``` ## Custom service sharing Jami allows you to share any TCP service with your contacts, not just websites. On the **Shared Services** page, select ![Custom services icon](../_static/build_circle_24dp.svg) **Custom service** and configure it as needed. ### Sharing a Minecraft server For this example, we will host and share a Minecraft server with a contact. ```{raw} html
``` #### Detailed Setup Instructions 1. Create a dedicated folder on your machine for your Minecraft server. In this example, we will name the folder `MC Server`. 2. Download the official Minecraft server (`server.jar`) from the Minecraft website and move it to the `MC Server` folder. 3. Ensure Java is installed before running the `server.jar` file. On Windows, double-click the `server.jar` file. On Linux and macOS, run the following command in the directory that contains the `server.jar` file: `java -Xmx4G -Xms4G -jar server.jar nogui` 4. After running the `server.jar` file, the `MC Server` folder will contain additional files. You need to modify two of these files: a. `eula.txt`: Set `eula=true` in this file after reading and agreeing to the EULA. b. `server.properties`: Use this file to configure your Minecraft server as required. Check the following property: - Set the `server-port` value. You can usually leave this at the default value of `25565` provided that it's not already in use. 5. Save the changes and restart the server using the same method as in Step 3. The server is ready when the console displays the `Done` message. 6. Add a custom service to Jami. Ensure the `Local port` field matches the value you set for `server-port`. As with shared directories and websites, you can control access to the service. After configuring the service, select the **Save** button. ```{image} https://jami.net/content/images/2026/06/MC-Server-Setup-1.png :alt: An example configuration for sharing the custom Minecraft server on Jami. ``` 7. Before inviting others, verify that you can connect to the Minecraft server yourself. Inside Minecraft, navigate to **Multiplayer** → **Direct Connection** and enter `server-ip-address:server-port` in the **Server Address** field, then select the **Connect** button. If everything is working correctly, you should successfully join the server and see the following message in the server log: `USERNAME joined the game`. 8. Once you've confirmed the server is working correctly, invite your contacts to join. - Your contact opens your shared services list and selects your shared Minecraft server. - The server address is copied to their clipboard automatically. - They paste the address into the `Server Address` field in Minecraft and select **Join Server**. ### Sharing an Etherpad Pad For this example, we will host and share an Etherpad instance with a contact ```{raw} html
``` #### Detailed Setup Instructions 1. Download Etherpad from the official Etherpad website (https://etherpad.org/download) 2. Navigate to the `etherpad` folder nad run `pnpm run prod` to start the Etherpad server 3. On a web browser, navigate to `https://localhost:9001`, the interface for Etherpad should open up 4. Create a pad with the name of your choice (note that you will need to provide the full name of the pad to your contact(s) so that they may join it) 5. Add a custom service to Jami. Ensure the `Local port` field matches the port that etherpad is running on (`9001` by default) 6. - Your contact opens your shared services list and selects your Etherpad server. - The server address is copied to their clipboard automatically. - They paste the address into their web browser to reveal the Etherpad instance. - They type in the exact name of the pad that you created and click **Open pad by name**. ## Limitations - Shared services are only available while the host is online. - Creating shared services currently requires the desktop application. - iOS and iPadOS support only web-based shared services. - Only TCP services are supported; UDP services are not currently supported. - Performance depends on the host's internet connection and available bandwidth. ## Advantages - No domain name registration required. - No cloud storage fees. - Does not require Internet connectivity when peers can reach each other over the same network.