{"id":51177158,"url":"https://github.com/tyron12233/codeassist","last_synced_at":"2026-07-10T12:00:40.301Z","repository":{"id":37480996,"uuid":"396764087","full_name":"tyron12233/CodeAssist","owner":"tyron12233","description":"Experimental IDE for building Android applicatons on Android.","archived":false,"fork":false,"pushed_at":"2026-07-07T01:09:34.000Z","size":769856,"stargazers_count":1414,"open_issues_count":141,"forks_count":356,"subscribers_count":63,"default_branch":"main","last_synced_at":"2026-07-07T02:14:12.855Z","etag":null,"topics":["collaborate"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tyron12233.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-08-16T11:30:27.000Z","updated_at":"2026-07-07T01:54:37.000Z","dependencies_parsed_at":"2022-07-12T16:19:05.199Z","dependency_job_id":"c3b059ed-f7b9-49c4-a7a5-e6bfa1327522","html_url":"https://github.com/tyron12233/CodeAssist","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/tyron12233/CodeAssist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyron12233%2FCodeAssist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyron12233%2FCodeAssist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyron12233%2FCodeAssist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyron12233%2FCodeAssist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tyron12233","download_url":"https://codeload.github.com/tyron12233/CodeAssist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tyron12233%2FCodeAssist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35330738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaborate"],"created_at":"2026-06-27T05:00:19.519Z","updated_at":"2026-07-10T12:00:40.280Z","avatar_url":"https://github.com/tyron12233.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# CodeAssist\n\n**A lightweight, on-device IDE that edits *and builds* Android \u0026 Java projects — no laptop, no Gradle daemon.**\n\n[![CI](https://img.shields.io/github/actions/workflow/status/tyron12233/CodeAssist/ci.yml?branch=main\u0026label=CI\u0026logo=githubactions\u0026logoColor=white)](https://github.com/tyron12233/CodeAssist/actions)\n[![Tests](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/tyron12233/CodeAssist/main/.github/badges/tests.json)](https://github.com/tyron12233/CodeAssist/actions)\n[![Benchmarks](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/tyron12233/CodeAssist/main/.github/badges/benchmarks.json)](#benchmarks)\n[![Release](https://img.shields.io/github/v/release/tyron12233/CodeAssist?display_name=tag\u0026logo=github\u0026sort=semver)](https://github.com/tyron12233/CodeAssist/releases)\n[![License](https://img.shields.io/github/license/tyron12233/CodeAssist)](LICENSE)\n[![Stars](https://img.shields.io/github/stars/tyron12233/CodeAssist?style=flat\u0026logo=github)](https://github.com/tyron12233/CodeAssist/stargazers)\n[![Forks](https://img.shields.io/github/forks/tyron12233/CodeAssist?style=flat\u0026logo=github)](https://github.com/tyron12233/CodeAssist/network/members)\n[![Discord](https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/y2gycT6pDW)\n\n\u003cimg src=\"docs/assets/01-ide-on-phone.png\" alt=\"CodeAssist running on a phone\" width=\"320\" /\u003e\n\n\u003c/div\u003e\n\n## What is CodeAssist?\n\nCodeAssist is an extensible IDE framework that runs **entirely on device** (Android/ART) and edits and\nbuilds Android/Java projects **without hosting Gradle**. A full Gradle runtime is too heavy for a phone,\nso CodeAssist models projects itself, mimics Gradle's incremental task engine without the Gradle daemon,\nand drives the Android toolchain (aapt2, D8/R8, apksigner) directly.\n\nIt is designed to be **lightweight**:\n\n- **No Gradle daemon.** Projects are a declarative model compiled into an incremental task DAG with\n  fingerprint up-to-date checks and a persistent cache — Gradle's good ideas, none of its weight.\n- **Flat-memory indexing.** Library/SDK symbol indices are disk-backed immutable segments queried in\n  place through a bounded block cache, so heap stays flat regardless of index size.\n- **Fast, incremental everything.** Editing one file re-runs only the affected build tasks; completion\n  and analysis reuse a cached compilation environment instead of rebuilding it per keystroke.\n- **On-device toolchain.** Pure-Java tools (Eclipse JDT/ecj, D8/R8, apksigner) run in process; native\n  aapt2 is invoked as a subprocess.\n\nIt ships with a Compose Multiplatform UI and both desktop and Android launchers.\n\n### Highlights\n\n- ☕ **Java code intelligence** — error-tolerant parsing, ranked completion, diagnostics, and quick-fixes\n  powered by Eclipse JDT.\n- 🟪 **Kotlin completion (beta)** — full Kotlin code completion on device, tuned to the same ranked\n  experience as Java. [How it works →](docs/kotlin-completion.md)\n- 🧩 **Block editing** — project any Java file into a Scratch-style block tree and edit it there; changes\n  write back to the source byte-for-byte. [How it works →](docs/block-editing.md)\n- 📐 **Android XML assist** — tag, attribute, and resource completion for layouts/manifests with live\n  validation.\n- 📦 **Real APK builds on device** — resolve, compile, dex, package, sign, and install — no laptop.\n- 🔌 **Extensible everywhere** — module types, build systems, language backends, analyzers, quick-fixes,\n  and more all plug in through extension points.\n\n## Screenshots\n\n|  |  |\n|---|---|\n| \u003cimg src=\"docs/assets/01-ide-on-phone.png\" width=\"380\" alt=\"A real IDE on your phone\" /\u003e | \u003cimg src=\"docs/assets/02-java-completion.png\" width=\"380\" alt=\"Java completion\" /\u003e |\n| **A real IDE, on your phone** — write, navigate, and build end to end. | **Completion that knows your code** — precise, ranked JDT suggestions with signatures and docs. |\n| \u003cimg src=\"docs/assets/06-kotlin-completion.png\" width=\"380\" alt=\"Kotlin completion\" /\u003e | \u003cimg src=\"docs/assets/03-block-editing.png\" width=\"380\" alt=\"Block editing\" /\u003e |\n| **Kotlin completion (beta)** — the same calm, ranked experience as Java. | **Edit as code, or as blocks** — a live projection of the same source, byte-for-byte. |\n| \u003cimg src=\"docs/assets/04-build-apk.png\" width=\"380\" alt=\"Build APKs on device\" /\u003e | \u003cimg src=\"docs/assets/05-command-palette.png\" width=\"380\" alt=\"Command palette\" /\u003e |\n| **Build real APKs, on device** — resolve, compile, dex, package, sign, install. | **Jump anywhere, instantly** — one input for commands, files, and symbols. |\n| \u003cimg src=\"docs/assets/07-xml-completion.png\" width=\"380\" alt=\"Android XML completion\" /\u003e | \u003cimg src=\"docs/assets/08-compose.png\" width=\"380\" alt=\"Built on Jetpack Compose\" /\u003e |\n| **Layouts, fully assisted** — Android XML completion with live validation. | **Built on Jetpack Compose** — a native Compose UI throughout. |\n\n## Block editor\n\nAny Java file can be projected into interlocking, typed blocks — and edited there. The block tree is a\n**live projection of the same DOM the code editor uses**, so the two views never drift; a block edit\ncompiles to the smallest possible source edit, leaving every untouched line and comment intact.\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"docs/assets/block-editor.png\" width=\"280\" alt=\"Structured block projection\" /\u003e\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003cimg src=\"docs/assets/block-editor-puzzle.png\" width=\"280\" alt=\"Scratch-style puzzle blocks\" /\u003e\n\u003c/div\u003e\n\nTyped value sockets (Scratch-style shapes for boolean/number/string/type), inline completion inside\nsockets, palette search, and drag-and-drop all map back to the same surgical projection pipeline.\n[Read how the projection and edit round-trip work →](docs/block-editing.md)\n\n## Benchmarks\n\nCodeAssist tracks completion quality, editor latency, indexing, and build performance against committed\nbaselines (a `regressionTest` suite that fails CI on a quality regression). The numbers below regenerate\non each release.\n\n\u003c!-- AUTOGEN:benchmarks:START --\u003e\n| Area | Metric | Result |\n|---|---|---|\n| Java completion **quality** | recall / top-1 / MRR | **100%** / 75% / 0.88 |\n| Java completion **latency** (per keystroke) | member access / type ref | **4.3 ms** / 2.8 ms |\n| Symbol **index** quality | recall / top-1 / MRR | **100%** / 90% / 0.95 |\n| Symbol **index** query | prefix / fuzzy | ~4.4 µs / ~56 ns |\n\u003c!-- AUTOGEN:benchmarks:END --\u003e\n\n**What the metrics mean**\n\n- **recall** — fraction of cases where the expected completion appears in the list at all.\n- **top-1 / top-5** — fraction where the expected item is ranked first / within the first five.\n- **MRR** (mean reciprocal rank) — average of `1 / rank` of the expected item; `1.0` means it is always\n  first.\n- **latency** — wall-clock time to compute completion at a keystroke (recorded on the maintainer's\n  machine, so treat as indicative; quality metrics are deterministic across machines).\n- **incremental tasks** — how many build tasks re-run after a single-file edit; fewer means more precise\n  incrementality.\n\n## Tests\n\n\u003c!-- AUTOGEN:tests:START --\u003e\n**1837** tests passing across **297** suites · 0 failing · 1 skipped (framework / `CI_CORE_ONLY`).\n\u003c!-- AUTOGEN:tests:END --\u003e\n\nThe badges and the numbers in this section are regenerated automatically on each release (see\n[`.github/workflows/update-readme.yml`](.github/workflows/update-readme.yml)).\n\n## Documentation\n\n| Doc | What's in it |\n|---|---|\n| [docs/architecture.md](docs/architecture.md) | Project model, the two graphs, build abstraction, concurrency model. |\n| [docs/modules.md](docs/modules.md) | The module map and responsibilities. |\n| [docs/extension-points.md](docs/extension-points.md) | Extension points and the language-backend SPI. |\n| [docs/language-support.md](docs/language-support.md) | DOM, completion, the language backends, indexing, analysis, block editing. |\n| [docs/kotlin-completion.md](docs/kotlin-completion.md) | How on-device Kotlin completion works. |\n| [docs/block-editing.md](docs/block-editing.md) | How the projectional (block) editor works. |\n| [docs/build-system.md](docs/build-system.md) | The task engine, the native pipelines, Gradle compat. |\n\n## Module layout\n\nDependencies point downward only (acyclic). Platform modules carry no domain knowledge; domain behavior\nis contributed through extension points.\n\n```\nplatform-core            no domain knowledge; depended on by all\n  └─ vfs-api\n       └─ project-model-api\n            ├─ build-api\n            └─ language-api\ndeps-api / index-api / analysis-api / block-api  → the layers above\nide-ui (Compose UI) ← ide-core (engine→UI bridge) ← ide-desktop, ide-android\n```\n\nThe full table — every module, its packages, and its responsibility — is in\n[docs/modules.md](docs/modules.md).\n\n## Building\n\nThe build uses the Gradle wrapper and a JDK 17+ (developed against the JetBrains Runtime).\n\n```sh\n# Core framework only (pure JVM; no Android SDK or Compose shells needed)\nCI_CORE_ONLY=true ./gradlew check\n\n# Full build, including the Compose UI and Android launcher (requires the Android SDK)\n./gradlew build\n\n# Run the desktop IDE\n./gradlew :ide-desktop:run\n\n# Assemble the Android launcher\n./gradlew :ide-android:assembleDebug\n```\n\nThe regression suite (completion quality, latency, allocation, and build-at-scale) is opt-in and runs\nvia the `regressionTest` tasks against committed JSON baselines.\n\n## Conventions\n\n- IDs are `@JvmInline value class` wrappers — no stringly-typed APIs.\n- Open-ended classifications (`NodeKind`, `BuildSystemId`, `LanguageId`) are string-backed value classes\n  so plugins can extend them; closed sets (`DependencyScope`, `SymbolKind`) are enums.\n- Long-running entry points are `suspend` and run under the read/write-lock discipline; model and DOM\n  access happens inside read/write actions.\n- Mutation is transactional: stage on a `*Transaction`/`Modifiable*`, then `commit()`.\n- Editor features target the neutral `DomNode`/`Symbol`/`Scope`, never a backend's native types.\n\n## License\n\nCodeAssist is free software licensed under the **GNU General Public License v3.0 or later**\n(`GPL-3.0-or-later`). See [LICENSE](LICENSE).\n\n## Install\n\n- **Google Play** — testing track (signed via Play App Signing).\n- **F-Droid / IzzyOnDroid** — built from this repo, signed with the project's own key. See\n  [docs/fdroid-izzyondroid.md](docs/fdroid-izzyondroid.md). (The IzzyOnDroid and Play builds have\n  different signatures and cannot update across stores.)\n\n## Community\n\nJoin the **[CodeAssist Discord](https://discord.gg/y2gycT6pDW)** to chat, get help, report bugs, and\nshare what you build.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyron12233%2Fcodeassist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftyron12233%2Fcodeassist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyron12233%2Fcodeassist/lists"}