Skip to main content

appliku

PyPI version License: MIT Python 3.10+

Python CLI and SDK for the Appliku platform.

This package gives you:

  • a CLI for common Appliku workflows
  • a Python SDK for scripting and integrations

Install uv

This project uses uv for local development and is easiest to use with uv for both the CLI and SDK examples below.

macOS and Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

After installation, restart your shell or verify:

uv --version

Install appliku

For CLI usage, install the package as a tool:

uv tool install appliku

Then verify:

appliku --help

For SDK usage inside a Python project:

uv add appliku

If you prefer pip, this also works:

pip install appliku

Claude Code Skill

If you use Claude Code, install the Appliku skill to give the agent full knowledge of every CLI command, SDK method, and common workflow — automatically loaded in every session:

npx skills add appliku/skill -g -a claude-code

Source: github.com/appliku/skill

Authentication

The CLI supports two login methods:

  1. Browser-based device flow:
appliku login
  1. Direct token login:
appliku login --token YOUR_API_TOKEN

Useful auth commands:

appliku whoami
appliku logout

The SDK resolves credentials in this order:

  1. Appliku(token="...")
  2. APPLIKU_TOKEN environment variable
  3. ~/.config/appliku/config.toml

Example environment variable setup:

export APPLIKU_TOKEN=YOUR_API_TOKEN

CLI Quick Start

List your teams:

appliku teams list

Inspect one team:

appliku teams get my-team

List applications in a team:

appliku apps list --team my-team

Show the latest deployment for an app:

appliku deployments latest --team my-team --app 42

List domains for an app:

appliku domains list --team my-team --app 42

List datastores for an app:

appliku datastores list --team my-team --app 42

Every list-style command also supports JSON output:

appliku apps list --team my-team --output json

CLI Command Reference

teams

Manage your Appliku teams.

appliku teams list
appliku teams get my-team

apps

Manage applications and fetch logs.

# List apps in a team
appliku apps list --team my-team

# Fetch logs — one command for any deployment mode, one or more processes.
# With no --process it returns logs for all of the app's processes.
appliku apps logs --team my-team --app 42
appliku apps logs --team my-team --app 42 --process web --process celery --tail 200

# `apps service-logs` is deprecated — use `apps logs -p <service>` instead.

# Fetch nginx access logs for a domain
appliku apps nginx-logs --team my-team --app 42 --domain example.com --tail 100

# Fetch load balancer logs for a domain
appliku apps load-balancer-logs --team my-team --app 42 --domain example.com --tail 100

deployments

Inspect deployments and their logs.

# List deployments for an app
appliku deployments list --team my-team --app 42

# Show the latest deployment
appliku deployments latest --team my-team --app 42

# Fetch logs for a specific deployment
appliku deployments logs --team my-team --id 1234

domains

Manage custom domains.

appliku domains list   --team my-team --app 42
appliku domains create --team my-team --app 42 --domain example.com
appliku domains delete --team my-team --app 42 --id 7
appliku domains check-dns --team my-team --app 42 --domain example.com

datastores

Manage attached datastores (databases, caches, etc.).

appliku datastores list    --team my-team --app 42
appliku datastores start   --team my-team --app 42 --id 5
appliku datastores stop    --team my-team --app 42 --id 5
appliku datastores restart --team my-team --app 42 --id 5
appliku datastores delete  --team my-team --app 42 --id 5

volumes

Manage persistent volumes.

appliku volumes list   --team my-team --app 42
appliku volumes delete --team my-team --app 42 --id 3

crons

Manage cron jobs.

appliku crons list   --team my-team --app 42
appliku crons delete --team my-team --app 42 --id 8

clusters

Manage Docker Swarm clusters.

appliku clusters list   --team my-team
appliku clusters delete --team my-team --id 2

servers

Inspect servers.

appliku servers list --team my-team
appliku servers get  --team my-team --id 10

invites

Manage team invitations.

appliku invites list   --team my-team
appliku invites delete --team my-team --id 4

migrations

Manage and inspect database migrations.

appliku migrations list --team my-team
appliku migrations logs --team my-team --id 99

SDK Quick Start

Create a client using a saved token or APPLIKU_TOKEN:

from appliku import Appliku

client = Appliku()

Or pass the token explicitly:

from appliku import Appliku

client = Appliku(token="YOUR_API_TOKEN")

List teams:

from appliku import Appliku

client = Appliku()

for team in client.teams.list():
    print(team.team_path, team.plan)

Get one team and list its apps:

from appliku import Appliku

client = Appliku()
team = client.teams.get("my-team")
apps = client.apps.list("my-team")

print(team.name)
for app in apps:
    print(app.id, app.name, app.last_deployment_status)

Get the latest deployment and fetch its logs:

from appliku import Appliku

client = Appliku()
latest = client.deployments.latest("my-team", 42)
logs = client.deployments.logs("my-team", latest.id)

print(latest.status)
for entry in logs:
    print(entry.log)

Work with domains and datastores:

from appliku import Appliku

client = Appliku()

domains = client.domains.list("my-team", 42)
datastores = client.datastores.list("my-team", 42)

print([d.domain for d in domains])
print([db.name for db in datastores])

SDK Reference

All resources are accessed as properties on the Appliku instance.

apps

