Make a PCOC

Making a PCOC means creating a self-issued identifier on your own device: your laptop, your phone, or an app you build. Its pair is the admission gate, the side that checks one. The making costs memory and time.

I want one

Who
Anyone with a Linux laptop or an Android phone
Use
The desktop app (Linux) or groundinglab's build of Primal (Android)
Get it
Apps, with copy-paste install steps

I build an app

Who
Developers of apps whose users bring a PCOC
SDK
The PCOC SDK, in Rust, C, Go, and Java. The desktop app runs on the Rust SDK.
Start
Set up the SDK, below

What making one takes

I want one: four steps

  1. 1. Get an appApps: Linux desktop or Android.
  2. 2. Start making itStart it and leave it running until it finishes.
  3. 3. Check itDrop it on Verify to see what a service would measure.
  4. 4. Use itSign in to this site through its admission gate.

Step by step, with a video each: the desktop guide and the phone guide.

I build an app: set up the SDK

Paste each step into a terminal, in order, or hand this page to your coding agent. Pick a language. Each one ends by checking a known test PCOC, so you know the SDK is set up right before you write any code.

OS
Debian 13 or Ubuntu 24.04, in a terminal. Ubuntu 24.04 should behave the same; it was not tested.
You need
Rust 1.99.0 (the version the repository pins), git, curl and a C compiler
Time
About 5 minutes

Expected lines checked against the release tags on 24 Oct 2026. This page was not run as a build on that date.

1. Install the system packages

sudo apt update
sudo apt install -y build-essential git curl

2. Install Rust with rustup

The second line loads Rust into this terminal.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.99.0
. "$HOME/.cargo/env"

3. Check Rust

rustc --version

Expected output

rustc 1.99.0 (b940084d7 2026-09-28)

4. Get the code

git clone https://github.com/groundinglab/pcoc.git
cd pcoc

5. Run the quickstart

The quickstart compiles the SDK before it runs, which takes about a minute. It checks a known test PCOC from the specification's conformance vectors, offline.

git checkout sdk-rust-v2.3.1
cd sdk/rust
cargo run -p pcoc-cli --release --quiet -- quickstart

Expected output

pcoc 2.3.1 (rust) spec-2.3.0 pack 91ded57e5c05b7cb: pin match
kernel scalar, sha256 sha-ni
O1-S1 object sha256 800ad07a87a567c835f539617b61ccddc96a0a984425675a5ece971162dfd246
O1-S1 six_leg match, checkpoints match, waypoints match
negatives 13 non-match
PROD leg 0 legs_le_hex 88a04ac5beacb8a7

6. Check the result

The four quickstarts print the same lines apart from the language name on the first line. The second line is the SHA-256 backend on the machine. This example is reference system 3.

Next: make a real one from your app

A real PCOC takes at least 18 Bitcoin blocks, typically around three hours or more, but it varies, and it reads live Bitcoin data while it runs. The producer guide covers the key, the live inputs and how to hand the finished PCOC to your user: Integrate a producer. Reference for each language: SDKs.

Inside the apps

Both apps are demonstrations of the SDK, not separate products. What they do on your device is what the SDK does inside any app that integrates it: make the PCOC, anchor its points, and hand you the finished PCOC to present. The phone build is a pre-release, side-load-only build, signed with a debug key, that you can rebuild from its tag.