mirror of
https://github.com/librekeys/picoforge.git
synced 2026-07-28 08:01:19 -07:00
chore: update readme with app usage disclaimer
This commit is contained in:
@@ -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.
|
||||
|
||||
[](https://www.gnu.org/licenses/agpl-3.0)
|
||||
[](https://github.com/librekeys/picoforge/issues)
|
||||
[](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.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
|
||||
+2
-2
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user