diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 819e519..973fe13 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -52,206 +52,61 @@ jobs:
- name: install frontend dependencies
run: pnpm install
-
- - name: Build and create DMG for macOS
+ - name: build and fix macOS
if: matrix.platform == 'macos-latest'
run: |
- pnpm build
- cd src-tauri
- cargo build --release --target ${{ matrix.args }}
- cd ..
-
- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
-
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
-
- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
-
- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n 1.0.0\n CFBundleShortVersionString\n 1.0.0\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
-
- if [ -f "src-tauri/icons/icon.icns" ]; then
- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
- fi
-
- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
-
- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
-
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
-
- - name: Build with tauri-action for Windows and Linux
- if: matrix.platform != 'macos-latest'
- uses: tauri-apps/tauri-action@v0
+ pnpm tauri build ${{ matrix.args }}
+ pnpm run post-build:macos
+ - uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: nightly
releaseName: 'Emerald Nightly'
releaseBody: |
# Emerald Legacy Launcher (Nightly)
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
+ # What to download?
+ - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
+ - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
+ - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
+ - `Emerald.Legacy.Launcher-*_x64.dmg` for macOS (Intel)
+ - `Emerald.Legacy.Launcher-*_aarch64.dmg` for macOS (M-series)
+ - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
+ - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
---
-
- ## ⚠️ Windows SmartScreen
+ # Windows SmartScreen
This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
1. Click the **"More info"** link under the main text.
2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+ ---
+ # macOS "Damaged" Error Fix
+ The macOS builds now include automatic fixes for Gatekeeper quarantine issues. The app should launch without "application is damaged" errors.
+
releaseDraft: false
prerelease: true
args: ${{ matrix.args }}
- - name: Upload all artifacts to release
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/deb/*.deb
- src-tauri/target/release/bundle/appimage/*.AppImage
- src-tauri/target/release/bundle/rpm/*.rpm
- src-tauri/target/release/bundle/msi/*.msi
- src-tauri/target/release/bundle/nsis/*.exe
- tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
-
- - name: Upload macOS DMGs to release
- if: matrix.platform == 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: src-tauri/target/release/bundle/dmg/*.dmg
- tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
nightly-flatpak:
runs-on: ubuntu-latest
permissions:
contents: write
- needs: nightly-tauri
+ needs: nightly-tauri # Wait for Tauri release to be created
+ container:
+ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
+ options: --privileged
steps:
- uses: actions/checkout@v4
with:
- submodules: recursive
-
- - name: install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y flatpak flatpak-builder
-
- - name: setup flathub
- run: |
- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
- sudo flatpak update
-
- - name: setup flatpak
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ submodules: true
+ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
cache-key: flatpak-builder-${{ github.sha }}
- build-bundle: true
- repository-url: https://flathub.org/repo/flathub.flatpakrepo
- repository-name: flathub
-
- - name: Upload flatpak to release
- uses: softprops/action-gh-release@v2
+ - uses: softprops/action-gh-release@v2
with:
- files: "*.flatpak"
+ files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 4333557..c2ebabe 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -15,28 +15,20 @@ jobs:
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest'
args: '--target x86_64-apple-darwin'
- - platform: 'ubuntu-22.04'
- args: ''
- - platform: 'windows-latest'
- args: ''
+ # - platform: 'ubuntu-22.04'
+ # args: ''
+ # - platform: 'windows-latest'
+ # args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- - name: Extract version
- id: get_version
- shell: bash
- run: |
- VERSION=$(node -p "require('./package.json').version")
- echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- echo "APP_VERSION=$VERSION" >> $GITHUB_ENV
-
- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
+ sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: setup pnpm
uses: pnpm/action-setup@v4
@@ -60,220 +52,61 @@ jobs:
- name: install frontend dependencies
run: pnpm install
- - name: Build and create artifacts for macOS
+ - name: Create PKG with post-install script
if: matrix.platform == 'macos-latest'
run: |
- # Build the app once
- pnpm build
- cd src-tauri
- cargo build --release --target ${{ matrix.args }}
- cd ..
-
- # Setup target architecture name
- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
-
- # Prepare paths for .app bundle
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
-
- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
-
- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n ${{ steps.get_version.outputs.VERSION }}\n CFBundleShortVersionString\n ${{ steps.get_version.outputs.VERSION }}\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
-
- if [ -f "src-tauri/icons/icon.icns" ]; then
- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
- fi
-
- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
-
- # Create PKG (optional, using the built .app)
+ # Create temporary directory for PKG creation
mkdir -p pkg_temp/scripts
cp scripts/postinstall.sh pkg_temp/scripts/
- pkgbuild --root "src-tauri/target/$TARGET_ARCH/release/bundle/macos" \
+ # Build the app first
+ pnpm tauri build -- ${{ matrix.args }}
+
+ # Find the built app
+ APP_PATH=$(find src-tauri/target/release/bundle/macos/ -name "*.app" | head -1)
+ APP_NAME=$(basename "$APP_PATH")
+
+ # Create PKG with post-install script
+ pkgbuild --root "$APP_PATH/.." \
--install-location /Applications \
--scripts pkg_temp/scripts \
--identifier "com.emerald.legacy" \
- --version "${{ steps.get_version.outputs.VERSION }}" \
+ --version "1.0.0" \
+ --install-location "/Applications" \
+ --root "$APP_PATH" \
"Emerald-Legacy-Launcher.pkg"
- # Create DMG
- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
-
- # Move artifacts to final locations
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
-
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
- mv "$GITHUB_WORKSPACE/Emerald-Legacy-Launcher.pkg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
-
- - name: Build with tauri-action for Windows and Linux
- if: matrix.platform != 'macos-latest'
- uses: tauri-apps/tauri-action@v0
+ # Move PKG to bundle directory
+ mkdir -p src-tauri/target/release/bundle/macos/
+ mv "Emerald-Legacy-Launcher.pkg" src-tauri/target/release/bundle/macos/
+ - uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
- tagName: v${{ steps.get_version.outputs.VERSION }}
- releaseName: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- releaseBody: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+ tagName: v__VERSION__
+ releaseName: 'Emerald v__VERSION__'
+ releaseBody: '*pls edit me*'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
- - name: Upload all artifacts to release
- if: matrix.platform != 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/deb/*.deb
- src-tauri/target/release/bundle/appimage/*.AppImage
- src-tauri/target/release/bundle/rpm/*.rpm
- src-tauri/target/release/bundle/msi/*.msi
- src-tauri/target/release/bundle/nsis/*.exe
- tag_name: v${{ steps.get_version.outputs.VERSION }}
- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- body: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: true
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Upload macOS DMGs to release
- if: matrix.platform == 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/dmg/*.dmg
- src-tauri/target/release/bundle/macos/*.pkg
- tag_name: v${{ steps.get_version.outputs.VERSION }}
- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- body: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: true
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
publish-flatpak:
runs-on: ubuntu-latest
permissions:
contents: write
- needs: publish-tauri
+ needs: publish-tauri # Wait for Tauri release to be created
+ container:
+ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
+ options: --privileged
steps:
- uses: actions/checkout@v4
with:
- submodules: recursive
-
- - name: install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y flatpak flatpak-builder
-
- - name: setup flathub
- run: |
- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
- sudo flatpak update
-
- - name: setup flatpak
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ submodules: true
+ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
cache-key: flatpak-builder-${{ github.sha }}
- build-bundle: true
- repository-url: https://flathub.org/repo/flathub.flatpakrepo
- repository-name: flathub
- uses: softprops/action-gh-release@v2
with:
files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
diff --git a/README.md b/README.md
index 07c9aa9..cc9a185 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,7 @@
-

+
Emerald Legacy Launcher
-
FOSS cross-platform launcher for Minecraft Legacy Console Edition
-
-
-
-
-
-
+
FOSS cross-platform launcher for Minecraft Legacy Console Edition
@@ -27,300 +21,57 @@
---
-## Table of Contents
+
-- [Overview](#overview)
-- [Features](#features)
-- [Screenshots](#screenshots)
-- [Installation](#installation)
- - [Windows](#windows)
- - [macOS](#macos)
- - [Linux](#linux)
-- [Game Versions & Partnerships](#game-versions--partnerships)
-- [Building from Source](#building-from-source)
-- [Development](#development)
- - [Project Structure](#project-structure)
- - [Tech Stack](#tech-stack)
-- [Troubleshooting](#troubleshooting)
-- [Roadmap](#roadmap)
-- [Acknowledgments](#acknowledgments)
-- [License](#license)
+
+
+### PROJECT OVERVIEW
+Emerald Legacy Launcher started as a solo project to create a better way to play Legacy Console Edition. Over time, other developers joined the effort, bringing expertise from various preservation projects into one place.
+
+**Our Philosophy:** For too long, the LCE scene has been fragmented across different, often resource-heavy launchers. Emerald was built to stop this fragmentation and centralize everything into a single, definitive hub. By avoiding bloated frameworks and utilizing a modern Rust/Tauri stack, we deliver a high-performance, cross-platform experience that uses only ~15MB of RAM, leaving all your PC's resources dedicated to the game itself.
---
-## Overview
+### CORE FEATURES
-Emerald Legacy Launcher is a **high-performance, open-source launcher** for Minecraft Legacy Console Edition (LCE). Built to centralize the fragmented LCE scene, it provides a lightweight, unified hub for playing your favorite console versions of Minecraft on PC.
-
-**Why Emerald?** Traditional launchers often rely on bloated frameworks, consuming excessive resources. Emerald utilizes a modern **Rust/Tauri** architecture, using only **~15MB of RAM** — leaving your PC's resources dedicated to the game itself.
-
-The project started as a solo effort and has grown into a collaborative community project, bringing together expertise from various LCE preservation initiatives.
+
+
+
+ EASY SETUP
+ An automated installation process for TU19, Legacy Evolved and 360Revived, with more versions coming in future updates.
+ |
+
+ RUST BACKEND
+ A memory-safe backend that handles all file operations and game execution with minimal overhead.
+ |
+
+
+
+ EASY CONFIGURATION
+ An integrated settings menu to change your username and manage game parameters directly through the launcher.
+ |
+
+ TAURI FRONTEND
+ A lightweight frontend that handles the user interface and configuration management via webview.
+ | *Proudly developed by a passionate team from the LCE community.*
+
+
---
-## Features
-
-### Core Features
-
-| Feature | Description |
-|---------|-------------|
-| **Automated Setup** | One-click installation for TU19, Legacy Evolved, Revelations, and 360Revived versions |
-| **Cross-Platform** | Native support for Windows, macOS (Intel & Apple Silicon), and Linux |
-| **Lightweight** | Very light RAM usage thanks to Rust backend and Tauri framework |
-| **Easy Configuration** | Built-in settings for username, game parameters, and profiles |
-
-### Advanced Features
-
-| Feature | Description |
-|---------|-------------|
-| **3D Skin Viewer** | Interactive skin preview using Three.js with layer support |
-| **Custom Skins** | Import and manage your own skins with local storage |
-| **Controller Support** | Full gamepad navigation support (keyboard fallback included) |
-| **Discord Rich Presence** | Show your current activity and game status on Discord |
-| **Workshop and modloader** | *(Coming Soon)* Community content and mod browser |
+### [DEVELOPMENT ROADMAP](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2)
+Click the heading above to track progress, view active tasks, and see upcoming launcher features.
---
-## Game Versions & Partnerships
-
-Emerald Legacy Launcher integrates multiple community-driven builds of Minecraft Legacy Console Edition. Each build brings unique features and improvements to the classic LCE experience.
-
-### Available Builds
-
-| Build | Developer | Platform | Description |
-|-------|-----------|----------|-------------|
-| **[Revelations](https://github.com/itsRevela/MinecraftConsoles)** | [@itsRevela](https://github.com/itsRevela) | GitHub | Enhanced LCE with uncapped FPS, graphics fixes, hardcore hearts, and dedicated server security. Features LAN multiplayer, split-screen, and keyboard & mouse support. |
-| **[360 Revived](https://github.com/BluTac10/360Revived)** | [@BluTac10](https://github.com/BluTac10) | GitHub | PC port of Xbox 360 Edition TU19 with desktop optimizations. Features keyboard & mouse, fullscreen, LAN multiplayer, dedicated server, and split-screen support. |
-| **[Legacy Evolved](https://codeberg.org/piebot/LegacyEvolved)** | [@piebot](https://codeberg.org/piebot) | Codeberg | Backports newer title updates to LCE TU19 base. Currently porting TU25 (~98% complete) and TU31 (~76% complete). |
-| **[Title Update 19](https://github.com/smartcmd/MinecraftConsoles)** | [@smartcmd](https://github.com/smartcmd) | GitHub | Minecraft LCE v1.6.0560.0 with compilation fixes. Base version for modding with keyboard & mouse, fullscreen, LAN multiplayer, and dedicated server support. |
-
-### Coming Soon: Legacy Minecraft Restoration Project (LMRP)
-
-**LMRP** will be our **first major collaboration** to bring fully functional **online mini-games** back to Legacy Console Edition. This groundbreaking project aims to:
-
-- Restore classic LCE mini-games (Battle, Tumble, Glide)
-- Preserve the authentic mini-game mechanics and maps
-
-Stay tuned for updates on this exciting partnership! :)
+> ### ACKNOWLEDGMENTS
+> * **The Emerald Team:** Technical development and maintenance.
+> * **4J Studios & Mojang:** Original creators of Legacy Console Edition.
+> * **smartcmd & The LCE Community:** Research and foundations for Legacy Console Edition on PC.
+> * **LegacyEvolved:** Backporting TUs into smartcmd
+> * **Tauri & Rust:** Core technologies.
---
-## Screenshots
-
-
-
----
-
-## Installation
-
-### Windows
-
-Download the latest release from [GitHub Releases](https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher/releases):
-
-| Format | Best For |
-|--------|----------|
-| `.exe` (NSIS) | Standard installation with uninstaller |
-| `.msi` | Enterprise/IT deployment |
-
-**⚠️ Windows SmartScreen Warning:**
-> Since the launcher is unsigned, Windows may show a "Windows protected your PC" warning. To proceed:
-> 1. Click **"More info"**
-> 2. Click **"Run anyway"**
-
-### macOS
-
-| Format | Architecture |
-|--------|-------------|
-| `.dmg` (x64) | Intel Macs |
-| `.dmg` (aarch64) | Apple Silicon (M1/M2/M3) |
-
-**Installation Steps:**
-1. Download the appropriate DMG for your Mac
-2. Open the DMG and drag the app to Applications
-3. If you see "app is damaged" error:
- - Right-click the app → **Open** → confirm **Open**
- - Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
-
-### Linux
-
-Multiple distribution formats available:
-
-| Format | Distribution |
-|--------|------------|
-| `.deb` | Debian, Ubuntu, Linux Mint |
-| `.rpm` | RHEL, Fedora, openSUSE |
-| `.AppImage` | Universal (no installation required) |
-| `Flatpak` | Universal with sandboxing |
-
-**Flatpak Installation:**
-```bash
-flatpak install emerald.flatpak
-```
-
-**Dependencies (if building from source):**
-```bash
-# Ubuntu/Debian
-sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
-
-# Fedora
-sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel patchelf systemd-devel
-```
-
----
-
-## Building from Source
-
-### Requirements
-
-- **Node.js** (LTS recommended)
-- **Rust** (latest stable)
-- **PNPM** (recommended) or NPM
-- Platform-specific dependencies:
- - Linux: `WebKit2GTK-4.1`
- - macOS: WebKit (pre-installed)
- - Windows: Edge WebView2 Runtime (usually pre-installed)
-
-### Build Steps
-
-```bash
-# Clone the repository
-git clone https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher.git
-cd Emerald-Legacy-Launcher
-
-# Install dependencies
-pnpm install
-
-# Development mode
-pnpm tauri dev
-
-# Production build
-pnpm tauri build
-```
-
-**Flatpak Build:**
-```bash
-pnpm flatpak
-```
-
----
-
-## Development
-
-### Project Structure
-
-```
-Emerald-Legacy-Launcher/
-├── src/ # React frontend
-│ ├── components/ # UI components
-│ ├── context/ # React context providers
-│ ├── hooks/ # Custom React hooks
-│ ├── pages/ # Page components
-│ ├── services/ # API/services layer
-│ └── css/ # Global styles
-├── src-tauri/ # Rust backend
-│ ├── src/ # Rust source code
-│ ├── Cargo.toml # Rust dependencies
-│ └── tauri.conf.json # Tauri configuration
-├── public/ # Static assets
-├── flatpak/ # Flatpak build config
-└── scripts/ # Build scripts
-```
-
-### Tech Stack
-
-| Layer | Technology | Version |
-|-------|-----------|---------|
-| **Backend** | Rust | 2021 Edition |
-| **Framework** | Tauri | v2 |
-| **Frontend** | React | ^19.1.0 |
-| **Language** | TypeScript | ~5.8.3 |
-| **Styling** | TailwindCSS | v4 |
-| **Animations** | Framer Motion | ^12.36.0 |
-| **3D Rendering** | Three.js | ^0.183.2 |
-| **Build Tool** | Vite | ^7.0.4 |
-
-### Key Dependencies
-
-**Rust Crates:**
-- `tauri` — Cross-platform app framework
-- `serde` — Serialization
-- `reqwest` — HTTP client
-- `tokio` — Async runtime
-- `rfd` — Native file dialogs
-
-**Frontend Packages:**
-- `@tauri-apps/api` — Tauri JS API
-- `tauri-plugin-drpc` — Discord Rich Presence
-- `tauri-plugin-gamepad-api` — Controller support
-
----
-
-## Troubleshooting
-
-### macOS "App is Damaged" Error
-
-```bash
-# Remove quarantine attributes
-xattr -cr /path/to/Emerald\ Legacy\ Launcher.app
-```
-
-### Linux WebView Issues
-
-Ensure WebKit2GTK-4.1 is installed:
-```bash
-# Check installation
-pkg-config --modversion webkit2gtk-4.1
-
-# Reinstall if needed
-sudo apt install --reinstall libwebkit2gtk-4.1-0
-```
-
-### Game Not Launching
-
-1. Verify game files are properly installed via the launcher
-2. Check that Wine/Proton is installed (Linux only)
-3. Check that Wine/GPTK3 are installed (macOS only)
-4. Ensure your GPU drivers are up to date
-
-### Controller Not Detected
-
-- Connect controller before launching the launcher
-- Xbox and PlayStation controllers are best supported
-
----
-
-## Roadmap
-
-Track our progress and upcoming features on the [Development Roadmap](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2).
-
-**Planned Features:**
-- [ ] Workshop content browser
-- [ ] Additional TU versions support
-- [ ] Enhanced mod support
-- [ ] Cloud sync for settings/skins
-- [ ] Auto-updater integration
-
----
-
-## Acknowledgments
-
-*Proudly developed by a passionate team from the LCE community.*
-
-- **The Emerald Team** — Technical development and maintenance
-- **4J Studios & Mojang** — Original creators of Legacy Console Edition
-- **smartcmd & The LCE Community** — Research and foundations for LCE on PC
-- **Tauri & Rust Communities** — Core technologies and ecosystem
-
----
-
-## License
-
-This project is licensed under the **[GNU GPL v3 License](LICENSE)**.
-
-You are free to:
-- **Use** — Use the launcher for any purpose
-- **Study** — Access and study the source code
-- **Share** — Redistribute copies
-- **Improve** — Submit improvements and modifications
-
-See `LICENSE` file for full terms.
+***This project is licensed under the [GNU GPL v3 License](LICENSE)***
+
diff --git a/public/images/minecraft_title_revelations.png b/public/images/minecraft_title_revelations.png
deleted file mode 100644
index aa9e0aa55ab2c609b19fe8563d635af88604e429..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc-jL100001
literal 275708
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