Slowlane
Slowlane is a Python command-line application for automating selected App Store Connect and Apple Developer Portal workflows. App Store Connect REST and upload commands use API-key authentication; Developer Portal signing commands use an Apple ID session. The CLI also provides structured JSON output and CI environment helpers.
Documentation | Installation | CLI reference | Changelog
Capabilities
| Area | Supported operations |
|---|---|
| Authentication | API keys for App Store Connect; interactive Apple ID sessions for Developer Portal commands |
| Apps and builds | List apps, inspect an app, list builds, and find the latest build |
| TestFlight | List testers and groups, and invite a tester to a group |
| Code signing | List, create, and revoke certificates; list, create, and delete provisioning profiles |
| Uploads | Validate and upload IPA and PKG files with Apple Transporter |
| Automation | JSON output and environment helpers for common CI providers |
Developer Portal commands use Apple's private web-service endpoints and can require updates when Apple changes those services. Upload commands require Apple tooling that is normally available only on macOS.
Requirements
- Python 3.14 or newer
- An App Store Connect API key for REST API and upload workflows
- Chromium for interactive Apple ID login
- Xcode or the Transporter app on macOS for IPA and PKG uploads
Installation
Install the base package for API-key and pre-existing session workflows:
python -m pip install slowlane
Install the interactive-login extra and its Chromium browser:
python -m pip install "slowlane[interactive]"
python -m playwright install chromium
Verify the installation:
slowlane version
Quick start
App Store Connect API key
Create an API key in App Store Connect, then provide its key ID, issuer ID, and private key:
export ASC_KEY_ID="XXXXXXXXXX"
export ASC_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export ASC_PRIVATE_KEY_PATH="/absolute/path/to/AuthKey_XXXXXXXXXX.p8"
slowlane asc apps list
slowlane asc builds list --app APP_RESOURCE_ID
Use ASC_PRIVATE_KEY instead of ASC_PRIVATE_KEY_PATH when the private-key contents are supplied directly by a secret manager.
Interactive Apple ID session
Interactive login is required for Developer Portal signing operations:
slowlane spaceauth login --service developer --email developer@example.com
slowlane spaceauth verify --email developer@example.com
slowlane spaceauth export --email developer@example.com
Store the exported value as the FASTLANE_SESSION secret in CI. Treat it as a credential.
JSON output
The global --json option must precede the command:
slowlane --json asc apps list
Command overview
| Command | Purpose |
|---|---|
slowlane spaceauth login --service developer --email EMAIL |
Open an interactive Apple ID login and store the resulting session |
slowlane spaceauth export --email EMAIL |
Export a stored session for CI |
slowlane spaceauth verify --email EMAIL |
Verify a stored session against Apple services |
slowlane spaceauth doctor |
Inspect local authentication configuration |
slowlane asc apps list |
List apps |
slowlane asc apps get APP_ID_OR_BUNDLE_ID |
Get an app by resource ID or bundle ID |
slowlane asc builds list --app APP_ID |
List builds for an app |
slowlane asc builds latest APP_ID |
Get the latest build for an app |
slowlane asc testflight testers --app APP_ID |
List TestFlight testers |
slowlane asc testflight groups --app APP_ID |
List TestFlight groups |
slowlane asc testflight invite EMAIL --group GROUP_ID |
Invite a tester to a group |
slowlane signing certs list |
List signing certificates |
slowlane signing certs create --type TYPE --csr PATH |
Create a signing certificate from an existing CSR |
slowlane signing certs revoke CERT_ID |
Revoke a signing certificate |
slowlane signing profiles list |
List provisioning profiles |
slowlane signing profiles create --name NAME --type TYPE --bundle-id BUNDLE_ID [--device DEVICE_ID] |
Create a provisioning profile |
slowlane signing profiles delete PROFILE_ID |
Delete a provisioning profile |
slowlane upload ipa PATH |
Validate and upload an IPA |
slowlane upload pkg PATH |
Upload a macOS PKG |
slowlane env print --platform PLATFORM |
Print CI environment configuration |
Run slowlane COMMAND --help for complete options and examples.
Configuration
Slowlane reads TOML configuration from:
- Linux and macOS:
~/.config/slowlane/config.toml, or$XDG_CONFIG_HOME/slowlane/config.toml - Windows:
%APPDATA%\slowlane\config.toml
[auth]
key_id = "XXXXXXXXXX"
issuer_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
private_key_path = "/absolute/path/to/AuthKey_XXXXXXXXXX.p8"
[http]
timeout = 30
max_retries = 3
backoff_factor = 0.5
[output]
format = "text"
verbose = false
[devportal]
team_id = "TEAM_ID"
Environment variables override file-based authentication and output settings:
| Variable | Purpose |
|---|---|
ASC_KEY_ID |
App Store Connect API key ID |
ASC_ISSUER_ID |
App Store Connect issuer ID |
ASC_PRIVATE_KEY |
Private-key contents |
ASC_PRIVATE_KEY_PATH |
Path to a .p8 private-key file |
FASTLANE_SESSION |
Exported Slowlane session data |
SLOWLANE_JSON |
Set to 1 or true for JSON output |
SLOWLANE_VERBOSE |
Set to 1 or true for verbose logging |
See the configuration reference for details.
Security
- Never commit API private keys or exported session values.
- Store credentials in the operating-system keychain or your CI provider's secret store.
- Use narrowly scoped App Store Connect roles and rotate credentials regularly.
- Review the security policy before reporting a vulnerability.
Development
poetry install --all-extras --with docs,release,security
poetry run ruff check src tests
poetry run ruff format --check src tests
poetry run mypy src/slowlane
poetry run pytest
poetry run mkdocs build --strict
See the contribution guide for the contribution workflow.
License
Slowlane is available under the MIT License.
Apple, App Store Connect, TestFlight, Xcode, and Transporter are trademarks of Apple Inc. Slowlane is an independent project and is not affiliated with or endorsed by Apple Inc.
Metadata
Release files for slowlane 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| slowlane-0.3.0.tar.gz | 39.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| slowlane-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.4 kB
Release files / slowlane-0.3.0.tar.gz
| Download URL | slowlane-0.3.0.tar.gz |
|---|---|
| Size | 39.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
636eef6b48270266a6b9636ed971383bd95428327719a71f68eab2733496efbe
|
|
BLAKE2b-256 checksum How to use checksums |
6abb436f24e0585706cbf678720158ef55f4911e2ee2128d910ad31b12158b40
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 2, 2026.
Transparency logRelease files / slowlane-0.3.0-py3-none-any.whl
| Download URL | slowlane-0.3.0-py3-none-any.whl |
|---|---|
| Size | 47.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
443bc968a8724bc5c8a6eaa44635cc23a4834cd6d0228e0b055737ffde38b351
|
|
BLAKE2b-256 checksum How to use checksums |
50fbba00342a040f6f02eb2c7c0672978187c0fa63e8298c4f2f730bbe98c81c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 2, 2026.
Transparency log