+ {{ modelValue }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/documentation/faq.md b/apps/documentation/faq.md
new file mode 100644
index 00000000..a73ce73f
--- /dev/null
+++ b/apps/documentation/faq.md
@@ -0,0 +1,49 @@
+# Feature Compatibility with Electron
+
+| Feature | Electron Version | Notes |
+| :------------------------- | :--------------- | :---------------------------------------------------------------------- |
+| Steam Remote Play Together | Any | |
+| Steam Overlay | Any | |
+| Steam Input | Any | Fixed by Steam (09/09/2025) |
+| OBS recording | Any | |
+| Custom icons | Any | |
+---
+
+# Feature Matrix
+## Building
+
+| Engine | Windows | Linux | MacOS | Android | iOS | SteamDeck |
+|----------|:-------:|:-----:|:-----:|:-------:|:---:|:---------:|
+| Electron | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ |
+| Tauri | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️1 |
+| Discord2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+
+1. Through Linux Appimage
+2. Through Discord app
+
+## Cross compiling
+### Electron
+| Build ↓ on → | Windows | Linux | MacOS | Android | iOS | SteamDeck1 |
+|----------|:-------:|:-----:|:-----:|:-------:|:---:|:---------:|
+| Windows | ✔️ | ✔️ | ❔ | ❌ | ❌ | |
+| Linux | ✔️ | ✔️ | ❔ | ❌ | ❌ | |
+| MacOs | ❌ | ❌ | ✔️ | ❌ | ❌ | |
+
+1. See Windows for proton or Linux
+
+## Steam Overlay Support
+
+| Engine | Windows | Linux | MacOS | Android | iOS | SteamDeck |
+|----------|:-------:|:-----:|:-----:|:-------:|:---:|:---------:|
+| Electron | ✔️ | ? | ? | ❌ | ❌ | ? |
+| Tauri | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+| Discord | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
+
+## Discord Rich Presence Support
+
+| Engine | Windows | Linux | MacOS | Android | iOS | SteamDeck |
+|----------|:-------:|:-----:|:-----:|:-------:|:---:|:---------:|
+| Electron | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ |
+| Tauri | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ |
+| Discord | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
+
diff --git a/apps/documentation/guide/app.md b/apps/documentation/guide/app.md
new file mode 100644
index 00000000..958b371e
--- /dev/null
+++ b/apps/documentation/guide/app.md
@@ -0,0 +1 @@
+App
\ No newline at end of file
diff --git a/apps/documentation/guide/getting-started.md b/apps/documentation/guide/getting-started.md
new file mode 100644
index 00000000..9051ebf9
--- /dev/null
+++ b/apps/documentation/guide/getting-started.md
@@ -0,0 +1,15 @@
+---
+next:
+ text: 'Usage'
+ link: '/guide/usage'
+---
+
+# Getting started
+
+## Installation
+
+::: tip
+Pipelab is cross-platform and can be installed on Windows, MacOS and Linux.
+:::
+
+Download a realease from [GitHub](https://github.com/CynToolkit/pipelab/releases) or directly from the [website](https://pipelab.app/download).
diff --git a/apps/documentation/guide/integrations/assets/discord_rp_art_assets.png b/apps/documentation/guide/integrations/assets/discord_rp_art_assets.png
new file mode 100644
index 00000000..ba78be94
Binary files /dev/null and b/apps/documentation/guide/integrations/assets/discord_rp_art_assets.png differ
diff --git a/apps/documentation/guide/integrations/assets/steam_rp_steamworks_section.png b/apps/documentation/guide/integrations/assets/steam_rp_steamworks_section.png
new file mode 100644
index 00000000..9a0f3dd5
Binary files /dev/null and b/apps/documentation/guide/integrations/assets/steam_rp_steamworks_section.png differ
diff --git a/apps/documentation/guide/integrations/construct_3.md b/apps/documentation/guide/integrations/construct_3.md
new file mode 100644
index 00000000..3fafc40e
--- /dev/null
+++ b/apps/documentation/guide/integrations/construct_3.md
@@ -0,0 +1,29 @@
+---
+category: integrations
+---
+
+# Construct 3
+
+## Features
+- Automatic project export to html
+- [Electron](/guide/integrations/electron.md) Integration
+
+There are two tasks available for Construct 3:
+
+- **.c3p export**: Export a single Construct 3 project to html
+- **folder export**: Export a Construct 3 project folder to html
+
+Under the hood, Pipelab launches a local browser instance to export the project to HTML.
+You must enter your username and password to avoid being restricted by Construct 3's limits.
+Additionally, you must specify the path to your browser's data to reuse your installed Construct 3 plugins.
+
+## Integration with the Construct editor
+Pipelab integrate within [Construct 3](https://editor.construct.net/) by using a plugin. You can download it [from Github](https://github.com/CynToolkit/construct-plugin/releases) or [from the Construct website](https://www.construct.net/en/make-games/addons/1415/pipelab).
+Once downloaded:
+- [Install the plugin](https://www.construct.net/en/make-games/manuals/construct-3/tips-and-guides/installing-third-party-addons)
+- Add it to your project by double clicking an empty space
+A simple command line utitly to patch existing x64 executables to include the export symbols NvOptimusEnablement and AmdPowerXpressRequestHighPerformance as required to enable the discreet GPU on some machines (mainly laptops)— [Github](https://github.com/toptensoftware/nvpatch) + +## Pre-requisites + +- Install [.NET 5.0](https://dotnet.microsoft.com/fr-fr/download/dotnet/thank-you/sdk-5.0.408-windows-x64-installer) +- Run `dotnet tool install -g Topten.nvpatch` in a terminal + +## Patch binary +Use this action to patch a binary file. \ No newline at end of file diff --git a/apps/documentation/guide/integrations/poki.md b/apps/documentation/guide/integrations/poki.md new file mode 100644 index 00000000..fa999018 --- /dev/null +++ b/apps/documentation/guide/integrations/poki.md @@ -0,0 +1,10 @@ +# Poki + +## Upload to Poki +Upload your game to Poki. + +## Prerequisites + +You need to have a Poki account and a game created. +You can create a game [here](https://developers.poki.com/). +You will your game ID that you can find in the URL of your game page. \ No newline at end of file diff --git a/apps/documentation/guide/integrations/steam.md b/apps/documentation/guide/integrations/steam.md new file mode 100644 index 00000000..6d83300e --- /dev/null +++ b/apps/documentation/guide/integrations/steam.md @@ -0,0 +1,62 @@ +# Steam + +## Features +- Automatic project upload + +## Upload To Steam +The Upload To Steam task enables you to upload your game to Steam. To proceed, ensure you have the local SDK installed. +Pipelab will automatically log you in if you are already connected through steamcmd; otherwise, it will prompt you for your credentials. + +## Rich Presence configuration +Steam Rich Presence allows you to display custom status information for players in their Steam friends list. To set this up, you need to configure a localization file and use the appropriate actions in your game. + +### 1. The Localization File +Steam uses a `.vdf` file to define the strings and tokens for Rich Presence. This file must be uploaded to the Steamworks partner site under **App Admin > Community > Rich Presence**. + + + +Here is a basic example of a `localization.vdf` file: + +```vdf +"lang" +{ + "Language" "english" + "Tokens" + { + "#Status_InMenu" "In the main menu" + "#Status_Playing" "Playing on %mapname%" + } +} +``` + +- **Tokens**: Keys starting with `#` that will be replaced by the values defined in the file. +- **Variables**: You can use variables like `%mapname%` which can be set dynamically from your game. + +### 2. Special Tokens +There are some reserved tokens you should be aware of: +- `steam_display`: This is the main token Steam looks for to determine what to display. It should usually point to another token (e.g., `#Status_Playing`). +- `steam_player_group`: Used to group players together (e.g., in a lobby). +- `steam_player_group_size`: The current size of the player group. + +### 3. Setup in Construct 3 +If you are using the **Pipelab Construct 3 Plugin**, you can easily update the Rich Presence status using the dedicated action. + +1. **Add the Pipelab Plugin** to your Construct 3 project. +2. **Initialize the integration** using the `Initialize integration` action at the start of your game. +3. Use the **Set rich presence** action to update values: + - **Key**: The name of the token or variable (e.g., `steam_display` or `mapname`). + - **Value**: The value you want to set (e.g., `#Status_Playing` for `steam_display`, or `The Forest` for `mapname`). + +#### Example: +To display "Playing on The Forest", you would call: +- `Set rich presence("steam_display", "#Status_Playing")` +- `Set rich presence("mapname", "The Forest")` + +### 4. Testing your configuration +Steam provides a web-based tool to test your Rich Presence configuration without needing to launch your game or upload a build. + +You can visit the [Steam Rich Presence Tester](https://steamcommunity.com/dev/testrichpresence) to see how your tokens and variables are being resolved for your account in real-time. This is extremely useful for debugging localization issues or ensuring your variable names match between your game code and your `.vdf` file. + +::: tip +Make sure the keys and values you set in your game match the tokens defined in your uploaded `localization.vdf` file. +::: diff --git a/apps/documentation/guide/integrations/system.md b/apps/documentation/guide/integrations/system.md new file mode 100644 index 00000000..d61e516d --- /dev/null +++ b/apps/documentation/guide/integrations/system.md @@ -0,0 +1,19 @@ +# System + +The System integration contains Pipelab specific tasks. + +## Log +The log task is used to display a message in the console. It is useful for debugging and to display information about the pipeline. + +## Alert +The Alert task is used to display a message in a dialog box. It is useful for displaying information about the pipeline to the user. + +## Prompt + +The Prompt task is used to display a message in a dialog box and wait for the user to enter a value. +It can be used to get a value from the user and then use that value in a subsequent task. +For example, you can ask for [Poki](https://poki.com) release notes and then use that value in the [Poki](/guide/integrations/poki.md) [upload](/guide/integrations/poki.md#upload) task. + +## Wait + +The Wait task is used to wait for a specified amount of time. \ No newline at end of file diff --git a/apps/documentation/guide/integrations/tauri.md b/apps/documentation/guide/integrations/tauri.md new file mode 100644 index 00000000..9088756d --- /dev/null +++ b/apps/documentation/guide/integrations/tauri.md @@ -0,0 +1,5 @@ +# Tauri + +::: info +Work in progress +::: \ No newline at end of file diff --git a/apps/documentation/guide/integrations/unity.md b/apps/documentation/guide/integrations/unity.md new file mode 100644 index 00000000..f88aa16c --- /dev/null +++ b/apps/documentation/guide/integrations/unity.md @@ -0,0 +1,5 @@ +# Unity + +::: info +Work in progress +::: \ No newline at end of file diff --git a/apps/documentation/guide/usage.md b/apps/documentation/guide/usage.md new file mode 100644 index 00000000..ac78a46c --- /dev/null +++ b/apps/documentation/guide/usage.md @@ -0,0 +1,66 @@ +--- +next: + text: 'Integrations' + link: '/guide/integrations' +--- + +# Usage +## Basic concepts +Pipelab is based on the concept of **pipelines**. A **pipeline** is a sequence of **tasks** that are executed in order. Each **task** is a unit of work that can be executed independently. +A **pipeline** is triggered by an **event**. An **event** can be a webhook, a cron job, or a manual trigger. + +## Editor + +Start by creating a new project + + + +A dialog will open to configure your new project. + + + +Once created, the pipeline will open in the editor. + + + +Click on the `+` button to add a new task + + + +Select the task type + + + +Configure the task + + + +You can now run the pipeline + + + +## Configuring tasks + +1. This is the Output panel of the [Advanced edit mode](#advanced-edit-mode). It displays all the availabe outputs from previous steps. +2. This is the Variables panel of the [Advanced edit mode](#advanced-edit-mode). It displays all the variables that can be used in the task. +3. This is a regular task's parameter. It can be an input, a boolean, a path selector or more. It can be optional or required. +4. This in an example of a path parameter. It can be used to select a file or a folder. +5. This is an indicator of the parameter's type. You can hover it to know if the type entered in the expected type of the parameter. +6. This button allow to switch between the [Advanced edit mode](#advanced-edit-mode) and the regular edit mode. +7. This is an example of an advanced input. + +## Advanced edit mode +This mode allows you to use Javascript to construct the result of the parameter. It is useful when you need to construct a complex parameter from multiple inputs. + +### Using the advanced mode +In the example below, we are using the advanced mode to construct the path Steam should upload. + +In theory, we want the upload path to be always the output folder of the build step. For this, we'll use the output from the `Copy file/folder` step. + + + +To use it, simply click on it and it will appearin the editor. + + + +The parameter value is calculated from the content of the input. Since it's plain j'avascript, you can construct complex values by concatenating strings, using variables, etc. You can also use ternaries for conditionals. \ No newline at end of file diff --git a/apps/documentation/guide/what-is-pipelab.md b/apps/documentation/guide/what-is-pipelab.md new file mode 100644 index 00000000..8ddf2010 --- /dev/null +++ b/apps/documentation/guide/what-is-pipelab.md @@ -0,0 +1,25 @@ +--- +category: guide +--- + +# What is Pipelab? +Pipelab is a task automation software designed to streamline common, tedious, or repetitive tasks for game developers. + + + +## Use cases +- **Store Publication** + + Seamlessly publish your game to supported stores such as [Steam](/guide/integrations/steam.md), [Itch.io](/guide/integrations/itch_io.md), or the [Epic Game Store](/guide/integrations/epic_game_store.md). + +- **Game Packaging** + + Easily port your web game to desktop using custom runtimes such as [Electron](/guide/integrations/electron.md), [Tauri](/guide/integrations/tauri.md), or [Neutralino](/guide/integrations/neutralino.md). + +- **Improved Scripting** + + Replace handmade scripts with powerful pre-made building blocks. + +- **Automatic Editor Handling** + + Automatically export your game from editors such as [Godot](/guide/integrations/godot.md), [Construct 3](/guide/integrations/construct_3.md), [Unity](/guide/integrations/unity.md), or [GDevelop](/guide/integrations/gdevelop.md). diff --git a/apps/documentation/index.md b/apps/documentation/index.md new file mode 100644 index 00000000..1d2ef7fd --- /dev/null +++ b/apps/documentation/index.md @@ -0,0 +1,35 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Pipelab Documentation" + text: "" + tagline: + actions: + - theme: brand + text: What is Pipelab? + link: /guide/what-is-pipelab + - theme: alt + text: Getting started + link: /guide/getting-started + - theme: alt + text: GitHub + link: https://github.com/CynToolkit/pipelab + +features: + - title: Desktop app guides + details: Learn how to use Pipelab on your desktop + link: /guide/usage + icon: 💻 + - title: Integration guides + details: Learn how to integrate Pipelab into your workflow + link: /guide/integrations + icon: 🔌 + - title: API reference + details: Learn how to use Pipelab's API + link: /api/pipelab + icon: 📖 + +--- + diff --git a/apps/documentation/mise.toml b/apps/documentation/mise.toml new file mode 100644 index 00000000..ae76e1cd --- /dev/null +++ b/apps/documentation/mise.toml @@ -0,0 +1,18 @@ +[tools] +node = "24" + +[tasks.install] +run = "pnpm install" + +[tasks.dev] +run = "pnpm dev" +depends = ["install", "generate-mermaid"] + +[tasks.generate-mermaid] +run = [ + "pnpm mmdc -i assets/architecture/architecture.mermaid -o assets/architecture/architecture.svg", + "pnpm mmdc -i assets/roadmap.mermaid -o assets/roadmap.svg", + "pnpm mmdc -i assets/engine-choose.mermaid -o assets/engine-choose.svg", + "pnpm mmdc -i assets/graph-processing-flow.mermaid -o assets/graph-processing-flow.svg" +] +depends = ["install"] \ No newline at end of file diff --git a/apps/documentation/package.json b/apps/documentation/package.json new file mode 100644 index 00000000..91c9e0ea --- /dev/null +++ b/apps/documentation/package.json @@ -0,0 +1,22 @@ +{ + "name": "@pipelab/documentation", + "version": "1.0.0", + "private": true, + "description": "Pipelab documentation site", + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview", + "generate-mermaid": "mmdc -i assets/*.mermaid -o assets/ -t default -b transparent" + }, + "license": "FSL-1.1-MIT", + "devDependencies": { + "@mermaid-js/mermaid-cli": "^11.6.0", + "vitepress": "2.0.0-alpha.5", + "vitepress-plugin-lightbox": "^1.0.2", + "vue": "3.5.13" + }, + "dependencies": { + "medium-zoom": "^1.1.0" + } +} diff --git a/apps/documentation/roadmap.md b/apps/documentation/roadmap.md new file mode 100644 index 00000000..beb18ccc --- /dev/null +++ b/apps/documentation/roadmap.md @@ -0,0 +1,4 @@ +> [!WARNING] +> Work in progress + +