Bundle HTML/CSS/JS into an Android WebView app
Project description
🍬 Bonboneka (bomk)
Bundle your HTML, CSS, and JS into a native Android WebView app — with a single command.
[!WARNING] B0MK CORE 3.0 is released You may see warnings during builds if using StatiX. To suppress them, add
<div class="ignorewarnings"></div>anywhere in your HTML.
Why?
Converting a website into an Android app is genuinely painful. Bonboneka makes it a one-liner. No Android Studio, no boilerplate — just your web files and one command.
Features
- Automatic inlining — External CSS and JS are merged into a single self-contained HTML file
- Asset encoding — Images are automatically converted to Base64 data URIs
- Multi-bundle support — Define multiple entry points using either naming convention
- PWA mode — Wrap any PWA URL into an installable Android APK via Capacitor
Requirements
| Requirement | Notes |
|---|---|
| Python 3.10+ | |
| Git | Required for template cloning |
| Android SDK | Required for APK compilation |
| Java JDK | Required for Gradle |
Installation
Recommended — install from PyPI:
pip install bonboneka
Alternative — install from source:
pip install -e .
Usage
bomk create <path/to/folder> [options]
| Option | Description |
|---|---|
-s, /s |
Silent mode — suppress all output |
--verbose, /verbose |
Verbose mode — show detailed build logs |
-o <dir> |
Output directory for the generated APK |
--icon <path> |
Custom launcher icon (PNG / JPG / WebP) |
--name <name> |
Override the app name shown on the launcher |
--config <path> |
Path to a .bombundlefig file (Flow protocol) |
--nobuild |
Skip APK build — output the prepared template instead |
Naming Protocols
Bonboneka supports two protocols for declaring which files belong together.
StatiX
The original protocol. Group membership is declared in the filename using a _$N tag.
my_app/
├── index_$1.html ← Entry point (Group 1)
├── styles_$1.css
├── script_$1.js
├── start_$2.html ← Secondary page (Group 2)
├── styleofstart_$2.css
└── backend_$2.js
bomk create ./my_app
Flow (new in 2.0)
The modern protocol. Files have plain names. Group membership is declared in a .bombundlefig config file, and the entry-point HTML identifies itself with a <div class="id1"></div> marker.
my_app/
├── index.html ← Entry point (Group 1) — contains <div class="id1">
├── styles.css
├── script.js
├── start.html ← Secondary page (Group 2) — contains <div class="id2">
├── styleofstart.css
├── backend.js
└── .bombundlefig
.bombundlefig:
{
"groups": {
"1": ["index.html", "styles.css", "script.js"],
"2": ["start.html", "styleofstart.css", "backend.js"]
}
}
bomk create ./my_app
# or, if the config is stored elsewhere:
bomk create ./my_app --config ./path/to/.bombundlefig
Note: Group
1is always treated as the app's primary entry point, regardless of protocol.
PWA Mode
Wrap any PWA URL into an installable Android APK using Capacitor.
⚠️
--encasedmode has been removed as of version 2.0.
bomk create --pwa <url>
bomk create --pwa https://example.com --name "My App" --package com.example.app
PWA mode uses Capacitor, not B0MK Core. Requires Node.js 14+ and the Capacitor CLI.
bomk doctor
Validate a Bonboneka project and diagnose common issues. Note: Doctor has not been ported to the Flow protocol yet and only supports StatiX projects. I(not we,I am an single person working on this) am trying to port it asap.
bomk doctor <path/to/project>
Checks for:
- Missing or misnamed files
- Incorrect protocol usage
- Missing entry-point markers (
_$1or<div class="id1">)
Gitlink (beta)
Link your template to a GitHub repository and configure auto-commit behaviour.
bomk gitlink <template> --set <url> # Set remote origin
bomk gitlink <template> --behaviour commit-per-build # Auto-commit on every build
bomk gitlink <template> --behaviour manual-commit # Commit manually
bomk gitlink <template> --commit # Commit pending changes
bomk gitlink <template> --push # Push to remote
bomk gitlink <template> --disengage # Reset to default origin
⚠️ Gitlink is in beta and has not undergone rigorous testing.
[NEW] B0`MK Core 3.0
Introducing the new-and-improved B0MK Core 3.0, now with Flow protocol support, improved error handling, and a shiny new codebase. It still keeps suport for StatiX, but Flow is the future.
Why am I so exited? Because Flow is a much more robust and intuitive protocol that decouples file grouping from naming conventions, making it easier to manage complex projects and avoid naming conflicts. Plus, the new codebase is cleaner and more maintainable, which means faster development and fewer bugs in the long run.
Images:
B0MK-CORE 3.0 no entry point error screen.(its animated)
Configuration
Edit bomk/config.py to customise the build environment:
# Android project scaffold repository
TEMPLATE_REPO = "https://github.com/YourUser/Example-Android-WV-App.git"
# Relative paths within the template
ASSETS_REL_PATH = "app/src/main/assets"
MAIN_JAVA_REL_PATH = "app/src/main/java/exampleWV/app/Main.java"
Version
2.0 "Choco-Milk-Sugar Goodness" — Flow protocol, PWA mode, --name, --config, Gitlink beta.
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 bonboneka-0.2.0.tar.gz.
File metadata
- Download URL: bonboneka-0.2.0.tar.gz
- Upload date:
- Size: 26.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3f35f79deac179860ada23d9c5d2b6659d2211f1765f1bdbf66e4e72afc869c
|
|
| MD5 |
6e9fd76a1861b6f3dbe197e2c9f6e9ef
|
|
| BLAKE2b-256 |
93219c5d76bc149d8b8b9d8a76e690671bf09a950acf8cbb765c411cb23e7c02
|
File details
Details for the file bonboneka-0.2.0-py3-none-any.whl.
File metadata
- Download URL: bonboneka-0.2.0-py3-none-any.whl
- Upload date:
- Size: 27.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6717adb7eb2fb076f97cf86895c63c0982ad92aa065a0d60ac6a9ee66ba9f861
|
|
| MD5 |
47d356519f8a71ec2f7afb197a27bde3
|
|
| BLAKE2b-256 |
0043d47b9aa1db7160ebc702fae8715864a6c89e42d91f2602eea0a9ae15ede5
|