A commissioning tool for pico-fido firmware based hardware keys.
Find a file
Suyog Tandel e1851bf2d7
Merge pull request #73 from librekeys/dev/toggle-button
fix #72 : sidebar toggle button redesign
2026-02-24 21:40:09 +05:30
.cargo fix(ui): inconsistencies in cards 2026-02-08 16:43:09 +05:30
.github chore(docs): Add contribution and issue templates, and contributing guide 2026-02-22 14:27:29 +05:30
.tito Automatic commit of package [picoforge] release [0.4.1-1]. 2026-02-22 17:08:50 +00:00
data chore: update readme screenshots 2026-02-22 18:17:52 +05:30
docs docs: update installation and building wiki with gpui version of the app 2026-02-22 18:50:46 +05:30
maintainers/scripts ci(.github/workflows/nix-update-package.yml): add a workflow to periodically update Nix package 2026-02-18 18:18:05 +08:00
src fix #72 : sidebar toggle button redesign 2026-02-24 15:01:51 +01:00
static chore(packaging): add cargo packager config file 2026-02-18 23:27:52 +05:30
themes chore(ui): change corner radius of default theme 2026-02-22 15:40:00 +05:30
.envrc chore: update shell config for gpui compilation and make configu update async 2026-02-03 21:31:29 +05:30
.gitignore fix(ci/cd): release build workflow cleanup 2026-02-19 01:29:01 +05:30
Cargo.lock chore: bump app version to 0.4.1 2026-02-22 22:30:36 +05:30
Cargo.toml chore: bump app version to 0.4.1 2026-02-22 22:30:36 +05:30
ci.nix ci: let nix build and populate cache 2026-02-11 11:10:57 +08:00
CREDITS.md chore(docs): update readme.md with new build info and credits.md with new deps 2026-02-12 21:49:43 +05:30
default.nix ci: let nix build and populate cache 2026-02-11 11:10:57 +08:00
flake.lock feat(ui): extract dialogs into a custom component 2026-02-21 22:46:22 +05:30
flake.nix chore(ci): add cachix ci info 2026-02-11 23:22:33 +05:30
LICENSE first commit 2026-01-08 18:47:52 +05:30
package.nix picoforge: 0.4.0 -> 0.4.1 2026-02-23 11:37:30 +05:30
Packager.toml fix(ci/cd): release build workflow failing due to result output in wrong dir 2026-02-19 10:52:20 +05:30
picoforge.spec Automatic commit of package [picoforge] release [0.4.1-1]. 2026-02-22 17:08:50 +00:00
README.md chore: update readme screenshots 2026-02-22 18:17:52 +05:30
rustfmt.toml chore: change code formatting, use space for tabs and indents instead of tabs 2026-01-28 17:29:07 +05:30
shell.nix fix #60 2026-02-17 21:15:29 +01:00

PicoForge

PicoForge Logo

An open source commissioning tool for Pico FIDO security keys

License: AGPL-3.0 GitHub issues GitHub Actions Workflow Status Copr build status GitHub stars

Important

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 application.

Check application Installation Wiki for installation guide of the PicoForge app on your system.

About

