app-store vom tipi
Go to file
2022-08-17 22:49:37 +02:00
.github docs: write app submission guide 2022-08-17 22:49:37 +02:00
.husky Initial commit 2022-07-28 19:46:12 +02:00
apps docs: write app submission guide 2022-08-17 22:49:37 +02:00
.gitignore Initial commit 2022-07-28 19:46:12 +02:00
jest.config.js Initial commit 2022-07-28 19:46:12 +02:00
LICENSE Initial commit 2022-07-28 06:17:05 +00:00
package.json fix: add @types/node 2022-07-28 19:54:04 +02:00
pnpm-lock.yaml fix: add @types/node 2022-07-28 19:54:04 +02:00
README.md docs: write app submission guide 2022-08-17 22:49:37 +02:00
tsconfig.json Initial commit 2022-07-28 19:46:12 +02:00

Tipi App Store

This is the official repository for the Tipi App Store. It contains all the apps that are available for download on Tipi.

Apps available

  • Adguard Home - Adguard Home DNS adblocker
  • Booksonic - A server for streaming your audiobooks
  • Calibre-Web - Web Ebook Reader
  • Code-Server - Web VS Code
  • Filebrowser - Web File Browser
  • Firefly III - A personal finances manager
  • Freshrss - A free, self-hostable RSS aggregator
  • Gitea - Gitea - A painless self-hosted Git service
  • Ghost - Ghost - Turn your audience into a business
  • Homarr - A homepage for your server
  • Home Assistant - Open source home automation that puts local control and privacy first
  • Invidious - An alternative front-end to YouTube
  • Jackett - API Support for your favorite torrent trackers
  • Jellyfin - A media server for your home collection
  • Joplin - Privacy focused note-taking app
  • Libreddit - Private front-end for Reddit
  • Mealie - Self-hosted recipe manager and meal planner.
  • n8n - Workflow Automation Tool
  • Nextcloud - A safe home for all your data
  • Nitter - Alternative Twitter front-end
  • Node-RED - Low-code programming for event-driven applications
  • Overseerr - Request management and media discovery tool for the Plex ecosystem
  • Photoprism - AI-Powered Photos App for the Decentralized Web. We are on a mission to protect your freedom and privacy.
  • Pihole - A black hole for Internet advertisements
  • Plex - Stream Movies & TV Shows
  • Portainer - Making Docker and Kubernetes management easy.
  • Prowlarr - A torrent/usenet indexer manager/proxy
  • Radarr - Movie collection manager for Usenet and BitTorrent users
  • Readarr - Book Manager and Automation (Sonarr for Ebooks)
  • Resilio Sync - Fast, reliable, and simple file sync and share solution
  • Sonarr - TV show manager for Usenet and BitTorrent
  • Syncthing - Continuous File Synchronization
  • Tailscale - The easiest, most secure way to use WireGuard and 2FA
  • Tautulli - A Python based monitoring and tracking tool for Plex Media Server
  • Transmission - Fast, easy, and free BitTorrent client
  • Wireguard Easy - WireGuard VPN + Web-based Admin UI
  • Vaultwarden - Unofficial Bitwarden compatible server

How to sumbit an app

If you want to see new apps on Tipi you can either :

  • Open an issue on this repository and some members of the community will add it
  • Fork this repo and create the necessary files for a Tipi app (guide below)

Adding your own app

⚠️ In order to proceed you should be familiar working with the Terminal and Git.

Prerequisites

  • The app you want to add is free and open-source
  • The app you want to add has an official and maintained docker image

1. Fork the repo

In order to open a pull request you need to fork the repo. Start by clicking the "Fork" button in the upper right corner of this page. This will create a new repository with your name and an identical structure to the original repo.

2. Clone the repo locally

On your computer clone the repo you just forked.

git clone https://<your-github-username>/meienberger/runtipi-appstore

3. Create a new branch for your app

Navigate to the repoisitory you just cloned.

cd runtipi-appstore

Create a new branch for your app.

git checkout -b app/<app-name>

4. Create the app files

Each app requires at least the following files:

  • A docker-compose.yml file to run your app
  • A config.json file to configure your app
  • A description in markdown format
  • A logo in jpg format (512 x 512px)

