Metadata-Version: 2.4
Name: pylocket
Version: 1.1.20
Summary: Protect, license, and sell Python apps: source encryption, license keys, and signed delivery
Author-email: PyLocket <support@pylocket.com>
License: PyLocket Proprietary License
        
        Copyright (c) 2026 PyLocket. All rights reserved.
        
        Permission is hereby granted to any person who obtains a copy of this
        software (the "Software") to use the Software solely for the purpose of
        interacting with the PyLocket platform (https://pylocket.com) and its
        associated services.
        
        The following restrictions apply:
        
        1. REDISTRIBUTION: You may not redistribute, sublicense, or sell copies
           of the Software without prior written permission from PyLocket.
        
        2. MODIFICATION: You may not modify, reverse engineer, decompile, or
           disassemble the Software.
        
        3. COMMERCIAL USE: The Software may only be used in connection with a
           valid PyLocket account. Use of the Software does not grant any rights
           to the PyLocket platform beyond those provided by your account plan.
        
        4. NO WARRANTY: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
           ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
           WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
           NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
           BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY.
        
        For licensing inquiries, contact: support@pylocket.com
        
Project-URL: Homepage, https://pylocket.com
Project-URL: Documentation, https://docs.pylocket.com
Project-URL: Developer Portal, https://portal.pylocket.com
Keywords: python,obfuscation,code-protection,source-protection,encryption,encrypt-python,license,license-key,licensing,drm,anti-piracy,anti-reverse-engineering,pyinstaller,software-protection,code-signing,sourcedefender-alternative,pyarmor-alternative
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Security
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: System :: Software Distribution
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.1.0
Requires-Dist: rich>=13.7.0
Requires-Dist: httpx>=0.27.0
Dynamic: license-file

# PyLocket

**Protect, license, and sell your Python apps, without ever shipping your source or your keys.**

[![PyPI version](https://img.shields.io/pypi/v/pylocket.svg)](https://pypi.org/project/pylocket/)
[![Python versions](https://img.shields.io/pypi/pyversions/pylocket.svg)](https://pypi.org/project/pylocket/)
[![License: Proprietary](https://img.shields.io/badge/license-Proprietary-blue.svg)](https://pylocket.com)
[![Downloads](https://static.pepy.tech/badge/pylocket)](https://pepy.tech/project/pylocket)

PyLocket is the developer platform for shipping commercial Python desktop apps. It wraps your build in strong anti-reverse-engineering protection, issues and enforces per-device license keys, and delivers signed, ready-to-run downloads to your customers. No source rewrites. No percentage fees.

Protect a build in three lines:

```bash
pip install pylocket
pylocket login --sso
pylocket protect --app <APP_ID> --artifact dist/myapp.exe --out ./protected/
```

---

## Why PyLocket

Most "protection" tools encrypt your `.py` files and decrypt them back to your original source at import time. That means the key ships inside your app, and the original code is recoverable. Public one-click decryptors exist for that entire category.

PyLocket is built differently.

### 1. Unrecoverable by design

Your code is encrypted at the function level, and the keys are issued to each licensed device at activation. They are never embedded in your app. Decrypted code runs inside a hardened native runtime and is never written back to disk as source. There is no one-click PyLocket decryptor, and architecturally there cannot be one.

### 2. A platform, not a file utility

Protection is step one. PyLocket also gives you license keys with per-device activation limits and revocation, and branded one-time download links from the CLI, plus free-trial links, one-click push updates to your users, and hosted checkout in the Developer Portal. One platform replaces your obfuscator, your license server, and your storefront.

### 3. Trusted, not flagged

Every PyLocket developer is identity-verified, and every build is code-signed (Windows Authenticode, macOS notarization, Linux GPG) and malware-scanned. Anonymous encryptors are exactly what malware authors abuse, which is why antivirus engines flag them. PyLocket apps carry a real identity and a real signature, so your users see trusted, not quarantined.

> PyLocket does not claim to be unbreakable. Nothing is. The goal is to make reverse-engineering economically impractical: months of expert effort, not an afternoon.

---

## Licensing and distribution

`pylocket` is a full license and delivery client, not just an obfuscator:

- List, revoke, and reset license keys (`pylocket licenses ...`)
- Issue license keys (`pylocket licenses create`) — each license records the per-license fee on your next invoice, so the command confirms first; `--yes` skips the prompt in CI. Extending an expiry (`pylocket licenses extend`) requires an active Pro subscription
- Bind each license to a device limit you control
- Generate one-time, branded download links (`pylocket distribute`)
- Replace a protected build with your own code-signed copy while preserving notarization (`pylocket replace-signed`)
- Wire build events into your own systems with webhooks (`pylocket webhook ...`)

---

## Quick start

```bash
# Authenticate via browser (recommended for 2FA and password-manager users)
pylocket login --sso

# Or authenticate with email and password
pylocket login

# List your apps
pylocket apps list

# Protect a build (PyInstaller, cx_Freeze, Briefcase, wheel, .app, and more)
pylocket protect --app <APP_ID> --artifact dist/myapp.exe --out ./protected/

# Check build status
pylocket status --build <BUILD_ID>

# Download the protected artifact
pylocket fetch --build <BUILD_ID> --out ./protected/
```

---

## Commands

| Command | What it does |
|---|---|
| `pylocket login` | Authenticate (`--sso` for browser OAuth2, recommended for 2FA) |
| `pylocket apps` | Manage applications (`list`, `create`, `update`, `delete`) |
| `pylocket protect` | Upload and protect a build (add `--out <DIR>` to download the result) |
| `pylocket status` | Show a build's protection status |
| `pylocket fetch` | Download a completed protected artifact |
| `pylocket replace-signed` | Swap in your own code-signed build (preserves notarization) |
| `pylocket licenses` | Manage licenses (`list`, `create`, `get`, `revoke`, `reset-devices`, `extend`) |
| `pylocket distribute` | Generate a one-time branded download link |
| `pylocket webhook` | Configure build-event webhooks (`set`, `remove`, `test`, `status`) |
| `pylocket auth` | Manage authentication and 2FA settings |

Run `pylocket <command> --help` for full options.

---

## Supported builds

**Packaging:** PyInstaller (onefile and onedir), cx_Freeze, BeeWare Briefcase, Python wheels (`.whl`), raw scripts, ZIP archives, and macOS `.app` bundles.

**Platforms:** Windows x64, Linux x64, Linux arm64, macOS Intel, macOS Apple Silicon.

**Python:** 3.12, 3.13, and 3.14. PyLocket targets modern Python; the hardened runtime requires a current CPython.

---

## PyLocket vs source encryptors

| | Source encryptors (`.pye`) | PyLocket |
|---|---|---|
| Decryption key ships with the app | Yes | No, issued per device at activation |
| Recovers to your original source | Yes | Never |
| Built-in licensing, device binding, revocation | No | Yes |
| Sell, deliver, and push updates | No | Yes |
| Identity-verified devs, code-signed builds | No | Yes |
| Pricing | Per developer seat | Flat, per account, no percentage fees |

See the full comparison at [pylocket.com](https://pylocket.com).

---

## Documentation and support

- Docs: [docs.pylocket.com](https://docs.pylocket.com)
- Developer Portal: [portal.pylocket.com](https://portal.pylocket.com)
- Email: support@pylocket.com
