Skip to content

Releases

GhostIDE v3.10.0 — the Craft Cycle release

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 03 Nov 04:03

GhostIDE v3.10.0 — the Craft Cycle release

versionCode 215 · Nov 2, 2026 · arm64 · min SDK 24 / target SDK 36

This release closes 20x20 Campaign Cycle 8 (Craft) and is the first GitHub Release since v2.40.0. Everything between is summarized below; the complete per-version record is in BUILD_NOTES.md, and the user-facing changelog in CHANGELOG.md.

Since v2.40: the ecosystem era

  • 29 Ghost tools bundled (generation e13) and executed for real against the workspace: GhostSlice, GhostMCP, GhostApprove, GhostIndex, GhostReview, GhostScope, GhostRE, GhostHandoff, QuoteShot, and 20 more.
  • MCP client with persistent sessions, resources and prompts; agent MCP calls ride the same approval rails as shell commands.
  • The Approve queue: agent commands and deletes queue for a hash-bound human decision.
  • The agent toolbelt: VERIFY, TEST, GIT (read-only), ECO, REVERSE (GhostRE), CONTEXT and batched read-only actions, with GhostRecall priming and GhostHandoff packs between sessions.

Campaign Cycles 1–8 (v2.47 → v3.10)

Twenty improvements + twenty adversarial audits per cycle, audits included because they keep catching real defects in the cycles' own new code:

  • Agentic (Cycle 6) — the agent cannot declare DONE over broken staged code: staged files are syntax-checked, failures feed bounded self-repair rounds, applied changes verify on disk. Pause, task queue, scratchpad memory, read-only EXPLORE sub-runs, loop detection.
  • Flow (Cycle 7) — git branches and stash complete, search gains ignore-case/regex with dry-run replace counts, sessions restore cursor positions.
  • Craft (Cycle 8) — live syntax diagnostics in the gutter as you type; code folding completed (the machinery behind the long-standing buttons was never wired — now it is, in both panes); git tags and amend finish the git panel; the test panel runs a single test by name and re-runs only failures, with skipped tests never counting as passes.
  • Earlier cycles: atomic writes on both servers, persistent MCP sessions, header redaction, a caught silently-frozen interface (Cycle 5), and the data-pack panel fixed before it ever reached a phone (Cycle 3).

Verification

  • Harness suite: 137/137 (tools/harness/run-all.mjs in the ghost-ide repo)
  • Ecosystem bundle gate: 2,871 tool tests, all 29 packages green
  • DOM-stub bundle gate passed; signing certificate verified live on the shipped APK
  • GitHub Actions CI is fully green (frontend harnesses, JVM tests, Java compile against API 36, live-server probes)

The APK

As with previous releases, the APK binary is distributed directly by the developer rather than attached here (the release automation cannot upload assets). Verify any copy against:

  • Size: 20,480,618 bytes
  • MD5: bddba2384bdb440cc9ae960615041e86
  • SHA-256: bfeaff290485b16989996ede55670c77e38e1e5c3fbb73ab7f906409a21af6dc
  • Signer: SHA-256 8ea8684a3476785530435c4d7289383977766702d6c2fe1baede7fad7bec8bea (same preserved key as every build; installs as an in-place update)

Stated plainly

  • GhostIDE is not on the Play Store yet; the store launch has its own gates (see store/LISTING.md).
  • Features are proven in layers: the Java server compiles and is pin-tested for every route, the desktop edition proves behavior live against fixtures, and the stacked on-device pass for Cycles 3–8 rides this build. BUILD_NOTES.md states, per feature, which layer proved it.

GhostIDE v2.40.0 - visual refresh, take two

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 23:27

GhostIDE v2.40.0 (versionCode 145) - visual refresh, take two

APK: ghostide-v2.40.0.apk, 20,329,066 B
MD5: 0312fa97606d5a0723ccf6165f8890fb
SHA-256: 92f92e0e12880f5f46b1848c7aead9d51679b7dd072c93b9e7b72941c8877532
compileSdk/targetSdk 36, minSdk 24, same signing key as v2.39.0.
(APK asset not attached: the automation credential is scoped to api.github.com and uploads.github.com returns 401, same as prior releases. The APK itself is delivered to the owner directly.)

