diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 997a227..cd9d75a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -31,12 +31,14 @@ jobs:
runs-on: ${{ matrix.platform }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
- name: setup node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
- node-version: lts/*
+ node-version: latest
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
@@ -49,7 +51,7 @@ jobs:
if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-24.04-arm'
run: |
sudo apt-get update
- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libpcsclite-dev libudev-dev libusb-1.0-0-dev
+ sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libpcsclite-dev libudev-dev libusb-1.0-0-dev podman
- name: install dependencies (ubuntu-arm64 only)
if: matrix.platform == 'ubuntu-24.04-arm'
@@ -90,12 +92,6 @@ jobs:
> [!CAUTION]
> This is an alpha release and thus can have some bugs, report them using github issues.
- ### Changelog:
-
- - Now manage stored passkeys on your pico-key from picoforge app itself.
- - Add Linux arm builds of the app in releases.
- - Fix AppImages not detecting the key.
-
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
@@ -135,3 +131,65 @@ jobs:
gh release upload "v${{ env.version }}" "$APPIMAGE_PATH" --clobber
echo "Success! The Draft Release now has the fixed AppImage."
+
+ - name: Sync Spec Version & Tag (Podman Container)
+ if: matrix.platform == 'ubuntu-22.04'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ cat << 'EOF' > ./update_spec_in_container.sh
+ #!/bin/sh
+ set -e
+
+ dnf install -y tito git
+
+ git config --global --add safe.directory /workspace
+ git config --global user.email 'git@suyogtandel.in'
+ git config --global user.name 'Suyog Tandel'
+
+ git remote set-url origin https://x-access-token:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git
+
+ CARGO_FILE="src-tauri/Cargo.toml"
+ NEW_VERSION=$(grep -m 1 '^version' "$CARGO_FILE" | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/')
+
+ CURRENT_SPEC_VERSION=$(grep -m 1 '^Version:' picoforge.spec | awk '{print $2}')
+ CURRENT_SPEC_RELEASE=$(grep -m 1 '^Release:' picoforge.spec | awk '{print $2}' | sed 's/%{?dist}//')
+
+ echo "Cargo Version: $NEW_VERSION"
+ echo "Spec Version: $CURRENT_SPEC_VERSION"
+ echo "Spec Release: $CURRENT_SPEC_RELEASE"
+
+ if [ "$NEW_VERSION" != "$CURRENT_SPEC_VERSION" ]; then
+ echo "New version detected. Resetting Release to 1."
+ sed -i "s/^Version:.*/Version: $NEW_VERSION/" picoforge.spec
+ sed -i "s/^Release:.*/Release: 1%{?dist}/" picoforge.spec
+ else
+ echo "Version match. Incrementing Release number."
+ NEW_RELEASE=$((CURRENT_SPEC_RELEASE + 1))
+ sed -i "s/^Release:.*/Release: $NEW_RELEASE%{?dist}/" picoforge.spec
+ fi
+
+ if git diff --quiet picoforge.spec; then
+ echo "No changes to spec file."
+ else
+ git add picoforge.spec
+ git commit -m "chore: sync spec to $NEW_VERSION [skip ci]"
+ fi
+
+ tito tag --offline --accept-auto-changelog --keep-version
+ git pull --rebase origin main
+ git push --follow-tags origin HEAD:main HEAD:release
+ EOF
+
+ chmod +x ./update_spec_in_container.sh
+
+ podman run --rm \
+ --security-opt label=disable \
+ -v "$PWD":/workspace \
+ -w /workspace \
+ -e GITHUB_TOKEN=$GITHUB_TOKEN \
+ -e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \
+ fedora:latest \
+ /workspace/update_spec_in_container.sh
+
+ rm ./update_spec_in_container.sh
diff --git a/CREDITS.md b/CREDITS.md
new file mode 100644
index 0000000..15f2df4
--- /dev/null
+++ b/CREDITS.md
@@ -0,0 +1,21 @@
+
+**List of people who have contributed to the PicoForge project.**
+
+- [lockedmutex](https://github.com/lockedmutex): Worked on the frontend and backend of the entire project and also maintains the COPR repository of the application.
+- [vaishakhsnair](https://github.com/vaishakhsnair): Wrote fixes for ESP32 S3.
+- [oshenyang](https://github.com/oshenyang): Fixed application freezing issue on macos.
+- [Lab-8916100448256](https://github.com/Lab-8916100448256): Contributed `shell.nix` file for dev env setup using nix package manager and on nix os.
+- [jetcookies](https://github.com/jetcookies): Contributed `package.nix` file for nix packaging of the application.
+
+**Third-party Libraries**
+
+- [Pico FIDO](https://github.com/polhenarejos/pico-fido) - The firmware this tool configures
+- [Tauri](https://tauri.app/) - Desktop application framework
+- [Svelte](https://svelte.dev/) - Reactive UI framework
+- [shadcn-svelte](https://www.shadcn-svelte.com/) - UI component library
+- [pcsc-rust](https://github.com/bluetech/pcsc-rust) - Smart card interface
+- [ctap-hid-fido2](https://github.com/gebogebogebo/ctap-hid-fido2) - fido2 interface
+
+**Closing**
+
+This document is a way to publicly appreciate the contributions of those who have helped make this project what it is today. Thank you!
diff --git a/README.md b/README.md
index 40007e4..487b6a0 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,8 @@
[](https://www.gnu.org/licenses/agpl-3.0)
[](https://github.com/librekeys/picoforge/issues)
[](https://github.com/librekeys/picoforge/stargazers)
+
+[](https://copr.fedorainfracloud.org/coprs/lockedmutex/picoforge/package/picoforge/)
@@ -16,7 +18,7 @@
> PicoForge is an independent, community-developed tool and is not affiliated with or endorsed by the official [pico-fido](https://github.com/polhenarejos/pico-fido) project.
> This software does not share any code with the official closed-source pico-fido application.
>
-> For some reason, when running the app on windows, it needs to be ran as administrator or it cannot detect the device, this will be fixed in future. Till then run the app as admin.
+> Check application [Installation Wiki](https://github.com/librekeys/picoforge/wiki/Installation) for installation guide of the PicoForge app on your system.
## About
@@ -36,15 +38,15 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO
### Main Interface
-
+
### Configuration Panel
#### Pin config
-
+
#### Other Config
-
+
@@ -54,9 +56,26 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO
- **Security Management** - Enable secure boot and firmware verification (experimental and WIP)
- **Real-time Monitoring** - View flash usage, connection status, and system logs
- **Modern UI** - Clean, responsive interface built with Svelte and shadcn-svelte
-- **Multi-Vendor Support** - Preset configurations for YubiKey, Nitrokey, SoloKeys, and more
+- **Multi-Vendor Support** - Compatible with multiple hardware variants
- **Cross-Platform** - Works on Windows, macOS, and Linux
+### Installation
+
+Check the official [PicoForge Wiki](https://github.com/librekeys/picoforge/wiki/Installation) for installation info of the application.
+
+## Usage
+
+1. Connect your smart card reader
+2. Insert your Pico FIDO device
+3. Launch PicoForge
+4. Click **Refresh** button at top right corner to detect your key
+5. Navigate through the sidebar to configure settings:
+ - **Home** - Device overview and quick actions
+ - **Configuration** - USB settings, LED options
+ - **Security** - Secure boot management (experimental)
+ - **Logs** - Real-time event monitoring
+ - **About** - Application information
+
## Requirements
### Development Requirements
@@ -82,91 +101,108 @@ cd picoforge
### 2. Install Dependencies
+#### Using Deno (Recommended)
+
```bash
deno install
```
+#### Using npm
+
+```bash
+npm install
+```
+
### 3. Build the Application
#### Development Build
+**With Deno:**
```bash
deno task tauri dev
```
+**With npm:**
+```bash
+npm run tauri dev
+```
+
#### Production Build
+**With Deno:**
```bash
deno task tauri build
```
+**With npm:**
+```bash
+npm run tauri build
+```
+
The compiled binaries will be available in:
- **Linux**: `src-tauri/target/release/bundle/`
- **macOS**: `src-tauri/target/release/bundle/dmg/`
- **Windows**: `src-tauri/target/release/bundle/`
-### Installation
-
-Check the official [PicoForge Wiki](https://github.com/librekeys/picoforge/wiki/Installation) for installation info of the application.
-
-## Usage
-
-1. Connect your smart card reader
-2. Insert your Pico FIDO device
-3. Launch PicoForge
-4. Click **Refresh** button at top right corner to detect your key
-5. Navigate through the sidebar to configure settings:
- - **Home** - Device overview and quick actions
- - **Configuration** - USB settings, LED options
- - **Security** - Secure boot management (experimental)
- - **Logs** - Real-time event monitoring
- - **About** - Application information
-
-### Configuration Options
-
-#### USB Identity
-- **VID/PID** - Vendor and Product IDs (hex format)
-- **Product Name** - Device name shown to host system
-- **Vendor Presets** - Quick selection for common manufacturers
-
-#### LED Settings
-- **GPIO Pin** - Hardware pin for LED control
-- **Brightness** - Intensity level (0-15)
-- **Driver Type** - Hardware-specific LED drivers
-- **Options** - Dimmable, steady mode, power cycle behavior
-
-#### Advanced
-- **Touch Timeout** - User presence button timeout (seconds)
-- **Secp256k1** - Enable secp256k1 curve support
-- **Secure Boot** - Firmware signature verification (⚠️ experimental and WIP)
-
## Project Structure
```
picoforge/
├── src/ # Svelte frontend
│ ├── lib/ # Reusable components & utilities
+│ │ ├── components/ # UI components
+│ │ ├── device/ # Device-related logic
+│ │ ├── hooks/ # Custom Svelte hooks
+│ │ ├── layout/ # Layout components
+│ │ ├── services/ # Service layer
+│ │ ├── state/ # State management
+│ │ ├── utils.ts # Utility functions
+│ │ └── views/ # View components
│ ├── routes/ # SvelteKit pages
+│ │ ├── +layout.svelte # Root layout
+│ │ ├── +layout.ts # Layout configuration
+│ │ └── +page.svelte # Home page
│ ├── app.css # Global styles
│ └── app.html # HTML template
├── src-tauri/ # Rust backend
│ ├── src/ # Rust source code
-│ │ └── lib.rs # Tauri commands & PC/SC logic
+│ │ ├── fido/ # FIDO device logic
+│ │ ├── rescue/ # Rescue mode functionality
+│ │ ├── error.rs # Error handling
+│ │ ├── io.rs # I/O operations
+│ │ ├── lib.rs # Tauri commands & PC/SC logic
+│ │ ├── logging.rs # Logging utilities
+│ │ ├── main.rs # Entry point
+│ │ └── types.rs # Type definitions
│ ├── icons/ # Application icons
│ ├── capabilities/ # Tauri permissions
+│ │ └── default.json # Default capabilities
│ ├── Cargo.toml # Rust dependencies
+│ ├── Cargo.lock # Rust lock file
│ ├── tauri.conf.json # Tauri configuration
-│ └── build.rs # Build script
+│ ├── build.rs # Build script
+│ └── rustfmt.toml # Rust formatting config
├── static/ # Static assets
│ ├── build-configure-symbolic.svg
-│ └── favicon.png
+│ ├── favicon.png
+│ ├── in.suyogtandel.picoforge.svg
+│ ├── svelte.svg
+│ ├── tauri.svg
+│ └── vite.svg
+├── data/ # Application data
+│ ├── in.suyogtandel.picoforge.desktop
+│ └── screenshots/ # Screenshots
├── node_modules/ # Deno node compatibility modules
├── components.json # shadcn-svelte config
├── package.json # Node package manifest
+├── package-lock.json # npm lock file
+├── deno.json # Deno configuration
├── deno.lock # Deno lock file
├── svelte.config.js # SvelteKit configuration
├── vite.config.js # Vite bundler config
├── tsconfig.json # TypeScript configuration
+├── biome.json # Biome configuration
+├── CREDITS.md # Credits
└── LICENSE # AGPL-3.0 license
```
@@ -198,18 +234,6 @@ See [LICENSE](LICENSE) for full details.
- **Suyog Tandel** ([@lockedmutex](https://github.com/lockedmutex))
-## Contributers
-
-- **Vaishakh Nair** ([@vaishakhsnair](https://github.com/vaishakhsnair))
-
-## Acknowledgments
-
-- [Pico FIDO](https://github.com/polhenarejos/pico-fido) - The firmware this tool configures
-- [Tauri](https://tauri.app/) - Desktop application framework
-- [Svelte](https://svelte.dev/) - Reactive UI framework
-- [shadcn-svelte](https://www.shadcn-svelte.com/) - UI component library
-- [pcsc-rust](https://github.com/bluetech/pcsc-rust) - Smart card interface
-
## Support
- **Discord**: [Join our Discord server](https://discord.gg/6wYBpSHJY2) for community support and interaction
diff --git a/data/screenshots/screenshot-1.webp b/data/screenshots/screenshot-1.webp
index b5a16c1..c8ebe06 100644
Binary files a/data/screenshots/screenshot-1.webp and b/data/screenshots/screenshot-1.webp differ
diff --git a/data/screenshots/screenshot-2.webp b/data/screenshots/screenshot-2.webp
index 9a4d7c1..86f7cd7 100644
Binary files a/data/screenshots/screenshot-2.webp and b/data/screenshots/screenshot-2.webp differ
diff --git a/data/screenshots/screenshot-3.webp b/data/screenshots/screenshot-3.webp
index 2288766..91e2747 100644
Binary files a/data/screenshots/screenshot-3.webp and b/data/screenshots/screenshot-3.webp differ