---
title: "Sudoku Studio: try a real PHP app"
description: "Enter an App ID and key, use included tools, redeem credits and try shared seats. Run the same app on your computer without editing code."
slug: "/docs/v1/tutorials/php/sudoku"
section: "Practical tutorials"
order: 1101
audience: "all"
level: "beginner"
last_updated: "2026-10-29"
version: "v1"
related: ["/docs/v1/tutorials/php", "/docs/v1/tutorials/python/desktop", "/docs/v1/licensing/credits"]
draft: false
layout: "guide"
---
## Start here: no code changes

[Open Sudoku Studio](/sudoku-studio). This is a separate PHP web app: it does not sign you into the KDPika platform. The [original License Lab](/license-lab) and the [homepage interactive illustration](/#try-licensing) are still available.

{{screenshot:studio-preview.png|Sudoku Studio interface — illustrative preview; use your own license for real online checks.}}

## 1. Bring your software license

Choose **App ID**, **[Live](/docs/v1/start/glossary#live) or Test ([Sandbox](/docs/v1/start/glossary#sandbox))** and **[License key](/docs/v1/start/glossary#license-key) + email** or **License key only**. Enter the software key, then click **Open Sudoku Studio**. These are software license details, not your KDPika account password.

| Field | Where to find it |
|---|---|
| App ID | [Developer](/docs/v1/start/glossary#developer) dashboard → [Products](/docs/v1/start/glossary#product) → your product → App ID |
| Environment | Use the environment in which you issued the key |
| Email | The license [customer](/docs/v1/start/glossary#customer) email; omit it only with Key only selected |
| License key | Your customer’s software key |

Only the [public App ID](/docs/v1/start/glossary#public-app-id), selected environment and optional email are remembered in browser storage. The key is kept encrypted in the private server session. Access is checked online when you open or return to the app.

## 2. Generate and export

Click **Generate puzzle** for a fresh illustrative Sudoku. **Export JPG** works with an active license. **Export PNG** needs the plan [feature](/docs/v1/start/glossary#feature) `png_export`; **Create collection** needs `batch_generation`. The app checks the actual signed result before doing either. Puzzles are demonstrations, not uniqueness-certified Sudoku puzzles.

## 3. Give one plan its own tools

In your developer workspace open **Plans & features**. Create or edit a software plan for this App ID. Add `png_export` and `batch_generation` as feature keys if you want both tools. Issue a license on that plan. Plan edits that apply only to new licenses do not silently change existing licenses: use the explicit existing-license option or a license override.

Dashboard example: Work in test mode

Open: Dashboard header → Environment

Example data only; use your own real dashboard.

Environment: Sandbox

This changes the dashboard view. The application example also explicitly uses SANDBOX; it does not read your browser choice.

For a PHP server select **Web** or **Desktop + Web**. Business lets you restrict this per plan; Starter and Pro allow both app families. The PHP app’s [device](/docs/v1/start/glossary#device) fingerprint describes its server installation, not the visitor’s physical computer.

## 4. Add credits without locking the included tools

The crown at the top shows the real license balance. **Zero credits still opens the app** and leaves included tools available. **Create pack** is a separate paid action. It makes ten SVG puzzle files in a ZIP, using the price configured by the publisher.

In the developer workspace select **Usage credits → Settings**, select this product and environment, then add action key `create_pack`, a clear title and a positive unit price. Turn on usage credits for the software license. Use **Balances** to add units manually with a reason, or create a credit code below. Do not add a second license just to top up an existing one.

### Give a customer a code

Open **Usage credits → Codes**. Select product, environment, units, availability dates and usage limits. A code such as **KDP100CR** is just an example; it will work only after you create it for the relevant product and environment. Customers click the crown in Sudoku Studio, enter the code and choose **Redeem code**. The balance updates on the same license. Limits and expiry are enforced by the server.

### Sell a top-up in your own store

Connect WooCommerce and update the KDPika connector to **0.8.0 or later**. In **Usage credits → Packs**, choose the connected store, product, units and price, then sync. The plugin creates or updates the credit product. The customer chooses a pack from the app or **My Account → Usage credits**, then pays in the store. Only a verified eligible order adds the units, once, to the selected license. Final tax and discounts are shown at checkout. No pack appears until a developer has configured one.

### Recover a delayed operation

A pack job has a saved request reference. If the reply is interrupted, use **Recover unfinished pack**. It reuses that reference, so a completed consume is not charged twice. Keep the original pending code or job until its result is known. Refunds follow the original credit source; spent units can require publisher review.

## 5. Try shared seats and device tools

Click **Access & device tools**. On a floating software plan you can reserve or return a seat and open a second test installation. It is a real [activation](/docs/v1/start/glossary#activation), can use a device slot and is subject to your seat limit. Release the second installation afterwards. **Unlink this device** removes the current activation. Shared seats renew while the page is active; an abandoned session expires according to your plan timeout.

**Try signed offline access** deliberately blocks one app request after a fresh online check. It does not switch off your internet connection. Credit operations require an online check, and the offline policy may refuse access.

## 6. See the real response

Click **View fresh API reply**. The app makes a new request and shows its time, HTTP status and response. The SDK verifies the original signed bytes. Keys, tokens, email and exact signed bytes containing private data are hidden in the viewer; this redaction does not change signature verification.

## Run the PHP app on your own computer

[Download PHP Sudoku Studio 1.0.0](/docs/downloads/kdpika-sudoku-studio-php-1.0.0.zip). Extract it and open a terminal in the extracted folder. You need **64-bit PHP 8.2+ with cURL and sodium**; the **zip** extension is needed for paid puzzle packs. No Composer, platform database or management API key is needed for this example.

```bash
php -S 127.0.0.1:8080 -t public public/index.php
```

Open **http://127.0.0.1:8080/sudoku-studio**, enter the four settings in the form and click Open. Stop the local server with Ctrl+C. On shared hosting point the domain document root to `public/`; keep `storage/`, `sdk/` and `app/` outside the public document root, enable HTTPS and give PHP write access to private storage. The built-in PHP server is for local testing.

## Prefer a desktop application?

[Download Python Sudoku Studio 1.3.0](/docs/downloads/kdpika-sudoku-studio-python-1.3.0.zip) or follow the [Python desktop walkthrough](/docs/v1/tutorials/python/desktop). The desktop app uses PyQt6; its GPL-3.0 license is separate from the MIT SDK license. The previous first-project downloads and [License Lab](/license-lab) remain available.

## If something stops

**Wrong environment:** select the same Test/Live environment as the key. **No free seats:** close another installation or release a stuck session in the customer portal. **No credits:** use included tools or top up the same license. **PNG not included:** the software plan needs `png_export`. **No packs:** the publisher must create and sync packs for this product and environment. **Desktop-only license:** select a software plan that permits Web for this PHP example.
