• Stars
    star
    305
  • Rank 136,879 (Top 3 %)
  • Language
    Java
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

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

Repository Details

A decentralized domain-based App Store for Android.

App Icon

SkyDroid โ€ข Decentralized App Store

Chat on Matrix GPL-3.0 License

Help Translate

SkyDroid is a decentralized domain-based Android App Store which offers easy and fast app distribution, discoverability and security through collections, multi-language support, multiple Themes, Search and Filter options, nice error handling and of course a good user experience.

Related repos are the F-Droid bridge and the Multi-DoH Server.

SkyDroid uses native code from https://github.com/Aefyr/SAI (GPL-3.0).

Screenshots

Install + First Steps

  1. Visit https://get.skydroid.app on your Android device
  2. Open the downloaded APK file and install it
  3. Open SkyDroid and go to "Collections"
  4. Add some recommended Collections
  5. Navigate back to "Apps" and enjoy!

How to publish your own app

See https://skydroid.dev

Video Demo

Here's a little demo of the app and how it works: https://youtu.be/MTSrz3Jb778?t=2461

Why it's important

Fair and secure app distribution is currently more important than ever. (see the current news about the Apple App Store and Google Play)

SkyDroid aims to fix this problem on Android by making direct app distribution decentralized, convenient to use, affordable and secure.

Technical Details

Apps

Every app on SkyDroid is offered through a specific domain. Handshake Domains are also fully supported to allow full decentralization.

For example the domain noteless.redsolver has a TXT record with the following content:

skydroid-app=1+AADbpx41U1UCRcIhSHvzRAgt8LJYaDlxiLyqHnPj8ckXAA+0a2e07bb2666409ceb6f49072e296d6ca4f2050af098da1cf6d17fd09b49e6cc

The skydroid-app= part tells SkyDroid, that this Domain/Name contains an App.

The 1 is the version of this record format.

The AADbpx41U1UCRcIhSHvzRAgt8LJYaDlxiLyqHnPj8ckXAA part is a Skylink (explained in a moment) which points to the metadata file of the app.

The 0a2e07bb2666409ceb6f49072e296d6ca4f2050af098da1cf6d17fd09b49e6cc part is a sha256 hash of the metadata file to ensure the integrity.

Ok, but what is a Skylink?

A Skylink points to a file on the Sia Skynet. The Sia Skynet is a decentralized CDN and file sharing platform for devs.