Inside the repo open the apps folder and create a new folder for your app. The name should be the same as the app name without spaces or capital letters.

Create a new config.json file inside the newly create folder

{
  "name": "My super app",
  "available": true,
  "port": 8100,
  "id": "my-app", # This should be the same name as the folder
  "description": "", # Long description of the app
  "tipi_version": 1, # Always 1 if you are adding a new app
  "version": "1.25.1", # The actual version of the app (not the tipi version)
  "categories": ["utilities"], # One or more categories for the app
  "short_desc": "", # Short description of the app
  "author": "", # Link or name of the author 
  "source": "", # Link for git repo
  "form_fields": [] # Used to ask for more info to the user before installing. Will be explained further
}

Available categories : utilities, network, media, development, automation, social, utilities, photography, security, featured, books, data, music, finance

If you want to add a new category, please open a new issue.

In the same folder, create a docker-compose.yml file with your app config.

version: "3.9"
services:
  my-app: # Should be exact same name as "id" field in config.json
    container_name: my-app  # Should be exact same name as "id" field in config.json
    image: my-app:1.0.0 # Try to avoid "latest" tag. As it may break configs in the future.
    environment:
      - TZ=${TZ} # Can use any env variable. List in runtipi/templates/env-sample
    volumes:
      - ${APP_DATA_DIR}/data/config:/config # Always start the path with ${APP_DATA_DIR}. This will put all data inside app-data/my-app/data
      - ${APP_DATA_DIR}/data/projects:/projects
    ports:
      - ${APP_PORT}:8443
    restart: unless-stopped
    networks:
      - tipi_main_network

You'll also need to create a metadata folder and inside put the following files:

  • description.md - Long description of the app in markdown format. (see previous apps for inspiration)
  • logo.jpg - Logo of the app in jpg format (512 x 512px)

5. User defined environment variables

Sometimes an app is requiring more info to run it such as passwords or username. You can leverage the form_fields property in the config.json file to ask such information. Let's take for example Nextcloud. The image requires a username and password. We can simply add two fields in the config.json that will be presented to the user before installing.

{
  ...
  "form_fields": [
    {
        "type": "text",
        "label": "Username",
        "max": 50,
        "min": 3,
        "required": true,
        "env_variable": "NEXTCLOUD_ADMIN_USER"
    },
    {
        "type": "password",
        "label": "Password",
        "max": 50,
        "min": 3,
        "required": true,
        "env_variable": "NEXTCLOUD_ADMIN_PASSWORD"
    }
  ]
}

You can choose between different types of fields. The app will automatically validate the user input before submitting.

Type Description Example value
text Just a string of text username
password Will be hidden on typing password
email An email address test@example.org
number Any number 123
fqdn Fully qualified domain name example.org
ip Any valid ipv4 address 192.168.2.100
fqdnip Combination between ip and fqdn 192.168.2.100 or example.org
random Generate a random value for the user 2m3ffc0923rk93df9023f9

You can also define a min and max length of input with the corresponding properties. The env_variable property is the name of the variable you'll use in your docker-compose.yml file. Be sure to have a unique name.

So if we take the Nextcloud example again, this is how you would use the form_fields inside your compose file.

version: "3.7"

services:
  nextcloud:
    container_name: nextcloud
    image: nextcloud:23.0.3-apache
    restart: unless-stopped
    ports:
      - ${APP_PORT}:80
    volumes:
      - ${APP_DATA_DIR}/data/nextcloud:/var/www/html
    environment:
      - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
      - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}

NEXTCLOUD_ADMIN_USER and NEXTCLOUD_ADMIN_PASSWORD are coming from the user inputs.

6. Default data folder

If your app requires default files or configuration, you can easily provide those by creating a data folder beside the app config.

├── apps
    |-- my-app
        |-- config.json
        |-- data
        |   |-- anything.conf
        |-- docker-compose.yml
        |-- metadata
            |-- description.md
            |-- logo.jpg

Anything placed under data will be copied over app-data/<app-id>/data Then you can mount those files inside your compose file.

my-app:
    container_name: my-app
    restart: unless-stopped
    volumes:
      - ${APP_DATA_DIR}/data:/var/lib/config # Will mount the folder with `anything.conf` inside