feat: create new 0.3.0 version

This commit is contained in:
DecDuck
2025-07-31 20:23:17 +10:00
parent b323c29690
commit cd6c7ff41d
20 changed files with 533 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
# About Drop
Drop is an open-source, self-hosted game distribution platform. It's designed offer all the same features of a platform like Steam.
Don't know what any of that means? Keep reading.
## Open source
Open source means you are free to view and re-use the source code of Drop (in accordance with it's license).
Drop is also open-contribution, and we encourage technical users to contribute back to the Drop source code, especially if there are features they want that are missing or are planned for later.
If you want to start contributing, check out our GitHub: [Drop OSS organization](https://github.com/Drop-OSS).
We also recommend join our Discord: [Drop-OSS invite](https://discord.gg/NHx46XKJWA). However, there is a lot of drama around open-source projects using Discord, so we also encourage using GitHub issues or discussions to ask for support or talk about new features.
## Self hosted
Self hosted means there **is no central server.** Unlike many of the services which dominate the Internet today, Drop isn't a website you go to, it's software you download and run yourself. That means every person that uses Drop **has their own, independent copy**, which has it's own **own, independent URL or way to access it.**
Or, if you're lucky, one of your friends or family has already set up an instance, and provided you with a URL, in which case you can just head over to [Getting started with Drop](/docs/guides/client).
## Game distribution
A game distribution service is one that... distributes games. Think of Steam, GOG or Epic Games. You can view, buy and download games from these sites. That's what Drop is.
Instead however, instead of a massive centralized website, each admin runs their own copy, and adds *their own games* to their own copy of Drop. Also, there's no payment processing, nothing has a price.
## Platform
Drop does a lot more than just game distribution. As of `v0.2.0-beta`, a lot hasn't been implemented. But, in future, Drop will be able to handle things such as:
- Dedicated servers
- Matchmaking & P2P games
- Achievements & items
- Cloud saves
- Modding

View File

@@ -0,0 +1,114 @@
# Building Drop OSS
## Building Drop server for other platforms
Unfortunately, we don't have the time or resources to build and debug our software for platforms other than x86-64 or arm64. However, we offer this guide as a way to get it running, at your own risk.
### Prerequisites
To compile:
- Rust (stable)
- Node.js v20
- `yarn` (v1/legacy) package manager
- `git` VCS
- Docker
To run:
- Docker
### Building `droplet`
`droplet` is a high-performance utility package for the Drop server. It's a `napi.rs` module, meaning it's written in Rust and then compiled to an NPM module.
Get started by cloning the `droplet` source code, and then enter the directory:
```shell
git clone https://github.com/Drop-OSS/droplet.git
```
Install the dependencies with `yarn`:
```shell
yarn
```
And then compile the package with the build script:
```shell
yarn build
```
Because we're building this locally, setup the yarn link so we can use this package while building the server:
```shell
yarn link
```
### Building `drop`
`drop` is the self hosted server. It's a Nuxt 3 project, but depends on the `droplet` package so isn't easily transportable.
Get started by cloning the `drop` source code, and then enter the directory:
```shell
git clone https://github.com/Drop-OSS/drop.git
```
Then, link your build `droplet` package:
```shell
yarn link "@drop/droplet"
```
Then, install dependencies:
```shell
yarn
```
Then, build the application:
```
yarn build
```
To package it into a Docker container, remove the build commands in the provided `Dockerfile`'s build-system (`yarn install` and `yarn build`), and then build the Docker image:
```shell
docker build . -t drop
```
## Building drop-app (desktop companion app)
To build drop-app, run:
```shell
git clone https://github.com/Drop-OSS/drop-app.git
cd drop-app
git checkout main
yarn
yarn tauri build
```
If the command is successful, you can find the generated assets in: `src-tauri/target/release/bundle`. You can find the AppImage in the `appimage` folder.
If the `yarn tauri build` command fails, you can try adding `--verbose` to get the error details.
If you get this type of error:
```
ERROR: Strip call failed: /tmp/appimage_extracted_5a27dadc81a3abf452534fdbee9c58ee/usr/bin/strip: Drop Desktop Client.AppDir/usr/lib/libSvtAv1Enc.so.3: unknown type [0x13] section `.relr.dyn'
/tmp/appimage_extracted_5a27dadc81a3abf452534fdbee9c58ee/usr/bin/strip: Unable to recognise the format of the input file `Drop Desktop Client.AppDir/usr/lib/libSvtAv1Enc.so.3'
```
Then you can run the following:
```shell
sudo ln -s /usr/lib/libavif.so.16 /usr/lib/libavif.so.15
NO_STRIP=true yarn tauri build
```
This is a known issue in [Tauri](https://github.com/tauri-apps/tauri/issues/5781#issuecomment-1758815710).
\*\*

View File

@@ -0,0 +1,6 @@
# Authentication
There are two options for authentication:
- [Simple](/docs/authentication/simple.md)
- [OpenID Connect](/docs/authentication/oidc.md)

View File

@@ -0,0 +1,29 @@
# OpenID Connect
OpenID Connect is a OAuth2 extension support by most identity providers.
## Configure OpenID Connect
To configure OIDC, you must set the following environment variables:
| Variable | Usage |
| -------------------------------- | ------------------------------------------------------------------------------------------------- |
| `OIDC_CLIENT_ID` | Client ID from your identity provider. |
| `OIDC_CLIENT_SECRET` | Client secret from your identity provider. |
| `OIDC_ADMIN_GROUP` | Grant admin to users with this group configured in your identity provider. Tested with Authentik. |
| `DISABLE_SIMPLE_AUTH` (optional) | Disable simple auth |
And then, you must configure **either**:
#### `OIDC_WELLKNOWN`: A unprotected endpoint that returns a OIDC well-known JSON. Fetched on startup.
---
#### Individual endpoints:
| Variable | Usage |
| -------------------- | ------------------------------------------------------------------------- |
| `OIDC_AUTHORIZATION` | Authorization endpoint. Usually ends with `authorize`. |
| `OIDC_TOKEN` | Token endpoint. Usually ends with `token`. |
| `OIDC_USERINFO` | Userinfo endpoint. Usually ends with `userinfo`. |
| `OIDC_SCOPES` | Comma separated list of scopes. Requires, at least, `openid` and `email`. |

View File

@@ -0,0 +1,15 @@
# Simple
Simple authentication (or simple auth) is a basic username and password combination. It's the default for Drop, and is the fallback authentication mechanism if Drop is unable to initialise any others.
Simple authentication works on a system of invites.
## Creating an invite
Head to your Drop Admin dashboard, and click on the 'Users' tab. Then, head to the authentication panel by clicking the 'Authentication →' button.
Then, on the "Simple" auth, click the three-dot menu, and configure. Then, create an invite with the button and modal.
## Disabling simple auth
If you've configured another authentication mechanism, you can disable simple by setting the environment variable `DISABLE_SIMPLE_AUTH` to "true".

View File

@@ -0,0 +1,22 @@
# Troubleshooting
## I'm on Linux, with Nvidia proprietary drivers, and Drop won't launch
Add `WEBKIT_DISABLE_DMABUF_RENDERER=1` to the Drop .desktop file:
1. Open `/usr/share/applications/Drop\ Desktop\ Client.desktop` with your preferred editor
2. Add `env WEBKIT_DISABLE_DMABUF_RENDERER=1` before `drop-app` on the `Exec=drop-app` line
## "Server's and client's time is out of sync..." or HTTP 0
The server and client must be within 30 seconds of each other for security reasons. Drop uses short-lived tokens to authenticate securely, and they are valid for those 30 seconds. If you are the server administrator, please ensure both your server and client have the correct time. If you are a user, please double check your own system before asking your admin.
## Default Apps / Deep Links not registering
On Windows, it appears that Deep Links are not updating between Drop releases. To resolve this issue, navigate to your Default Apps in
Settings and press "Reset Default Apps". This will, however, result in resetting all of your default apps.
## I'm using the AppImage on GNOME/Wayland, but I can not interact with the window
If your Drop window behaves strangely, i.e clicking in it makes the previously interacted window pop up on top of drop, then you might want to build the AppImage yourself.
See the [Building Drop OSS](/docs/advanced/building.md#building-drop-app-desktop-companion-app) page.

View File

@@ -0,0 +1,4 @@
# Getting started with Drop
Drop clients are available for download from the [our website](https://droposs.org/download). Download the correct version for your platform, and open it up.
The client will walk you through the setup and sign-in process to get started. You'll need a Drop instance you can connect to, and an account on the server. If you don't have one, you can follow the [Quickstart guide](/docs/guides/quickstart) to setup your own.

View File

@@ -0,0 +1,20 @@
# Exposing your instance
Exposing your instance allows it to be accessible from other computers than the one you're hosting it on.
## LAN
The `compose.yaml` provided in the [Quickstart guide](/docs/guides/quickstart.md) already exposes the Drop instance on port 3000. If you're on the same LAN as your Drop instance, you can find it's IP and then use:
```
http://[instance IP]:3000
```
as the connection URL when setting up your Drop client.
## Reverse Proxy
If you are unsure how to set up a reverse proxy, or even what one is, this guide isn't for you. There are far better guides out there, so follow them to set up your reverse proxy.
There is no special configuration required to run Drop behind a reverse proxy.
## VPN
If you are unsure how to setup a VPN for remote access, please find and follow a far better guide than this one.
Accessing Drop over a VPN works very similarly to [accessing via LAN](#lan), so follow those steps.

View File

@@ -0,0 +1,68 @@
# Quickstart
This guide quickly runs through how to get set up with Drop in about five minutes, depending on your experience.
## Setting up the instance
The easiest way to get Drop running is using our pre-built Docker container.
```yaml compose.yaml
services:
postgres:
image: postgres:14-alpine
ports:
- 5432:5432
healthcheck:
test: pg_isready -d drop -U drop
interval: 30s
timeout: 60s
retries: 5
start_period: 10s
volumes:
- ./db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=drop
- POSTGRES_USER=drop
- POSTGRES_DB=drop
drop:
image: ghcr.io/drop-oss/drop:nightly
depends_on:
postgres:
condition: service_healthy
ports:
- 3000:3000
volumes:
- ./library:/library
- ./data:/data
environment:
- DATABASE_URL=postgres://drop:drop@postgres:5432/drop
```
**The main things in this `compose.yaml` is the volumes attached to the `drop` service:**
1. `./library` is where you will put your games to be imported into Drop. See '[Structuring your library](/docs/library.md#structuring-your-library)' once you're set up.
2. `./data` is where Drop will store anything that's using the default file-system backed storage system. Typically, these are objects.
**In addition, configure your chosen metadata provider:**
- [GiantBomb](/docs/metadata/giantbomb.md)
- [IGDB](/docs/metadata/igdb.md)
- [PCGamingWiki](/docs/metadata/pcgamingwiki.md)
:::tip
If you want to, you can generate a more secure PostgreSQL username & password.
:::
:::warning
For security reasons, the Drop server and client's times need to be within 30 seconds of each other, otherwise authorization will fail.
:::
Once your instance is running, it will log a URL that takes you to the setup wizard. You can use it to create an admin account, and create your first library source.
## Setting up a client
To set up a client, your Drop instance will have to be accessible from it. See [Exposing your instance](/docs/guides/exposing.md) for information on how to do that.
First, download the latest client for your platform from [the GitHub releases page](https://github.com/Drop-OSS/drop-app/releases). Then, install it for your platform. If we don't have a binary available for your platform, please create an issue on [the Drop app repository](https://github.com/Drop-OSS/drop-app) and we'll investigate it.
Once installed, open the Drop app for the first time. There is an automated wizard that'll walk you through the steps of signing into your Drop instance.

View File

@@ -0,0 +1 @@
# Troubleshooting

View File

@@ -0,0 +1,24 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "Drop OSS"
tagline: Drop is an open-source, self-hosted game distribution platform. Like Steam!
actions:
- theme: brand
text: Quick start
link: /guides/quickstart
- theme: alt
text: About ->
link: /about/
features:
- title: Open-source
details: Drop is open source software! We're under the AGPL-3.0 license.
- title: Self-hosted
details: Drop is designed to be self hosted! These docs, and Docker make that possible.
- title: Cross-platform
details: Drop has first class support for both Linux & Windows!
---

View File

@@ -0,0 +1,66 @@
# Library Sources
Drop supports different library structures, but they all are underpinned by the same few concepts. You can add more than one library (called a 'library source') that each use different structures, to combine your multiple game libraries into one.
### Game vs. Version
A "game" in Drop is associated with all the metadata, and doesn't have to changed if the game updates.
A "version" in Drop is associated with the files, and a new one will have to be created every time the game updates.
## Drop-style
The Drop style library format enables all the Drop features, but isn't compatible with many other applications.
### Structuring your library
Drop uses a very particular structure to organise your games library. Generally, to get started, you need to create two folders for a game:
1. `{LIBRARY}/My Game Name` - The game folder. This contains **only** folders, as described as below.
2. `{LIBRARY}/My Game Name/my-version-name` - The version folder or file. This folder contains all the files for the game. Currently Drop supports this being a folder, or an archive in the format:
- `.zip`
Once in the UI, you'll be prompted to "import" each folder separately:
- Importing the **game folder** will link the folder to a game in the metadata database, and pulls the metadata (images, descriptions, that sort of thing) from one of your configured metadata providers. **This only happens once for each game you have.**
- Importing **version** will read the entirety of the game files and generate checksums and metadata that clients need to download the games with. **This happens for each new version you add.**
### Importing more versions
So your game has gotten an update and you've got new files. All you need to do is create a new version folder inside the game folder, and move all the files you have into that folder. Then, import it within the Drop admin UI.
If you have files that you're supposed to **paste over the previous version**, Drop supports that! Read [Version delta & ordering](#version-deltas--ordering) to find out more.
### Version deltas & ordering
Version deltas are a way to avoid storing copies of files on the server. Delta are, very simply, pasted over the top of previous versions (but much more efficiently, to avoid excess downloading).
To create a delta version, simply select the toggle in the admin UI. Once created, you can drag around the priority of your versions in the admin view of a game. Higher priority versions will have their files used over lower priority. For example, consider three versions:
1. **v1**
1. Game.exe
2. Data.bin
2. **v2** (delta)
1. Game.exe
3. **v3** (delta)
1. Data.bin
If the user decides to download **v3**, Drop will download the 'Data.bin' from **v3**, and the 'Game.exe' from **v2**. It won't download any files from **v1**, because they have all been overwritten by higher priority versions.
## Flat-style or 'compat'
This is a more commonly used layout for game libraries, but doesn't support all of Drop's features. It's useful when you want to migrate to Drop from another application or having an existing library. **We recommend [Drop-style](#drop-style) libraries if you're starting from scratch**.
### Structuring your library
In flat-style, the game and version folders/files are combined into one:
```
/
MyGame/...
MyOtherGame.zip
..etc...
```
In Drop, you will still need to import the game and version separately as described above, but the version will simply be called 'default'.

View File

@@ -0,0 +1,9 @@
# GiantBomb
GiantBomb is a community-driven open game database. It is accessible at [https://www.giantbomb.com/](https://www.giantbomb.com/).
## Creating an account
To get an API key, you must sign up for an account. Head over to [GiantBomb's Login or Signup](https://www.giantbomb.com/login-signup/) page to create your account, and follow the prompts.
## Getting an API key
Head over to the [GiantBomb API page](https://www.giantbomb.com/api/) and copy your API key from the box at the top of the page. Then, set this in your environment variables with a key of `GIANT_BOMB_API_KEY`

View File

@@ -0,0 +1,8 @@
# IGDB
IGDB is a game database run by Twitch. It is free to use, but requires a Twitch account.
## Getting an API key
1. Follow the instructions at [https://api-docs.igdb.com/#getting-started](https://api-docs.igdb.com/#getting-started)
2. Assign the `IGDB_CLIENT_ID` and `IGDB_CLIENT_SECRET` environment variables.

View File

@@ -0,0 +1,3 @@
# PCGamingWiki
PCGamingWiki is a community run game database. There no additional setup required to use PCGamingWiki.

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4 13.5C4 11.0008 5.38798 8.76189 7.00766 7C8.43926 5.44272 10.0519 4.25811 11.0471 3.5959C11.6287 3.20893 12.3713 3.20893 12.9529 3.5959C13.9481 4.25811 15.5607 5.44272 16.9923 7C18.612 8.76189 20 11.0008 20 13.5C20 17.9183 16.4183 21.5 12 21.5C7.58172 21.5 4 17.9183 4 13.5Z"
stroke="#60a5fa" stroke-width="2" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,53 @@
# Roadmap
While we're moving towards a major release, here's a few features that you can look forward to over the
next few minor ones:
## Short-term
### Better authentication
Support for more authentication methods, such as discord, google, oauth, etc.
Accounts shouldn't be locked down to just Drop. We'd like to not only support username / password login,
but OAuth, 2FA, U2F, magic links, and as many other authentication methods as we can.
Along with that, setting up user / group permissions are also planned, to give admins a more fine-grained
control over who has access to what.
### Connecting to multiple servers (client-side only)
Let users connect to and manage games from more than one server
This one is especially something that we've had requested from indie devs, but being able to access
multiple Drop servers could lead to a much larger ecosystem where it's realistic for an indie dev
to self-host their own games without Steam's 30%
## Mid-term
### Launch tooling
Open support for customising the toolchain with which your games are run with
While [UMU](https://github.com/Open-Wine-Components/umu-launcher) is great, people often have specific
configurations that we can't really account for out of the box. To remedy this, we'd like to open Drop
up to essentially fully customised launch sequences for any game, such as setting launch args from the
client, configuring, deleting, and backing up prefixes, or setting ENV values.
We also recognise the value in being able to completely customise the way that your games are run,
whether it be by passing them through a remote-play app, an emulator, or anything else of the sort.
### Cloud save management
Support for cloud saves, making it easier to manage saves across different devices and operating systems.
We're looking at using the [ludusavi manifest](https://github.com/mtkennerly/ludusavi-manifest) to figure
out relevant folders and files to be backed up to ideally any remote location.
## Long-term
### Social features
Support for social features, such as friends, groups, and other social interactions like current game status.
People don't always play games with themselves, and so we'd like to add a variety of chat features, friends
updates, and other various features that can also be found in Steam's "Friends" and "Community" tabs.
### Multiplayer support
Support for multiplayer server management, such as discovering servers, joining servers, and leaving servers.
Intended as a drop-in replacement for the SteamWorks API, we'd like to provide support for multiplayer support
through the drop server, referencing the [Goldberg Emulator](https://gitlab.com/Mr_Goldberg/goldberg_emulator),
as it has the most complete collection of headers that we can find.

View File

@@ -0,0 +1,52 @@
{
"defaultSidebar": [
{
"type": "category",
"label": "Admin Guides",
"items": [
"guides/quickstart",
"guides/exposing",
"guides/server-troubleshooting"
]
},
{
"type": "category",
"label": "User Guides",
"items": [
"guides/client",
"guides/client-troubleshooting"
]
},
{
"type": "category",
"label": "Metadata",
"items": [
"metadata/giantbomb",
"metadata/igdb",
"metadata/pcgamingwiki"
]
},
{
"type": "category",
"label": "Authentication",
"items": [
"authentication/simple",
"authentication/oidc"
]
},
{
"type": "category",
"label": "Advanced",
"items": [
"advanced/building"
]
},
{
"type": "category",
"label": "Documentation",
"items": [
"library"
]
}
]
}

View File

@@ -1,3 +1,4 @@
[
"0.3.0",
"0.2.0"
]