From 7df591c3099daffc3d9c977e7b2850ea2095d4df Mon Sep 17 00:00:00 2001 From: Suyog Tandel Date: Fri, 9 Jan 2026 11:00:20 +0530 Subject: [PATCH] chore: update readme with app usage disclaimer --- README.md | 29 +++++++++++++++++------------ deno.lock | 28 ++++++++++++++-------------- package.json | 4 ++-- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index a659143..50ca785 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ **An open source commissioning tool for Pico FIDO security keys** +> [!NOTE] +> +> PicoForge is an independent, community-developed tool and is not affiliated with or endorsed by the official Pico FIDO project. This software does not share any code with the official closed-source Pico FIDO commissioning application. + [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL%203.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) [![GitHub issues](https://img.shields.io/github/issues/librekeys/picoforge)](https://github.com/librekeys/picoforge/issues) [![GitHub stars](https://img.shields.io/github/stars/librekeys/picoforge)](https://github.com/librekeys/picoforge/stargazers) @@ -19,11 +23,13 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO - Reading device information and firmware details - Configuring USB VID/PID and product names - Adjusting LED settings (GPIO, brightness, driver) -- Managing security features (secure boot, firmware locking) +- Managing security features (secure boot, firmware locking) (WIP) - Real-time system logging and diagnostics - Support for multiple hardware variants and vendors -> **Alpha Status**: This application is currently under active development and in alpha stage. Users should expect bugs and are encouraged to report them. The app has been tested on Linux with the official Raspberry Pi Pico2 and currently supports Pico FIDO firmware version 7.2 only. Release binaries will be built and published soon. +> **Alpha Status**: This application is currently under active development and in alpha stage. Users should expect bugs and are encouraged to report them. The app has been tested on Linux and Windows 10 with the official Raspberry Pi Pico2 and currently supports Pico FIDO firmware version 7.2 only. +> +> The AppImage in the release builds have a lot of issues right now, I will fix them in the next or upcomming releases, till then you can either complie the app from source or use the .deb/.rpm versions from the releases. ## Screenshots @@ -42,7 +48,7 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO ## Features - **Device Configuration** - Customize USB identifiers, LED behavior, and hardware settings -- **Security Management** - Enable secure boot and firmware verification (experimental) +- **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 @@ -50,17 +56,13 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO ## Requirements -### Runtime Requirements - -- Smart Card Reader (PC/SC compatible) -- Pico FIDO device in Rescue mode - ### Development Requirements To contribute to PicoForge, you'll need: +- **[Node.js](https://nodejs.org/)** - JavaScript/TypeScript runtime - **[Deno](https://deno.land/)** - JavaScript/TypeScript runtime -- **[Rust](https://www.rust-lang.org/)** - System programming language (1.70+) +- **[Rust](https://www.rust-lang.org/)** - System programming language (1.80+) - **PC/SC Middleware**: - Linux: `pcscd` (usually pre-installed) - macOS: Built-in @@ -132,9 +134,9 @@ Get-Service SCardSvr | Start-Service ## Usage 1. Connect your smart card reader -2. Insert your Pico FIDO device (in Rescue mode) +2. Insert your Pico FIDO device 3. Launch PicoForge -4. Click **Connect Device** to detect your key +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 @@ -158,7 +160,7 @@ Get-Service SCardSvr | Start-Service #### Advanced - **Touch Timeout** - User presence button timeout (seconds) - **Secp256k1** - Enable secp256k1 curve support -- **Secure Boot** - Firmware signature verification (⚠️ experimental) +- **Secure Boot** - Firmware signature verification (⚠️ experimental and WIP) ## Project Structure @@ -203,6 +205,7 @@ Contributions are welcome! Please follow these steps: ### Development Guidelines - Follow Rust and TypeScript best practices +- Use `deno fmt` to format the frontend code - Write clear commit messages - Update documentation for new features - Test on multiple platforms when possible @@ -235,6 +238,8 @@ See [LICENSE](LICENSE) for full details. PicoForge is experimental software. The secure boot feature can permanently lock devices if misconfigured. Always understand the implications before enabling security features. +**USB VID/PID Notice**: The vendor presets provided in this software include USB Vendor IDs (VID) and Product IDs (PID) that are the intellectual property of their respective owners (Yubico, Nitrokey, FSIJ, Raspberry Pi Foundation, and others). These identifiers are included for personal development, testing, and educational purposes only. You are NOT authorized to distribute or commercially market devices using VID/PID combinations you do not own or license. Commercial distribution requires obtaining your own VID from the USB Implementers Forum ([usb.org](https://www.usb.org/getting-vendor-id)) and complying with all applicable trademark and certification requirements. Unauthorized use may violate USB-IF policies and intellectual property laws. The PicoForge developers assume no liability for misuse of USB identifiers. + ---
diff --git a/deno.lock b/deno.lock index 11da951..a3f96cc 100644 --- a/deno.lock +++ b/deno.lock @@ -3,23 +3,23 @@ "specifiers": { "npm:@internationalized/date@^3.10.1": "3.10.1", "npm:@lucide/svelte@0.562": "0.562.0_svelte@5.46.1__acorn@8.15.0", - "npm:@sveltejs/adapter-static@^3.0.6": "3.0.10_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3", - "npm:@sveltejs/kit@^2.9.0": "2.49.3_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3_acorn@8.15.0", + "npm:@sveltejs/adapter-static@^3.0.6": "3.0.10_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3", + "npm:@sveltejs/kit@^2.9.0": "2.49.3_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3_acorn@8.15.0", "npm:@sveltejs/vite-plugin-svelte@5": "5.1.1_svelte@5.46.1__acorn@8.15.0_vite@6.4.1__picomatch@4.0.3", "npm:@tailwindcss/vite@^4.1.18": "4.1.18_vite@6.4.1__picomatch@4.0.3", "npm:@tauri-apps/api@2": "2.9.1", "npm:@tauri-apps/cli@2": "2.9.6", "npm:@tauri-apps/plugin-opener@2": "2.5.2", "npm:@tauri-apps/plugin-shell@~2.3.4": "2.3.4", - "npm:bits-ui@^2.15.4": "2.15.4_@internationalized+date@3.10.1_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3", + "npm:bits-ui@^2.15.4": "2.15.4_@internationalized+date@3.10.1_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3", "npm:clsx@^2.1.1": "2.1.1", - "npm:svelte-check@4": "4.3.5_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3", + "npm:svelte-check@4": "4.3.5_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3", "npm:svelte@5": "5.46.1_acorn@8.15.0", "npm:tailwind-merge@^3.4.0": "3.4.0", "npm:tailwind-variants@^3.2.2": "3.2.2_tailwind-merge@3.4.0_tailwindcss@4.1.18", "npm:tailwindcss@^4.1.18": "4.1.18", "npm:tw-animate-css@^1.4.0": "1.4.0", - "npm:typescript@~5.6.2": "5.6.3", + "npm:typescript@~5.9.3": "5.9.3", "npm:vite@^6.0.3": "6.4.1_picomatch@4.0.3" }, "npm": { @@ -345,13 +345,13 @@ "acorn" ] }, - "@sveltejs/adapter-static@3.0.10_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3": { + "@sveltejs/adapter-static@3.0.10_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3": { "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", "dependencies": [ "@sveltejs/kit" ] }, - "@sveltejs/kit@2.49.3_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3_acorn@8.15.0": { + "@sveltejs/kit@2.49.3_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3_acorn@8.15.0": { "integrity": "sha512-luTmE2Isk9GRJnitqanLoByKBiyLdfLpV2qV9a25JMxjbQt919TVqG8pibJDkxTvX9+w2k/9IL7o+/RtG++3QA==", "dependencies": [ "@standard-schema/spec", @@ -605,7 +605,7 @@ "axobject-query@4.1.0": { "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==" }, - "bits-ui@2.15.4_@internationalized+date@3.10.1_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3": { + "bits-ui@2.15.4_@internationalized+date@3.10.1_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3": { "integrity": "sha512-7H9YUfp03KOk1LVDh8wPYSRPxlZgG/GRWLNSA8QC73/8Z8ytun+DWJhIuibyFyz7A0cP/RANVcB4iDrbY8q+Og==", "dependencies": [ "@floating-ui/core", @@ -882,7 +882,7 @@ ], "bin": true }, - "runed@0.35.1_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_svelte@5.46.1__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3": { + "runed@0.35.1_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_svelte@5.46.1__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3": { "integrity": "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==", "dependencies": [ "@sveltejs/kit", @@ -921,7 +921,7 @@ "inline-style-parser" ] }, - "svelte-check@4.3.5_svelte@5.46.1__acorn@8.15.0_typescript@5.6.3": { + "svelte-check@4.3.5_svelte@5.46.1__acorn@8.15.0_typescript@5.9.3": { "integrity": "sha512-e4VWZETyXaKGhpkxOXP+B/d0Fp/zKViZoJmneZWe/05Y2aqSKj3YN2nLfYPJBQ87WEiY4BQCQ9hWGu9mPT1a1Q==", "dependencies": [ "@jridgewell/trace-mapping", @@ -934,7 +934,7 @@ ], "bin": true }, - "svelte-toolbelt@0.10.6_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.6.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.6.3_vite@6.4.1__picomatch@4.0.3": { + "svelte-toolbelt@0.10.6_svelte@5.46.1__acorn@8.15.0_@sveltejs+kit@2.49.3__@sveltejs+vite-plugin-svelte@5.1.1___svelte@5.46.1____acorn@8.15.0___vite@6.4.1____picomatch@4.0.3__svelte@5.46.1___acorn@8.15.0__typescript@5.9.3__vite@6.4.1___picomatch@4.0.3__acorn@8.15.0_@sveltejs+vite-plugin-svelte@5.1.1__svelte@5.46.1___acorn@8.15.0__vite@6.4.1___picomatch@4.0.3_typescript@5.9.3_vite@6.4.1__picomatch@4.0.3": { "integrity": "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==", "dependencies": [ "clsx", @@ -1001,8 +1001,8 @@ "tw-animate-css@1.4.0": { "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==" }, - "typescript@5.6.3": { - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "typescript@5.9.3": { + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "bin": true }, "vite@6.4.1_picomatch@4.0.3": { @@ -1054,7 +1054,7 @@ "npm:tailwind-variants@^3.2.2", "npm:tailwindcss@^4.1.18", "npm:tw-animate-css@^1.4.0", - "npm:typescript@~5.6.2", + "npm:typescript@~5.9.3", "npm:vite@^6.0.3" ] } diff --git a/package.json b/package.json index 0fd6350..44d12ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pico-forge", - "version": "0.1.0", + "version": "0.1.1", "description": "", "type": "module", "scripts": { @@ -34,7 +34,7 @@ "tailwind-merge": "^3.4.0", "tailwind-variants": "^3.2.2", "tw-animate-css": "^1.4.0", - "typescript": "~5.6.2", + "typescript": "~5.9.3", "vite": "^6.0.3", "@tauri-apps/cli": "^2" }