v2.39's stylesheet refresh verified as delivered but read as "nothing looks different" on the phone - its deltas were desktop-weighted and deliberately restrained. This release makes the change through the editor's own theme system, where it cannot be subtle:

  • A Ghost editor theme (CodeMirror EditorView.theme + HighlightStyle, placed after oneDark in both the main and split editors, so it wins by the framework's own precedence): editor and gutters on near-black #0d0e13 instead of oneDark's lighter blue-gray, quiet line numbers, neutral current-line tint, violet cursor and selection.
  • A violet-forward syntax palette: keywords #bb9af7, functions #7aa2f7, strings #9ece6a, types and numbers #e0af68, operators and attributes #7ee0d2, properties #8ab8ff.
  • Phone-visible surfaces: the header gradient now applies at all widths, the chat sheet lifts one surface step above the editor, and the sheet grip takes the accent color.

Gates (foreground): theme harness 4/4, build clean, DOM-stub bundle evaluation clean (the theme extensions construct), 66/66 harness files. Staged app.js and style.css byte-match the sources.

GhostIDE v2.39.0 - visual refresh

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 21:02

GhostIDE v2.39.0 (versionCode 144) - visual refresh

APK: ghostide-v2.39.0.apk, 20,324,971 B
MD5: 68c349c213d5966ed7f29e42d144e741
SHA-256: 9d24f30aa284183093942ffa83e9cdf92ba2bae55ae51dbde18a4b49d81f95f8
compileSdk/targetSdk 36, minSdk 24, same signing key as v2.38.0.
(APK asset not attached: the automation credential is scoped to api.github.com and uploads.github.com returns 401, same as prior releases. The APK itself is delivered to the owner directly.)

A CSS-only refresh of the web UI - no layout, selector, or behavior changes:

  • One token palette: the flat grays are now violet-tinted neutrals defined once in :root (deep background #0d0e13, panels, raised surfaces, hairline borders, three ink tiers), with 149 hard-coded hex literals remapped onto them. The accent system is untouched; accent-derived surfaces (active file row, active tab underline, model-up pill, bottom view bar) now derive from the chosen accent instead of hard-coded greens and blues.
  • Depth: the desktop header card gains a subtle vertical gradient; floating panels and menus gain a top sheen and deeper, softer shadows; primary buttons carry a faint accent glow; button hovers transition.
  • The stock oneDark editor is blended into the app: editor and gutters share the app background, gutter text quiets down, and the current-line tint goes neutral, so the editor no longer sits in a blue-gray box inside a neutral app.
  • New basics: visible keyboard focus (accent outline via :focus-visible, accent border on focused inputs), accent-tinted text selection, and slim theme-matched scrollbars.

Gates (foreground): build clean, DOM-stub clean, 65/65 harness files. Staged style.css and app.js byte-match the sources. (Before/after screenshots were attempted and are not claimed: the sandbox's headless Chromium cannot settle this app page. The pre-refresh stylesheet is preserved for a one-file revert.)

GhostIDE v2.38.0 - LAN TLS phase 1

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 19:53

GhostIDE v2.38.0 (versionCode 143) - LAN TLS phase 1

APK: ghostide-v2.38.0.apk, 20,324,970 B
MD5: 857ddc0053f3ef41da7e89316a7efb27
SHA-256: 7218b14298c01eb246ca74e0ff8357d7393e51ded42cbc420bf01f69e968a9cc
compileSdk/targetSdk 36, minSdk 24, same signing key as v2.37.0.
(APK asset not attached: the automation credential is scoped to api.github.com and uploads.github.com returns 401, same as prior releases. The APK itself is delivered to the owner directly.)

Phase 1 of the pair-mode encryption design (all six design decisions approved by the owner on Oct 22, 2026): LAN pairing on the desktop host is now encrypted.

What changed (desktop server.py; the phone remains a guest):

  • In LAN mode the host runs dual listeners: the host's own UI stays on loopback plain HTTP and never sees a certificate warning; guests are served HTTPS on each LAN address with a persistent self-signed certificate (SANs: localhost plus the machine's private IPs; 10-year validity; stored in ~/.ghostide/tls with the key owner-only).
  • The certificate's SHA-256 fingerprint is the host identity: it is printed in the server console at boot, shown in the pair panel, and served loopback-only at GET /api/pair/certfp. Guests compare it with the host screen before typing the pairing code. The code remains the secret; the fingerprint is public. The cert is regenerated only when the host's addresses outgrow it, and the console announces a changed fingerprint.
  • Certificate generation prefers the cryptography package, falls back to the openssl CLI, and reports a crypto-path failure instead of silently degrading. If neither route exists, LAN mode still starts in plain HTTP with a loud console warning (an explicit design decision).
  • PAIRING.md now documents the new trust model with its honest limits: encryption defeats passive observers and token replay; a browser guest who skips the fingerprint comparison can still be impersonated at first pairing. Android app-guest QR pinning is phase 2; host-confirm joins are phase 3.

Proof: new probe suite tools/probes/tls_probes.py passes 16/16 (generation, key permissions, fingerprint integrity, HTTPS join and API, certfp gating 401/403, wrong-cert refusal, persistence across restarts, plain-HTTP fallback with warning); both generation routes were live-tested. Full gates (foreground): 65/65 harness files, DOM-stub clean, JVM 18+14+6+14+25, probes hardening 19 / restore 41 / pair 36 / GH e2e 19 / TLS 16. Staged app.js byte-matches the built bundle.

GhostIDE v2.37.0 - autosave untangle

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 18:02

GhostIDE v2.37.0 (versionCode 142) - autosave untangle

APK: ghostide-v2.37.0.apk, 20,324,971 B
MD5: 89cacba5b35278a37369d1d452bbc295
SHA-256: 437904a809cf1162502087eab5a19f7520e02d90131660719f3c087795324afb
compileSdk/targetSdk 36, minSdk 24, same signing key as v2.36.0.
(APK asset not attached: the automation credential is scoped to api.github.com and uploads.github.com returns 401, same as prior releases. The APK itself is delivered to the owner directly.)

This release fixes the pre-existing defect flagged in the v2.36.0 sweep notes. Two autosave features had shared one settings key and one Settings element id since their separate feature rounds: the editor select (autosave as a mode, "off" | "delay", saving 2 s after typing stops) and a later checkbox feature with its own poller. Both elements carried id="setAutosave", so scripts only ever reached the select: the checkbox feature's binding overwrote the select's change handler with one storing a checkbox value (undefined on a select, silently erasing the setting), the checkbox itself was unreachable dead UI, and the defaults object declared the key twice (boolean winning). In practice the Settings autosave control could not be set at all.

The untangle keeps the mode select as the one autosave: duplicate default removed (the build's duplicate-key warning is gone), zombie checkbox element removed, the second binding and poller removed. A pure autosaveMode() normalizes the value at load and at every save, so a boolean left in stored settings by the old wiring migrates to the mode it meant (true -> "delay", false -> "off").

Gates on this tree (foreground): 65/65 harness files with the autosave harness rewritten for the untangled state (6/6), DOM-stub clean, JVM 18+14+6+14+25, probes hardening 19 / restore 41 / pair 36 / GH e2e 19. Staged app.js byte-matches the built bundle; the staged Settings page carries exactly one setAutosave element.

GhostIDE v2.36.0 - batch 3 final: hardening rounds R3-R5

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 17:45

Batch 3 final release: v2.36.0 (versionCode 141)

APK: ghostide-v2.36.0.apk, 20,324,971 B
MD5: 9fdcddacaf4e8edcc5d3ff7062ddf8f7
SHA-256: 8022d3445f8b346269ad1d5de9769aaf78799179d1908987043c7e30e012c567
compileSdk/targetSdk 36, minSdk 24, same signing key as v2.31.0.
(APK asset not attached: the automation credential is scoped to api.github.com and uploads.github.com returns 401, same as v2.11.0/v2.31.0. The APK itself is delivered to the owner directly.)

Batch 3 closed the five-scout audit (pairing, backup/restore, Java HTTP, frontend injection, TLS design), shipped across v2.34.0 (R3, in the shared Beat Cline release), v2.35.0 and this release:

  • Pair tokens expire 12 h after issue on both servers, with a loopback-only host revoke-all and a pair-panel action; the join limiter race is closed.
  • Restore is journal-protected: a process kill mid-apply is rolled back at startup from a write-ahead journal in .ghostide-restore.
  • Backup and restore count what they actually stream (directory entries included), duplicates are refused during the scan, free-space prechecks refuse up front when the disk cannot hold the result, and envelope fields are validated before the password KDF runs.
  • HTTP parsing hardening on both servers: duplicate or non-numeric Content-Length and any Transfer-Encoding are hard refusals, truncated bodies are never routed, bare-LF header blocks parse, reads time out at 30 s, and the phone server caps concurrent connections at 32.
  • Markdown preview stored-XSS closed: attribute values are quote-escaped at interpolation, link schemes are allowlisted (other schemes render as inert text), and both update-check URL uses require http(s).

Final gates on this tree (foreground): 65/65 harness files including the new markdown harness 12/12, DOM-stub clean, JVM BkTest 18 / ZgTest 14 / PcTest 6 / PhTest 14 / RsTest 25, probes hardening 19 / restore 41 / pair 36 / GH e2e 19, python eco E1 ALL PASS.

Still open by design: TLS for LAN pairing (design draft awaiting the owner's decisions), independent second-machine build reproduction, remaining IdeServer splits. Java socket-level behavior is compile- and parity-proven; on-device confirmation rides the next device pass.

GhostIDE v2.31.0 - Hardening marathon 2

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 06:10

Hardening marathon 2: twenty rounds (v2.12.0-v2.31.0) answering the second external audit. See BUILD_NOTES.md in this repo and HARDENING_PLAN.md + PAIRING.md in the ghost-ide repo.

What this round changed

  • Pairing: join rate limiting (5 wrong codes / 10 min per source), guest roles (host-set view-only policy for new tokens; viewers read + heartbeat only), pair panel status/unpair/policy controls
  • Containment: PathCheck component-aware checks at the workspace safe-path and all three archive extractions (eco, Python runtime, git templates); control-char path refusal
  • Backups: inspect endpoint (validate without applying) + restore preview UI, envelope provenance (createdBy, appVersion), symlink-entry and truncated-archive probes
  • Structure: PairHub and BackupService split out of IdeServer (after GitSupport); IdeServer.VERSION single source for health/update/backup meta
  • Release integrity: changelog dates real again (tooling fix + 12 entries corrected), per-version commit messages restored, CI probe-log artifacts on failure, About panel shows live build evidence

Artifact

  • ghostide-v2.31.0.apk, versionCode 136, 20,312,683 bytes
  • MD5 b71084fe1e85662fc377892864e8154e
  • SHA-256 18ce8204afed4a3ccd0af2a68f065a99a218448f0fc87e1b324288dc15d8774c
  • Signer: the studio debug keystore (same certificate as every sideload build; the production upload key is separate and never in this repo)
  • The APK binary is distributed through the studio's direct file link (see the device pass); the automation credential cannot attach assets (uploads.github.com is outside its scope), so verify any copy against the SHA-256 above.

Evidence (sandbox/JVM/CI class; device proof is the owner's pass, DEVICE_PASS_V231): 63/63 frontend harness files, JVM BkTest 15/15 + ZgTest 14/14 + PcTest 6/6, probes hardening 14/14 + restore 25/25 + pair 27/27 + GH-connect e2e 19/19, eco E1 ALL PASS, DOM-stub boot gate clean, staged bundle byte-match. Known open items, stated plainly: LAN pairing traffic is unencrypted (PAIRING.md), a process kill mid-restore-apply can leave a partial tree, and the stacked device pass for v1.58-v2.31 is still the owner's.

Update, Oct 22, 2026: the stacked device pass is done. Ryan installed this exact APK (SHA-256 above) and reported the consolidated DEVICE_PASS_V231 checklist working in full: "Everything works." Device proof is no longer outstanding for v2.31.0. The LAN-encryption and mid-restore-kill items above remain open as stated.

GhostIDE v2.11.0 - Hardening round 2

Choose a tag to compare

@littlestjames82-sys littlestjames82-sys released this 22 Oct 02:54

Hardening round 2 (audit response, part 2). See BUILDING.md and BUILD_NOTES.md in this repo, and PAIRING.md + HARDENING_PLAN in the ghost-ide repo.

What is in this build

  • API 36 target (compileSdk / targetSdkVersion 36, minSdk 24), from v2.10.0
  • Backup format v2 (AES-256-GCM) with a bounded v1 reader, from v2.09.0
  • Staged backup restore: ZipGuard validation (entry cleaning, 20k entry / 200 MB per-entry / 512 MB total caps, duplicate rejection), staging, then apply with rollback, so a hostile or damaged backup changes nothing
  • Pair mode trust: per-boot 6-digit pairing code; non-loopback API callers need a token from a code join; the code is loopback-only
  • Bundled-git code split into GitSupport (process execution stays single-sourced)
  • Reproducible build: BUILDING.md + assemble_inputs.sh; the clean-root build's 139 non-signature APK entries are byte-identical to the maintainer build

Artifact

  • ghostide-v2.11.0.apk, versionCode 116, 20,304,487 bytes
  • MD5 03f95ed5aab3975e75f1605f0f262755
  • SHA-256 269a3ea205147237deff76a638da9109b2ffb2607052bf9e9d3462750b2a4c90
  • Signer: the studio debug keystore (same certificate as every sideload build since v1.0; the production upload key is separate and never in this repo)

Evidence: 57 frontend harnesses, JVM BkTest 13/13 + ZgTest 14/14, GitHub-connect e2e 19/19, hardening probes 11/11, restore probes 15/15, pair probes 10/10, DOM-stub boot gate clean, eco E1 ALL PASS. Device proof for the v1.58-v2.11 feature stack remains the owner's pass (DEVICE_PASS checklist in the ghost-ide goal files).

Note on the asset: the APK binary is not attached to this release because the automation credential used for this repo is scoped to api.github.com and GitHub serves release-asset uploads from uploads.github.com (401). The build is distributed through the studio's direct file link; verify any copy against the SHA-256 above. The tag and tree here are the exact source of that build (reproducible per BUILDING.md).