Skip to main content

mkit

tests licence: MIT

One command-line tool for everything around an Android app that is not writing it: build and install on a device, release to Google Play, keep the store listing, screenshots, data safety and in-app products in your repo, read installs, vitals, crashes and reviews, check search rank, and drive the Firebase side (Firestore rules, Remote Config, an in-app update document).

Flutter and native Kotlin apps, including apps with a Wear OS module.

mkit deploy          # bump, build, upload to Play, publish, notify, push
mkit run -p          # build and install on the phone
mkit status          # what every track holds right now
mkit crashes         # what is breaking in production

A release is one command. mkit deploy bumps the version, commits it, builds the bundle, uploads it with its mapping file and release notes, stages it on a track, writes the update document, sends a message, and pushes — and if anything fails before Play accepts the build, the version bump undoes itself so the repo never claims a release that did not happen.

Why it exists

Shipping an Android app means a dozen small jobs that live in different places: a Gradle command, the Play Console, the Firebase console, a screenshot folder somebody renamed, a changelog nobody updated. Each is easy; together they are a release day. mkit puts them behind one tool, with the app's settings in one file, so the same release happens the same way every time — and so an AI agent can run the safe parts without being handed your Play Console password.

It was built to ship a small studio's apps and has been doing that for a while. It is opinionated where opinions save time and configurable where apps really differ.

Install

Requires Python 3.11 or newer. uv is the easiest way in, and installs mkit as a command of its own rather than into a project:

uv tool install mkit-cli
mkit --version

With pipx: pipx install mkit-cli. With pip: pip install mkit-cli.

The latest from main, between releases: uv tool install git+https://github.com/almasumdev/mkit-cli

mkit self status says whether a newer release is out, and mkit self update gives the upgrade command for whichever of these installed it.

Getting started

In an app's folder:

mkit init            # writes mkit.toml, asking what it cannot work out
mkit doctor          # what is configured, what is missing, and what to add

mkit.toml is the whole of an app's configuration:

[app]
name    = "My App"
kind    = "flutter"          # flutter | android | android-wear
package = "com.example.app"

[play]                       # switches Play features on

[store]                      # store listing, art and data safety in the repo
listing_dir = "store/listing"

Credentials never live in that file. A Google Play service account goes in .env (per app) or ~/.mkit/.env (shared); mkit doctor names the exact key when one is missing, and never prints a secret. Every setting is documented in docs/config.md.

What it does

Develop run, devices, logs, emu, studio, gradle, version, bump
Release deploy, status, promote, rollout, share
Store listing, whatsnew, datasafety, testers, art
Money products, prices
Insight stats, vitals, crashes, reviews, aso
Firebase rules, config, remoteconfig, firebase

Every command, flag and example: docs/commands.md, generated from the code so it cannot describe a flag that does not exist.

Commands are classed by what they can change — read, plan, write, publish — and anything in the publish class refuses to run without an explicit confirmation naming the package.

Some things have no API and must be done in the Play Console. mkit manual lists them, so you know what is left rather than discovering it at release time.

Working with AI agents

mkit answers in JSON whenever it is not attached to a terminal, with one envelope on stdout and a documented exit code per outcome, so an agent can branch on a result instead of reading prose. AGENTS.md is the contract: which commands are safe to run unasked, which need a human to say so, and what an agent must never do.

Documentation

docs/commands.md every command and flag
docs/config.md mkit.toml, the store and keyword files, credentials
docs/store.md the store/ folder: what lives where, in every language
docs/store-art.md screenshots and the feature graphic, built from real captures
docs/in-app-update.md how an app should check for updates: Play first, your policy second
docs/news-topics.md news and offer notifications over FCM topics
AGENTS.md the agent contract
CONTRIBUTING.md changing mkit, tests, versioning
SECURITY.md what counts as a security bug here, and how to report it

Status and scope

Developed on Windows against real apps on Google Play; the code paths for macOS and Linux exist but are less travelled, and there is no CI yet. The test suite runs against a fake Play service — nothing in the tests touches a real account.

It does not: create an app in the Play Console, answer content rating or target audience questionnaires, manage tester email lists (the API only takes Google Groups), or publish for you when managed publishing is on. mkit manual is the full list.

Issues and pull requests are welcome. If you use it for your own apps, I would like to hear what broke.

Licence

MIT. See LICENSE.

Metadata

Release files for mkit-cli 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mkit-cli 0.3.1
File Size Uploaded Provenance
mkit_cli-0.3.1.tar.gz 244.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mkit-cli 0.3.1
File Interpreter ABI Platform
mkit_cli-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 401.1 kB

Release files / mkit_cli-0.3.1.tar.gz

Download URL mkit_cli-0.3.1.tar.gz
Size 244.4 kB
Tags Source
SHA-256 checksum
How to use checksums
bfb312b3d3c675f0a3cef3e9602c1c33fb4744ee30939de672783016804f69dd
BLAKE2b-256 checksum
How to use checksums
582c97986ac4d23e523d6e27735caf6ffb7d4956c10e478d833efeeb98e5f1b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 22, 2026.

Transparency log

Release files / mkit_cli-0.3.1-py3-none-any.whl

Download URL mkit_cli-0.3.1-py3-none-any.whl
Size 156.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7530ff0116db63bca81e5fe1d23d6e5581677f21eb82ed8f35929489b05228a3
BLAKE2b-256 checksum
How to use checksums
2d4b55e9fafe6556a418d55845e3de17b1a178db9f28c2413baea50b65e4b3a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 22, 2026.

Transparency log

Security for mkit-cli 0.3.1

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for mkit_cli-0.3.1.tar.gz

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 Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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