OpenCode AI e9899d2e6d
Some checks failed
Android CI Build / check (push) Has been cancelled
Android CI Build / package-apks (push) Has been cancelled
Docs Deploy / build (push) Has been cancelled
Module Market Check / Validate modules/ (push) Has been cancelled
Module Market Publish / Generate submissions.json (push) Has been cancelled
Docs Deploy / deploy (push) Has been cancelled
Initial DruksCode V2: fresh fork of web-to-app (f3b488e) with DruksCode identity
- Package rename com.webtoapp -> br.com.drukstech.codeapp
- Product rename WebToApp/web-to-app -> DruksCode/drukscode
- Design system Wta* -> Dkc*
- applicationId br.com.drukstech.codeapp (.play for gplay flavor)
- rootProject.name DruksCode
- Fresh git history (upstream kept as remote for sync)
2026-09-12 02:42:02 +02:00

7.5 KiB

FAQ

Practical questions, organized by topic. For full detail, follow the links.

Basics

Is DruksCode free?

Yes. DruksCode is open source under The Unlicense.

What Android version do I need?

Android 6.0 (API 23) or newer.

Do I need a PC to build apps?

No. The entire build — binary patching, signing, and AAB export — happens on-device. A PC is only needed if you want to build DruksCode itself from source.

How is this different from a URL-wrapper app?

A URL wrapper just opens a website in a WebView. DruksCode additionally runs real server runtimes on-device (Node.js, PHP, Python, Go, WordPress via fork+exec), ships a hardened network stack (DoH, TLS fingerprint, ECH), patches and signs APKs at the binary level, and supports modules/userscripts/MV3 extensions — all without a PC or remote build server.

What app types can I create?

Twelve: Web, Multi-Web, HTML, Offline Pack, Frontend, PHP, WordPress, Node.js, Python, Go, Media, and Gallery. See Create App.

Creating & editing

What's the difference between Edit Core Config and Edit Common Config?

  • Edit Core Config — the type-specific source/runtime settings (different for each app type). See Edit Core Config.
  • Edit Common Config — the shared options every app has (appearance, networking, privacy, extensions, export). See Edit Common Config.

Web apps have a single combined Edit entry instead of the two.

What's the difference between preview and export?

Preview runs the host path (everything on the builder's classpath). Export builds a standalone APK that runs the shell runtime, reading your config from an embedded app_config.json. See Getting Started.

Building & export

What are the build modes (FULL / CONTENT_OVERLAY / REUSE_UNSIGNED)?

Rebuilds are incremental and content-addressed:

  • FULL — rebuild from the template (always used for encrypted builds).
  • CONTENT_OVERLAY — only app content changed.
  • REUSE_UNSIGNED — re-sign a previously built unsigned APK.

See Build APK.

What's the difference between APK and AAB export?

Build APK produces an installable, signed APK. AAB export (from Google Play) produces a Play-ready bundle and rewrites targetSdk to the Play-required level. See APK Export Config.

Why do generated apps target SDK 28?

The low targetSdk is deliberate: it lets generated apps fork+exec native runtimes (Node.js, PHP, Python, Go, WordPress) from app storage. The AAB exporter separately rewrites targetSdk for Play distribution.

How do I sign with my own key?

Create or import a keystore (PKCS12/PFX/JKS/BKS) and choose the signature schemes (V1/V2/V3) in APK Export Config.

Where are build outputs stored?

In the File Manager — APK builds, AAB exports, app clones, and build logs.

Runtimes

Why does my Node/PHP/Python/Go app download something on first use?

The runtime binaries aren't bundled into the base app to keep it small; they're downloaded once on first use and cached. Manage them in Runtime Management and the Linux Environment.

My Node.js app fails with a loadNode / loadJniBridge error. Why?

The exported APK must embed libnode_bridge.so, libnode.so (16KB-aligned), and libc++_shared.so. A missing native library causes this failure. See the Node.js export requirements.

How are ports managed? What if there's a conflict?

Runtime apps allocate ports through the Port Manager with a conflict policy: REASSIGN (pick another port), AUTO_KILL (stop the conflicting service), or ALERT (notify).

Why does my runtime app need a DNS bridge?

The packed native binaries (musl-based) can't always reach the system DNS resolver, so a local DNS bridge proxy provides DNS resolution and outbound HTTP. This is wired automatically.

Features & config

How do I make my app fullscreen or hide the status bar?

Use Fullscreen Mode — it controls immersive mode and whether the status/navigation bars stay visible.

How does ad blocking work in exported apps?

The host ad blocker serves preview, and the compiled rule set ships inside the exported APK. Configure rules/subscriptions per app under Ad Blocking; manage lists in Hosts Ad Blocking.

How do I use a custom DNS or DNS-over-HTTPS?

See Custom DNS — choose a DoH provider (Cloudflare, Google, AdGuard, NextDNS, CleanBrowsing, Quad9, Mullvad) or a custom endpoint.

Extensions

What's the difference between modules, userscripts, and MV3 extensions?

  • JS/CSS modules — DruksCode's native format with a config UI and panel. See JS Modules.
  • Userscripts — Tampermonkey/Greasemonkey-style .user.js with GM_* APIs. See Userscripts.
  • MV3 extensions — Chrome Manifest V3 extensions with chrome.* APIs. See Chrome MV3.

Are userscript GM_* functions gated by @grant?

No. @grant declarations are parsed and listed in GM_info, but all GM_* functions are exposed unconditionally. Declare grants anyway for portability with real Tampermonkey/Greasemonkey. See the API Reference.

Do MV3 extensions run in a truly isolated world?

No. Android WebView has a single JavaScript context; ISOLATED and MAIN worlds are simulated (each extension overwrites globalThis.chrome). See Chrome MV3.

How do I publish a module to the market?

Add a folder under modules/, update registry.json, and open a pull request. See Publish to the Market.

Troubleshooting

A feature works in preview but not after export. Why?

Usually a config field did not flow through the export chain (model → ApkConfig JSON → shell config → runtime). See Config Field Drift for the diagnosis checklist.

My build failed. Where do I look?

The build dialog shows a diagnostic report (failure stage, cause, and the build-log tail) that you can copy. Build logs are also viewable in the File Manager.

My exported app can't reach the network. What should I check?

Check the app's Custom DNS and proxy settings under Advanced Settings. For runtime apps, the local DNS bridge handles resolution automatically.

Data & help

How do I back up or migrate my apps?

Use Data backup / restore in About, or export individual apps as reusable templates via Export.

Where do I get help?