Kern 0.1.8.1
[0.1.8.1] — 2026-06-13 19:38 IST · First Major Release
This is the first release of Kern designated as a major milestone. Over the past eight days, the project has grown from an empty scaffold into a fully-featured, on-device document editor for Android: six format editors, a native file browser, a compiled PDF engine, resizable grids, and a complete automated test suite. Version 0.1.8.1 closes the work begun in 0.1.8.0 by adding test coverage for the new grid dimension system and confirming the codebase is clean for the milestone tag.
What's in this release
Resizable grid columns and rows · #12
The spreadsheet grid now supports drag-to-resize for both columns and rows. Explicit drag handles appear at the trailing edge of each selected header — replacing the previous invisible hit-target approach that was hard to discover and easy to misfire. Double-tapping a column or row header auto-resizes to fit the longest content in that column or row. Custom dimensions persist to .xlsx files via Apache POI, so a resized workbook reopens at the same proportions it was saved with.
Implementation notes for contributors:
- Handles are rendered via
Modifier.zIndexand non-consuming pointer input, which means they sit above the grid without blocking the two-finger pan gesture. - The subcompose layout uses binary search over a precomputed offset map to locate visible rows and columns under dynamic (non-uniform) cell sizes — a meaningful performance improvement over the previous linear scan.
- Dimension serialisation stores column widths and row heights in the POI
SheetAPI's native units and round-trips them through save and reopen without drift.
Test coverage for grid dimensions
A new test, applyEdits_preservesColumnWidthsAndRowHeights, was added to ExcelDocumentTest.kt. It exercises the full POI serialisation path: a sheet with custom row heights and column widths is written out, read back in, and the recovered values are asserted to match the originals. This closes the gap left by 0.1.8.0, where the feature shipped ahead of its unit test.
The .skill-extracted artefact has also been removed from Git tracking and the result verified in the tree.
Test results
| Environment | Suites | Tests | Result |
|---|---|---|---|
| Android Studio (device) | 5 | 15 | ✓ All passed |
The count increased from 14 to 15 with the addition of applyEdits_preservesColumnWidthsAndRowHeights.
Cumulative changelog since project start (0.1.0.0 → 0.1.8.1)
A summary of everything that has shipped across the eight-day development run, for readers coming to the project for the first time.
Format editors
| Format | Read | Edit | Save in place | Export copy | Notes |
|---|---|---|---|---|---|
| CSV | ✓ | ✓ | ✓ | ✓ | Scrollable grid, add row/column, insert at selection |
Excel .xlsx |
✓ | ✓ | ✓ | ✓ | Multi-sheet, merged cells, resizable grid, formula display |
Word .docx |
✓ | ✓ | ✓ | ✓ | Paragraph text, heading styles, pinch-to-zoom |
PowerPoint .pptx |
✓ | ✓ | ✓ | ✓ | Text boxes per slide, pinch-to-zoom |
| ✓ | — | — | ✓ | Viewer + merge/extract via native lopdf bridge | |
| EPUB | ✓ | ✓ | ✓ | ✓ | Chapter-by-chapter, TOC, DRM detection |
File browser (added 0.1.7.0): lists Documents and Downloads; recent, all-files, and pinned-favorites views; search; per-format filter chips; list/grid toggle; sort by date, name, size, or type; per-file share, info, and delete; persisted pins and recents via SharedPreferences.
Grid editor highlights (Excel and CSV): 2D virtualised subcompose layout with true merged-cell spanning (0.1.7.7); LazyRow-based horizontal axis with bidirectional scroll sync (0.1.7.6); insert-at-selection for rows and columns (0.1.7.5); per-sheet scroll reset on tab switch (0.1.7.4); resizable columns and rows with drag handles and auto-fit (0.1.8.0–0.1.8.1).
Native PDF bridge: The kern-bridge Rust crate wraps lopdf and is cross-compiled to arm64-v8a, armeabi-v7a, and x86_64 via cargo-ndk in CI. The bridge is bundled into the APK and its availability is detected at runtime; tools degrade gracefully when the .so is absent (0.1.5.0, 0.1.7.3).
Quality and correctness
- Unsaved-changes guard on back navigation across all editors (0.1.7.2).
- Error feedback split between
AlertDialog(long/instructional messages) andSnackbar(short confirmations), per Material 3 guidelines (0.1.7.8). mutableStateOf<Int>replaced withmutableIntStateOfacross all ViewModels to eliminate boxing allocations (0.1.7.9).Modifier.clickableonSurfacereplaced with the nativeonClickparameter (0.1.7.10).- Dependencies:
compose-bomupdated to2026.05.01,apache-poito5.5.1(0.1.7.11).
Automated tests (added 0.1.7.1, grown to 0.1.8.1):
| Suite | Coverage |
|---|---|
| CSV | Parse/serialise round-trip, ragged rows, quoting, column labels |
| Excel | Multi-sheet read; edit-only save preserves untouched cells and sheets; column/row dimension persistence |
| Word | Paragraph text and coarse style read; edit-only save |
| PowerPoint | Slide text read; edit-only save |
| EPUB | Spine/TOC/block parsing; edit-only save with correct mimetype ordering; DRM rejection |
All test fixtures are generated in-test via POI, OpenCSV, Jsoup, and zip — no binary files committed to the repository.
Upgrade notes
No migration steps are required. The .skill-extracted file has been removed from Git tracking; if you have it locally, git rm --cached .skill-extracted will clean it up.
What comes next
Comprehensive UI redesign is on the way!