Releases: jhotadhari/straymap
Releases · jhotadhari/straymap
Release list
v0.3.5
v0.3.4
Changed
- Upgrade
react-native-mapsforge-vtmfrom0.8.1to0.8.3. Layer-order hardening: fixes z-order drift where sharedVectorLayerpaths could render behind raster tile layers due to incorrect indexing in the LIS-basedreorderMinimalMovesalgorithm.
v0.3.3
Changed
- Upgrade
react-native-mapsforge-vtmfrom0.8.0to0.8.1. Fixes the
strip-vtm-classes.gradlescript that resolves DEX duplicate-class errors
on CI (fresh Gradle cache) when the extension's shadowedLineBucket/
RenderBucketsclasses collide with the vtm JAR's copies. - Upgrade
react-native-mapsforge-vtm-ext-path-color-rampfrom0.1.0to
0.1.1.
v0.3.2
Fixed
- CI release workflow: commit icon build output so Metro can resolve glyph maps.
v0.3.1
Fixed
- CI release workflow: bump Node.js from 22 to 24 for engine compatibility.
- Release config: set
github.attachmenttofalseso CI handles artifact uploads.
v0.3.0
Complete rewrite with no backwards compatibility to previous versions. The app has been rebuilt around a spatial SQLite database and a Redux store with substantial performance improvements across the board, a new side-drawer panel system, and a new customizable dashboard. New capabilities include BRouter offline routing, full line management with tags, and Lines and Tags data browsers.
Added
- Feature-based plugin architecture — 14 production features each contributing UI items, drawer panels, dashboard widgets, map components, and app overlays via a shared
AppFeaturecontract and priority-sortedFeatureRegistry. - Redux Toolkit with 16 slices and a custom listener middleware for side-effect-driven persistence, state reactions, and cross-feature coordination.
- Spatial SQLite database layer with drizzle-orm, op-sqlite, and libspatialite — LINESTRINGZ/POINTZ geometry columns (SRID 4326), R*Tree spatial indexes, React Query caching (
staleTime: Infinity), drizzle-kit migrations, and dynamic database path configuration. - Centralized database error handling with
withDbErrorHandlingwrapper — try/catch + error toast + log across all DB actions. - Line management — full CRUD for geographic lines with tags (many-to-many, cascade deletes), per-line colours, multi-column filtering, bulk actions, batch export to GPX/KML/GeoJSON, system-protected tags, and data-table browsers.
- BRouter offline routing — waypoint-based via
react-native-brouterwith per-point profile inheritance, segment-change optimization, DEM-based elevation enrichment, slope colour-ramp visualization, and route persistence across restarts. - GPX/KML/GeoJSON import — multi-step wizard with single-file and batch-directory modes, date extraction from 18 preset filename patterns, title and tag extraction via regex, overwrite handling (create/skip/replace), dry-run preview, and background processing via foreground service.
- Shared foreground service — native
BackgroundTaskServicewith thread-safe task registry, progress notifications, and auto-stop when idle. - Side drawers — left/right panels with reanimated gesture handling, sortable drag-and-drop ordering, and programmatic expand/collapse.
BidirectionalScrollHost— custom Fabric native view for simultaneous horizontal drawer drag and vertical list scrolling with native fling handling.- Dashboard — configurable widget grid with drag-to-reorder editing, per-widget visibility/font/size/unit controls, and widgets for coordinates, altitude, and zoom level.
- Cache manager — lists all tile caches with sizes, per-layer associations, individual deletion, and sweep-all-unused action.
- App updater — version comparison on app start with plugin-style migration callbacks, downgrade detection, and splash-screen progress.
- Generic component library — controls (numeric, toggle, file-picker, colour, date-time), info-label wrappers, primitives (buttons, icons, badges, links), and layout wrappers (keyboard-avoiding modals, menus, lists).
- User-configurable date/time display format via Day.js singleton with locale bundles for all 4 languages.
- Native Android splash screen with dark/light theme variants and custom font title.
- Custom icon font with automated build pipeline (
yarn buildIcons) plus third-partyfont-gisicon set. yarn sortI18nscript keeping translation key order in sync across all languages.yarn organizeImportsscript sorting TypeScript imports into external/internal blocks.- GitHub Actions CI/CD — builds APK+AAB on
v*tags, signs with keystore secrets, attaches artefacts to the GitHub release. - Release automation via
yarn publish— bumps versions, generates semver-basedversionCode, releases the changelog, creates GitHub release, merges to main/development. PRIVACY.md— permission disclosures, GDPR rights, data storage description, and contact info.
Changed
- Architecture — restructured from flat component tree to self-contained feature modules, each with its own Redux slice, selectors, i18n, and extension-point registration.
- State management — introduced Redux Toolkit with 16 slices and listener middleware for side-effect coordination.
- Map rendering — migrated to
react-native-mapsforge-vtm0.8.0 withuseMapPosition()Reanimated hook for 60fps coordinate reads at zero bridge cost, native GNSS filter onMapContainer, and DEM-based elevation enrichment. - i18n — expanded to 4 languages (en, de, es, pt) with per-feature translation files.
- Performance — comprehensive
React.memo/useCallback/useMemosweep across all components. Per-line colour paint objects shared by reference (≤11 total).BidirectionalScrollHostnative fling handling.TextInputNativeMultilinezero-layout-cycle auto-resize. - UI — settings panels and modals rebuilt on the generic component library with
ModalWrapperkeyboard-avoidance and blur backdrop. PaperButtonstyling standardized viauseButtonPropscomposable. - Layers and profiles — sortable drag-and-drop lists with temp/commit editing to avoid map re-creation on every keystroke.
- Database — React Query
staleTime: Infinity(no auto-refetch, only manual invalidation after writes).withDbTransactionfor atomic multi-statement writes. - Date/time — pre-configured Day.js singleton with user-configurable display format applied globally. Never bare
dayjsimports. - Android permissions — added foreground-service, location, and notification permissions; storage permissions capped at SDK 28.
- Build —
targetSdkVersion/compileSdkVersionbumped from 34 to 36.metro.config.jstransforms.md/.sqlfiles.babel-plugin-inline-importfor SQL.drizzle.config.tsauto-discovers schema files. - Logging — centralized error handling with toast notifications, no bare
consolecalls anywhere.
v0.2.1
Changed
- Changed font: Use system font for normal text.
Fixed
- Fix app doesn't start up on very first start of the app.
- Fix overlapping list items About page.
- Fix Dashboard out of viewport on some devices.
- Fix CacheManager: doesn't fetch directories on first expand.
- Fix Edit mapsforge profile: Cache renderStyles so they don't have to be parsed every time the Modal opens.
v0.2.0
In love with mountains.
Changed
- Update
react-native-mapsforge-vtmdependency, that usescom.github.mapsforge.vtmversion0.25.0and all the new fancy hillshading features.- Hillshading is now much faster, stable and the generated tiles are more accurate.
- Implemented all the new Clear Asymmetry shading algorithms that came with this update.
- Change the cache filename for
hillshadinglayer: That makes previous caches obsolete. - Elevation data can now be interpolated. And reading the DEMs is now multithreaded, better performance and doesn't block the UI.
- Change Digital Elevation Model Control
- Move it to General Settings
- Add settings for Interpolate Elevation and DEM in Memory
- Add
CacheManager: Displays all cache directories, their sizes and allows to delete them. - DashboardControl Map Center Altitude: Add warning if Digital Elevation Model is unset.
- Add more info texts.
Removed
- Remove built in mapsforge themes
MOTORIDER_DARKandOSMAGRAY. Because they are not existing anymore in latest version ofcom.github.mapsforge.vtm.
Fixed
- Fix some weird zoom changes when the app is storing the current map position.
- Fix Unhandled SoftException com.facebook.react.bridge.ReactNoCrashSoftException
- Fix possible NullPointerException on non existing externalCacheDir
- Small UI fixes: Some buttons or options-drop-down where out viewport.
v0.1.0
Added
- Opacity setting for map layer
online-raster-xyz. - Mapsforge General Settings to Settings / Maps. To control
lineScale,textScaleandsymbolScaleof all mapsforge layers. Changes require a restart of the app. - Added new mapsforge-profile settings, whether to show buildings and labels or not.
- Add some debug/commit information to About page in app debug mode.
- Update routine on app start. Compares current version with last installed version and maybe run several updates until the settings structure meets the structure of the current version.
- More source options for layer
online-raster-xyz:- Esri World StreetMap
- Esri World TopoMap
- Esri World GrayCanvas
- Esri World Terrain
- Esri World ShadedRelief
- Esri World Physical
- Esri Ocean Basemap
- Esri NatGeo World Map
- Google Hybrid
- Google Satellite
- Rename Google Maps to Google Road
Changed
- Each cache has its own directory now. Makes it easier to control the size and clear each cache individually. The old cache directory and files are obsolete now.
- Option to select the cache base-directory for each layer that supports caching. Options include the internal cache directory and the external directories.
- Some info texts and added more external download links.
Fixed
- File picker controls should search recursive in nested directories.
- Save map position and zoom level every half minute.
v0.0.2
Basic app structure and map viewer functionality.
Added
- Logo and design with multiple themes.
- Multilingual.
- Map viewer with different layers that can be stacked on top of each other.
- Layers:
online-raster-xyz,mapsforge,raster-MBtiles,hillshading. - Dashboard with different elements.
- Topbar with breadcrumbs and a menu.
- Structure for settings and some settings pages.