PicoForge is a modern desktop application for configuring and managing Pico FIDO security keys. Built with Rust and GPUI, it provides an intuitive interface for:

  • 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) (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 and Windows 10 with the official Raspberry Pi Pico2 & ESP32-S3 and, currently supports Pico FIDO firmware version 7.2 only.

Screenshots

Main Interface

PicoForge Main Interface

PassKeys Management

Configuration Options

Configuration Interface

Device Management

Features

  • Device Configuration - Customize USB identifiers, LED behavior, and hardware settings
  • 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 Rust and GPUI
  • Multi-Vendor Support - Compatible with multiple hardware variants
  • Cross-Platform - Works on Windows, macOS, and Linux

Installation

Check the official PicoForge Wiki 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

To contribute to PicoForge, you'll need:

  • Rust - System programming language (1.80+)
  • PC/SC Middleware:
    • Linux: pcscd (usually pre-installed)
    • macOS: Built-in
    • Windows: Built-in

Building from Source

1. Clone the Repository

git clone https://github.com/librekeys/picoforge.git
cd picoforge

2. Build and Run

To run the application in development mode:

cargo run

To build for production:

cargo build --release

The compiled binary will be available in target/release/picoforge (Linux/macOS) or target/release/picoforge.exe (Windows).

Building and Development with Nix

Nix provides developers with a complete and consistent development environment.

You can use Nix to build and develop picoforge painlessly.

1. Install Nix

Follow the Installation Guide and NixOS Wiki to install Nix and enable Flakes.

2. Build & Run

a. with Flakes

You can build and run PicoForge with a single command:

nix run github:librekeys/picoforge

Or simply build it and link to the current directory:

nix build github:librekeys/picoforge

Tip

You can use our binary cache to save build time by allowing Nix to set extra-substitutes.

b. without Flakes

Download the package definition:

curl -LO https://raw.githubusercontent.com/librekeys/picoforge/main/package.nix

Run the following command in the directory containing package.nix:

nix-build -E 'with import <nixpkgs> {}; callPackage ./package.nix { }'

The compiled binary will be available at: result/bin/picoforge

3. Develop

You can enter a developement environement with all the required dependencies.

a. with Flakes

nix develop github:librekeys/picoforge

b. without Flakes

You can use the shell.nix file that is at the root of the repository by running:

nix-shell

Then you can build from source and run the application with:

cargo run

Project Structure

picoforge/
├── Cargo.toml                              # Rust dependencies and project metadata
├── Cargo.lock                              # Rust dependency lock file
├── Packager.toml                           # Configuration for cargo-packager
├── src/                                    # Source code
│   ├── main.rs                             # Application entry point
│   ├── logging.rs                          # Logging infrastructure
│   ├── error.rs                            # Global application error types
│   ├── device/                             # Device communication logic
│   │   ├── fido/                           # FIDO implementation
│   │   ├── rescue/                         # Rescue mode handling
│   │   ├── io.rs                           # IO Utilities
│   │   ├── mod.rs                          # Device module declaration
│   │   └── types.rs                        # Device data types
│   └── ui/                                 # GPUI Frontend
│       ├── components/                     # Reusable UI components
│       ├── views/                          # View definitions
│       ├── assets.rs                       # Asset loader
│       ├── colors.rs                       # Color definitions
│       ├── rootview.rs                     # Root view container
│       ├── types.rs                        # UI-specific types
│       └── mod.rs                          # UI module declaration
├── data/                                   # Application data
│   ├── in.suyogtandel.picoforge.desktop    # Linux desktop entry file
│   └── screenshots/                        # Screenshots for documentation
├── docs/                                   # Project documentation/wiki files
│   ├── Building.md                         # Instructions for building from source
│   ├── Home.md                             # Wiki home page
│   ├── Installation.md                     # Installation guide
│   └── Troubleshooting.md                  # Troubleshooting common issues
├── maintainers/                            # Scripts and resources for package maintainers
│   └── scripts/                            # Utility scripts for automating maintenance tasks
│       ├── update.nix                      # Nix update script configuration
│       └── update.py                       # Update script implementation
├── static/                                 # Static application assets
│   ├── appIcons/                           # App icons in various sizes and formats
│   └── icons/                              # Internal SVG icons used by the GPUI frontend
├── themes/                                 # Application themes
│   └── picoforge-zinc.json                 # Zinc theme configuration file
├── flake.nix                               # Nix flake configuration
├── flake.lock                              # Nix flake lock file
├── default.nix                             # Nix package definition/shell
├── shell.nix                               # Nix development shell
├── picoforge.spec                          # RPM Spec file
├── package.nix                             # Nix package definition
├── ci.nix                                  # CI configuration for cachix
├── rustfmt.toml                            # Rust formatting configuration
├── CREDITS.md                              # Credits
└── LICENSE                                 # License

Contributing

Contributions are welcome (REALLY NEEDED, PLEASE HELP US)!

Please check the CONTRIBUTING.md file for the full contribution process and development guidelines.

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only).

See LICENSE for full details.

Repository Maintainers

Package Maintainers

  • JetCookies (@jetcookies): Maintainer of the Nix package.
  • Suyog Tandel (@lockedmutex): Maintainer of the RPM package and Fedora Copr repository.

Support

Disclaimer

Warning

PicoForge is experimental software and still in the Beta stage! The app does contain bugs and is not secure by any means.

It does not support all the features exposed by the pico-fido firmware and pico-hsm.

Caution

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. These identifiers are included for 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) 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.


Made with ❤️ by the LibreKeys community

Copyright © 2026 Suyog Tandel