Repository navigation
Android support — track #32
Copy link
Copy link
Closed
Labels
Description
Tracking issue for Android support, the third platform alongside iOS and macOS.
Backing library
Sora-Editor by Rosemoe. The only viable native Android source-editor library — actively maintained (~87 commits / 90 days), TextMate and Tree-sitter highlighting (richer than STTextView), real production use inside AndroidIDE. The Android ecosystem is a near-monoculture here; alternatives are all regex-only, stale, or hobby-grade.
Known risks (proceeding eyes-open)
- License: LGPL-2.1. Consumed dynamically as a Gradle
implementationAAR (no source modification, no static linking) it's compatible with permissive downstream apps. README must document the inheritance. - Bus factor ≈ 1. Single maintainer (1,954 commits vs feat(macos): add macOS platform target to Expo Module #2 at 240).
- Perpetual 0.x. Every release marked prerelease; expect ~yearly breaking changes (e.g. 0.23→0.24 made
Spanan interface). - NDK/JNI via oniguruma for TextMate regex → multi-ABI APK size impact.
Sub-tasks
Each becomes a separate PR. The tracking issue stays open until the last one lands.
- Fabric skeleton + MVP — wipe the legacy Expo-module stub in
android/. Bare-RN Fabric component setup (Gradle, manifest, codegen wiring, ReactPackage). MVP props: `text`, `editable`, `onChangeText`, `onSelectionChange`, focus/blur ref. Sora-Editor embedded but no highlighting / theming yet. Goal: render an editable Sora editor in an example app and round-trip text changes. - Android example app — `example/android-app/` (bare RN, mirrors `example/macos-app/` shape). Workflow scripts: `android:install`, `android:start`, `android:run`, `android:dev`.
- `font` + `contentInsets` + `lineNumbers` — wire to Sora's typeface, padding, line-number gutter APIs.
- `theme` (light/dark/auto) — map to Sora's color schemes.
- `language` (highlighting) — wire to Sora's TextMate language registry. Match the existing iOS/macOS language set: plaintext, markdown, json, javascript, typescript, html.
- CI — extend `.github/workflows/ci.yml` to build Android.
- Docs — README platform table, `docs/installation.md` Android section, `docs/examples.md` Android row, CHANGELOG entry. Document LGPL-2.1 inheritance from Sora-Editor.
Out of scope here
Code folding, autocomplete, find/replace — these are post-parity work, separate issues if filed.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
feat(android): Fabric library scaffold + MVP (closes #33, refs #32) (#34
fix(android): swap dark_modern (JSONC) → darcula (strict JSON)
refactor(example): share preview helpers, mirror iOS UI on Android
feat(android): TextMate syntax highlighting (closes #35, refs #32) (#36)
feat(android): font, contentInsets, lineNumbers props (closes #37, refs
feat(android): font, contentInsets, lineNumbers props (closes #37, refs
docs: Android shipping across README + docs/* + CHANGELOG (closes #43) (
LeslieOA commentedon May 29, 2026
All sub-tasks landed on
develop:languageprop — TextMate syntax highlighting #35 — TextMate syntax highlighting (feat(android): TextMate syntax highlighting (closes #35, refs #32) #36)font,contentInsets,lineNumbersprops #37 — font / contentInsets / lineNumbers (feat(android): font, contentInsets, lineNumbers (closes #37, refs #32) #38)themeprop (light / dark / auto) #39 — theme prop (feat(android): theme prop — light / dark / auto (closes #39, refs #32) #40)Android now has functional parity with iOS / macOS across the full prop + event + command surface. Two documented behavioural differences remain (HTML nested-grammar highlighting depth; theme color sourcing) — captured in docs/usage.md, not blockers.
LeslieOA commentedon May 29, 2026
Reopening — closed prematurely during a stacked-PR recovery. Only #34/#36/#38 are actually on
develop; theme (#40), CI (#42), and docs (#44→wrong base) still need to land.feat(android): theme prop — light / dark / auto (closes #39, refs #32)
feat(android): theme prop — light / dark / auto (closes #39, refs #32) (
ci: android + macos build jobs, fix iOS paths (closes #41, refs #32) (#…
LeslieOA commentedon May 29, 2026
All sub-tasks landed on
develop:languageprop — TextMate syntax highlighting #35 — TextMate syntax highlighting (feat(android): TextMate syntax highlighting (closes #35, refs #32) #36)font,contentInsets,lineNumbersprops #37 — font / contentInsets / lineNumbers (feat(android): font, contentInsets, lineNumbers (closes #37, refs #32) #38)themeprop (light / dark / auto) #39 — theme prop (feat(android): theme prop — light / dark / auto (closes #39, refs #32) #40)Android now has functional parity with iOS / macOS across the full prop + event + command surface. Two documented behavioural differences (HTML nested-grammar depth; theme colour sourcing) are captured in docs/usage.md.