It works like this: There are multiple so-called "portals" to the Skynet. (for example https://siasky.net/ or https://www.siacdn.com/, anyone can host one!)

A file which is uploaded to one portal, can be downloaded from any other portal!

This enables fully decentralized file-sharing, because the uploader can use any portal or even directly upload to Skynet and also the user can choose between any of the portals!

Skylinks must be used for the metadata files and can be used for the app icon, images and the APK files.

Ok, so back to the metadata file!

If you add noteless.redsolver in SkyDroid, the apps checks the TXT records of the name like explained above and then downloads the metadata file.

You can choose any Skynet portal of your choice in the SkyDroid settings.

The metadata file is checked against the hash and then the app is shown in the UI.

When a SkyDroid user wants to check for updates of all apps, only the TXT records need to be checked. Only if a new metadata hash is found, the metadata file is downloaded again and applied.

Collections

A collection in SkyDroid has two main goals:

  • Offer a way to discover apps
  • Offer a decentralized trust-system for apps

A collection metadata file is loaded exactly like an app metadata file from a domain name (for example redsolver), but it uses skydroid-collection= instead in the TXT record.

Discover Apps

A collection can be made by anyone.

It usually contain's multiple curated Domains/Names from SkyDroid apps which the collection author wants to recommend.

For example, a developer could have a collection of his own apps and some other apps he found and finds nice.

When the SkyDroid user adds the collection, every app in it is added as well.

Some collections are "recommended" by me in the app to get the user started fast, but any collection can be added easily by simply pressing the "Add" button and entering the Domain/Name.

Decentralized Trust-System

Collections can also "verify" apps they list. That basically means putting the hash of the app metadata to the name.

This allows security researchers or companies to check the app and mark it as "secure".

This system can also be used for other "verification" to for example check if an app is good or not.

The user can see how many and which collections verified the app in the current state on the "App Page".

Metadata file examples

The redsolver collection metadata file (can be JSON or YAML):

title: red's collection
description: This collection contains every app available via SkyDroid that I'm aware of. Some apps are verified.
icon: sia://PAGUwiKmHy_83Att8NssAMj79PF1V8g5x_B2lKyThFhKig

apps:
  - name: noteless.redsolver
    verifiedMetadataHashes:
      [
        f7922a73001a8838db29aa4eea5bc91244c07b65fd9a2f1bad16b6a491308af4,
        4bd9b5ad567784b4defa02a892794b28b4acc0b8e32b6c2e996f955280cfed02,
        f06c6781e7964ab458903594189734216a06f71bc820d2816c3f5347cff72fd5,
        0a2e07bb2666409ceb6f49072e296d6ca4f2050af098da1cf6d17fd09b49e6cc,
      ]
  - name: skydroid.app
    verifiedMetadataHashes:
      [bdcbc30b582a078deaea5c6c12f8d265ca22922e5143bb63974e91871de343fe]

The noteless.redsolver app metadata file (can be JSON or YAML):

categories:
  - Writing
license: MIT
authorName: redsolver
authorEmail: [email protected]
sourceCode: https://github.com/redsolver/noteless
issueTracker: https://github.com/redsolver/noteless/issues
changelog: https://github.com/redsolver/noteless/blob/HEAD/CHANGELOG.md

name: Noteless
packageName: net.redsolver.noteless

icon: https://github.com/redsolver/noteless/raw/master/assets/icon/icon.png

localized:
  en-US:
    description: |-
      Features

      * Markdown-optimized editor with syntax highlighting
      * Supports Github Flavored Markdown, KaTeX and mermaidjs for diagrams
      * Tags for organizing your notes
      * Pin, Star and sort your notes by title or different dates
      * Very themable - dark/light mode and accent color
      * Full-text search
      * File Attachments that can be embedded into a note
      * Multi-Note Editing
      * Slide actions for easier editing
      * Tutorial notes which explain how to use the app
    summary: A markdown note-taking app for mobile devices.
    whatsNew: "First release on SkyDroid, yay!"
    phoneScreenshotsBaseUrl: https://github.com/redsolver/noteless/raw/master/screenshots/
    phoneScreenshots:
      - screen1.png
      - screen2.png
      - screen3.png
      - screen4.png
      - screen5.png
      - screen6.png
      - screen7.png
      - screen8.png
      - screen9.png
      - screen10.png
      - screen11.png
      - screen12.png

builds:
  - versionName: 0.3.2
    versionCode: 32
    sha256: 0a5d15f00554e982e37ed9bdda41d17304e8f056913a8d0921a11d81844578e9
    apkLink: sia://AADTpnQ7qv4aFsJYTJECT8e8428kGgLmwLUWgqdycvquFg
  - versionName: 1.0.0
    versionCode: 100
    sha256: d56dccb20c45e84089560a8d7611eeb9a55a15647fa06aee822364f39c753a69
    apkLink: sia://AABBdXkn8Ogia55qK2vvYLRecYY2U-sKyTx0SoD8c6DOKQ

currentVersionName: 1.0.0
currentVersionCode: 100

added: 1596499200000
lastUpdated: 1596737665000

The screenshots and app icon can also be hosted on the Sia Skynet. (Just use sia:// instead of https://, it gets automatically replaced with the selected Skynet Portal)

How to publish your own app (manual method)

  • Copy the contents of minimal-app-template.yaml to a new YAML file on your computer
  • Edit all values to match your app
    • You can upload your APK file and media files to https://siasky.net or just use a normal https link if they are already hosted on GitHub for example
  • Get the hash of the metadata file by running sha256sum your-app-file.yaml in your terminal or using a sha256 website like this one
  • Upload your YAML file to https://siasky.net

Build a TXT Record like this:

skydroid-app=1+YOUR_SKYLINK_FROM_SKYNET+YOUR_SHA256_HASH

Example: skydroid-app=1+AADbpx41U1UCRcIhSHvzRAgt8LJYaDlxiLyqHnPj8ckXAA+0a2e07bb2666409ceb6f49072e296d6ca4f2050af098da1cf6d17fd09b49e6cc

  • Add this TXT Record to a domain/name of your choice. (You can use a normal or a Handshake domain)
  • Add you domain/name in the SkyDroid app with the "Plus"-button in the bottom right

About

This app was initially developed as a submission to the โ€˜Own The Internetโ€™ Hackathon.

Planned features

Oh, and the app is written in Flutter - making the SkyDroid App Store available on Windows, macOS or Linux is possible.

More Repositories

1

noteless

A Markdown-based note-taking app for mobile devices.
Dart
470
star
2

skyfeed

Decentralized SkyDB-based alternative to Twitter, YouTube and Instagram with a native iOS, Android and web app.
Dart
95
star
3

vup

Dart
58
star
4

yt-splitter

Downloads and splits audio tracks from a YouTube video according to the chapters/tracks. Useful for compilations or full album uploads.
Dart
58
star
5

skysend

Decentralized end-to-end encrypted file-sharing
CSS
54
star
6

skynet

Use Sia Skynet and SkyDB in your Dart and Flutter projects (Decentralized CDN and database)
Dart
25
star
7

fauth

A Flutter 2FA-App to generate Time-Based One-Time Passwords implemented in under 5KB of Dart Code.
Dart
21
star
8

skydroid-cli

Command-line tool for SkyDroid app distribution.
Dart
16
star
9

dart_license_checker

Shows you which licenses your Flutter/Dart dependencies have.
Dart
12
star
10

skydroid-fdroid-bridge

This bridge makes F-Droid apps available in the SkyDroid App.
Dart
10
star
11

flutter_platform_checker

Shows you which platforms can be targeted by your Flutter app based on dependencies
Dart
9
star
12

skydeploy

Command-Line Tool for deploying web apps on Skynet.
Dart
9
star
13

multi-doh-server

Dart
8
star
14

SkyFS

Dart
7
star
15

lisky_player

The Lisky Player is a mobile app which can stream music, podcasts and audiobooks directly from the Sia Skynet.
Dart
7
star
16

atproto

7
star
17

skyblock-calendar

Dart
5
star
18

getbykey

A simple dart extension to get an element in a list by it's key or id.
Dart
3
star
19

skydb-chat

Dart
3
star
20

socky

Dart
3
star
21

social-dac-library

TypeScript
3
star
22

lisky

Decentralized live streaming
Dart
2
star
23

SkyChat

Dart
2
star
24

skynet-modules

Dart
2
star
25

to.skydroid.app

Used for deep links and preview pages of SkyDroid apps.
Dart
1
star
26

feed-dac

TypeScript
1
star
27

snackmoney

Dart
1
star
28

skyfile-explorer

Dart
1
star
29

skychess

Decentralized Multiplayer Chess on Skynet
JavaScript
1
star
30

SkyOS-example-widgets

HTML
1
star
31

crawling-at-home

Dart
1
star
32

skychat-server

Dart
1
star
33

solver-messenger

1
star
34

mobile-app-landingpage-template-test

1
star