client.apps.list("my-team")
client.apps.get("my-team", app_id=42)
client.apps.create("my-team", name="my-app", branch="main")
client.apps.update("my-team", app_id=42, branch="develop")
client.apps.delete("my-team", app_id=42)
client.apps.deploy("my-team", app_id=42)

# Config vars
vars = client.apps.get_config_vars("my-team", app_id=42)
client.apps.set_config_vars("my-team", app_id=42, vars={"DEBUG": "false"})

# Logs — get_logs takes a list of processes (None = all), works on any mode.
logs = client.apps.get_logs("my-team", app_id=42, processes=["web", "celery"], tail=100)
print(logs)

# get_service_logs is a deprecated shim that delegates to get_logs.
logs = client.apps.get_service_logs("my-team", app_id=42, service="web", tail=100)

# Nginx / load balancer logs
logs = client.apps.get_nginx_logs("my-team", app_id=42, domain="example.com", tail=100)
logs = client.apps.get_load_balancer_logs("my-team", app_id=42, domain="example.com", tail=100)

deployments

client.deployments.list("my-team", app_id=42)
client.deployments.get("my-team", app_id=42, deployment_id=1234)
client.deployments.latest("my-team", app_id=42)
client.deployments.logs("my-team", deployment_id=1234)

domains

client.domains.list("my-team", app_id=42)
client.domains.get("my-team", app_id=42, domain_id=7)
client.domains.create("my-team", app_id=42, domain="example.com")
client.domains.delete("my-team", app_id=42, domain_id=7)

result = client.domains.check_dns("my-team", app_id=42, domain="example.com")
print(result.status)

datastores

client.datastores.list("my-team", app_id=42)
client.datastores.get("my-team", app_id=42, datastore_id=5)
client.datastores.create("my-team", app_id=42, name="mydb", kind="postgresql")
client.datastores.delete("my-team", app_id=42, datastore_id=5)
client.datastores.start("my-team", app_id=42, datastore_id=5)
client.datastores.stop("my-team", app_id=42, datastore_id=5)
client.datastores.restart("my-team", app_id=42, datastore_id=5)

volumes

client.volumes.list("my-team", app_id=42)
client.volumes.get("my-team", app_id=42, volume_id=3)
client.volumes.create("my-team", app_id=42, name="uploads", mount_path="/app/uploads")
client.volumes.update("my-team", app_id=42, volume_id=3, mount_path="/app/media")
client.volumes.delete("my-team", app_id=42, volume_id=3)

cron_jobs

client.cron_jobs.list("my-team", app_id=42)
client.cron_jobs.create("my-team", app_id=42, schedule="0 * * * *", command="python manage.py clearsessions")
client.cron_jobs.update("my-team", app_id=42, cron_id=8, schedule="30 2 * * *")
client.cron_jobs.delete("my-team", app_id=42, cron_id=8)

clusters

client.clusters.list("my-team")
client.clusters.get("my-team", cluster_id=2)
client.clusters.create("my-team", name="prod-cluster")
client.clusters.delete("my-team", cluster_id=2)

servers

client.servers.list("my-team")
client.servers.get("my-team", server_id=10)

invites

client.invites.list("my-team")
client.invites.create("my-team", email="colleague@example.com")
client.invites.delete("my-team", invite_id=4)

migrations

client.migrations.list("my-team")
client.migrations.run("my-team", app_id=42, command="python manage.py migrate")
client.migrations.logs("my-team", migration_id=99)

Error Handling

The SDK raises typed exceptions:

from appliku import Appliku, AuthenticationError, NotFoundError

client = Appliku()

try:
    client.teams.get("missing-team")
except AuthenticationError:
    print("Invalid or missing token")
except NotFoundError as exc:
    print(exc)

Main exception types:

  • AplikuError
  • AuthenticationError
  • AuthorizationError
  • NotFoundError
  • ValidationError
  • RateLimitError
  • ServerError

Development

Create or sync the local environment:

uv sync

Run tests:

UV_CACHE_DIR=/tmp/uv-cache uv run pytest

Run the CLI from the repo:

UV_CACHE_DIR=/tmp/uv-cache uv run appliku --help

Regenerate models and generated client code from the OpenAPI schema:

./scripts/codegen.sh

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

appliku-0.3.0.tar.gz (244.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

appliku-0.3.0-py3-none-any.whl (635.9 kB view details)

Uploaded Python 3

File details

Details for the file appliku-0.3.0.tar.gz.

File metadata

  • Download URL: appliku-0.3.0.tar.gz
  • Upload date:
  • Size: 244.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appliku-0.3.0.tar.gz
Algorithm Hash digest
SHA256 363bb3279dda79a94f40d6bfc1afd83a3bf0f93084475afebe3844c6ef840580
MD5 572800420db04b3f289b1b9d4bae6a5b
BLAKE2b-256 fd0893a3298ca57e47a2081131f8c2aaf5d769a0391b6c07336ffd65e634ea1b

See more details on using hashes here.

File details

Details for the file appliku-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: appliku-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 635.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for appliku-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b8139164e88d5a3088c31d1162cac9d192ad1d670cfb4e83d437879d3abf33d
MD5 ab235d57686bba3391f06d13a2829ff6
BLAKE2b-256 027ff172737d53e64c180a9ebd11ca7c169e023c89fef033a5cdc64917709f6f

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

This release

0.3.0 This release

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page