Python CLI and SDK for Appliku
Project description
appliku
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:
- Browser-based device flow:
appliku login
- Direct token login:
appliku login --token YOUR_API_TOKEN
Useful auth commands:
appliku whoami
appliku logout
The SDK resolves credentials in this order:
Appliku(token="...")APPLIKU_TOKENenvironment variable~/.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 application-level logs (async, polls until ready)
appliku apps logs --team my-team --app 42 --process web
appliku apps logs --team my-team --app 42 --process web --process celery --tail 200
# Fetch service logs directly
appliku apps service-logs --team my-team --app 42 --service web --tail 100
# 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"})
# Application-level logs (async fetch)
logs = client.apps.get_logs("my-team", app_id=42, process="web", tail=100)
print(logs)
# Service logs (direct fetch)
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:
AplikuErrorAuthenticationErrorAuthorizationErrorNotFoundErrorValidationErrorRateLimitErrorServerError
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file appliku-0.2.3.tar.gz.
File metadata
- Download URL: appliku-0.2.3.tar.gz
- Upload date:
- Size: 201.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"42","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55e9d0d7fe9db70e06d594905c9b17b57900d9114666bc01666aabeda901f99b
|
|
| MD5 |
cee12250a1594ed6365fd2d5fff4f807
|
|
| BLAKE2b-256 |
ff88820f2b4a68f1fa5f69355c13b831d10d004d34cf84d1db9626c75190bcc3
|
File details
Details for the file appliku-0.2.3-py3-none-any.whl.
File metadata
- Download URL: appliku-0.2.3-py3-none-any.whl
- Upload date:
- Size: 492.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"42","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58ffcc02a0510fc4b315d3adbca0ba03638f2f015657177f4b9127c1f560efa4
|
|
| MD5 |
9d52155ab9df0c10fd6bad2ee5bea7e5
|
|
| BLAKE2b-256 |
8814eca16b3dab7bc24c54c75696822089fca4e3b174182d2e2a44c588adbf8c
|