{"id":13558065,"url":"https://github.com/rinigus/pure-maps","last_synced_at":"2026-01-28T15:05:16.563Z","repository":{"id":38421823,"uuid":"145721851","full_name":"rinigus/pure-maps","owner":"rinigus","description":"Maps and navigation","archived":false,"fork":false,"pushed_at":"2026-01-26T20:19:39.000Z","size":18685,"stargazers_count":302,"open_issues_count":87,"forks_count":53,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-01-27T07:39:06.902Z","etag":null,"topics":["kirigami","mapbox-gl","maps","navigation","qml","sailfishos","ubuntu-touch"],"latest_commit_sha":null,"homepage":"https://rinigus.github.io/pure-maps/","language":"QML","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/rinigus.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-08-22T14:37:56.000Z","updated_at":"2026-01-25T15:58:04.000Z","dependencies_parsed_at":"2024-06-18T18:16:56.796Z","dependency_job_id":"5289ae90-399d-4e4d-8b58-5f87646953a8","html_url":"https://github.com/rinigus/pure-maps","commit_stats":{"total_commits":2676,"total_committers":27,"mean_commits":99.11111111111111,"dds":"0.46860986547085204","last_synced_commit":"b594d2f5c480686a2b7df15eb565df3c2f51adff"},"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/rinigus/pure-maps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rinigus%2Fpure-maps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rinigus%2Fpure-maps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rinigus%2Fpure-maps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rinigus%2Fpure-maps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rinigus","download_url":"https://codeload.github.com/rinigus/pure-maps/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rinigus%2Fpure-maps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T13:02:32.985Z","status":"ssl_error","status_checked_at":"2026-01-28T13:02:04.945Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["kirigami","mapbox-gl","maps","navigation","qml","sailfishos","ubuntu-touch"],"created_at":"2024-08-01T12:04:43.441Z","updated_at":"2026-01-28T15:05:16.557Z","avatar_url":"https://github.com/rinigus.png","language":"QML","funding_links":[],"categories":["QML","others"],"sub_categories":[],"readme":"# Pure Maps\n\n[![Matrix](https://img.shields.io/badge/matrix.org-%23pure--maps-blue)](https://matrix.to/#/#pure-maps:matrix.org)\n[![Discussions](https://img.shields.io/badge/forum-GitHub-FB9200)](https://github.com/rinigus/pure-maps/discussions)\n\n[![Latest release](https://img.shields.io/github/v/release/rinigus/pure-maps)](https://github.com/rinigus/pure-maps/releases)\n[![SFOS](https://img.shields.io/badge/SailfishOS-Chum-1CA198)](https://build.sailfishos.org/package/show/sailfishos:chum/pure-maps)\n[![Ubuntu Touch](https://img.shields.io/badge/Ubuntu%20Touch-OpenStore-292929)](https://open-store.io/app/pure-maps.jonnius)\n[![Flatpak](https://img.shields.io/badge/Flatpak-Flathub-4A86CF)](https://flathub.org/apps/details/io.github.rinigus.PureMaps)\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/pure-maps.svg)](https://repology.org/project/pure-maps/versions)\n\nPure Maps is an application for Sailfish OS and Linux to display\nvector and raster maps, places, routes, and provide navigation\ninstructions with a flexible selection of data and service providers.\n\nPure Maps is free software released under the GNU General Public\nLicense (GPL), see the file [`COPYING`](COPYING) for details. Pure\nMaps is a fork of [WhoGo Maps](https://github.com/otsaloma/whogo-maps)\nthat was made to continue its development.\n\n\n## User feedback\n\nThere are three main communication channels with the users: GitHub\n[discussions](https://github.com/rinigus/pure-maps/discussions) and\nissues, Matrix channel\n[#pure-maps:matrix.org](https://matrix.to/#/#pure-maps:matrix.org) and\na thread at [TMO](https://talk.maemo.org/showthread.php?t=100442).\n\nPlease use Github issues to address specific problems and development\nrequests. General discussion is expected either through corresponding\ntopics in GitHub discussions, issues, Matrix channel, or TMO\nthread. \n\nCurrently, the homepage for Pure Maps is a placeholder. You are\nwelcome to help by working on the corresponding\n[issue](https://github.com/rinigus/pure-maps/issues/400).\n\n\n## Command line options\n\nPure Maps supports positional argument (one) that could either specify\n`geo:latitude,longitude` URI or a search string that will be searched\nby geocoder.\n\nIf Pure Maps instance is running already, it will be contacted via\nDBus and the request will be forwarded.\n\n\n## DBus API\n\nDBus (service `io.github.rinigus.PureMaps` at session bus) can be used\nto\n\n* search: method `Search`\n* show poi: method `ShowPoi`\n* get navigation status and control it.\n\nThere service is split as described below.\n\n### Global actions\n\nPath: `/io/github/rinigus/PureMaps`\nInterface: `io.github.rinigus.PureMaps`\n\nMethods:\n\n* `Search(String search_string)` - activates search action for given\n  `search_string`\n\n* `ShowPoi(String title, Double latitude, Double longitude)` - show\n  POI on map with the given coordinates and title.\n\n\n### Navigation\n\nPath: `/io/github/rinigus/PureMaps/navigator`\nInterface: `io.github.rinigus.PureMaps.navigator`\n\nMethods:\n\n* `Clear()` - stops navigation and removes current route\n\n* `Start() -\u003e Boolean` - start navigation and returns `true` if\n  succesful. If already started or has no route defined, will return\n  `false` to indicate failure.\n\n* `Stop()` - stop navigation if running.\n\nProperties and signals:\n\nEach property has a corresponding `...Changed` signal to indicate when\nthe value of the property has changed.\n\n* `destDist`, `destEta`, `destTime` - human readable strings with the\n  remaining distance, time, and estimated time of arrival\n\n* `direction` and `directionValid` - bearing of the current route\n  segment and whether it is valid (current location is on route)\n\n* `hasRoute` - whether route has been set in application\n\n* `icon` - icon name for the next maneuver\n\n* `language` - navigation instructions language\n\n* `manDist`, `manTime` - remaining distance and time for the next\n  maneuver in human readable form\n\n* `mode` - mode of transportation\n\n* `narrative` - longer next maneuver instruction, should be available\n  for all maneuvers\n\n* `alongRoute` - whether current location is on route and movement is\n  along it.\n\n* `progress` - current progress along the route in percentage (0-100)\n\n* `running` - whether navigation in active\n\n* `street` - short form of the narrative usually shown in Pure Maps\n  next to the maneuver icon. Could be absent for some maneuvers\n\n* `totalDist`, `totalTime` - total route distance and time in human\n  readable form.\n\n\n\n## Development\n\nFor development of Pure Maps and testing on desktop, you would have to\nchoose platform for which you develop, install dependencies, and be\nable to run the application. In this case, Qt Creator can be used. See\ndetails below.\n\nAlternative, is to use Flatpak-based environment and develop using\nthat. For this approach, see separate\n[README](packaging/flatpak/README.md).\n\nBuilding and Debugging for Ubuntu Touch is described in\n[README](packaging/click/README.md).\n\n\n## Platforms\n\nTo support multiple platforms, QML code is split into\nplatform-specific and platform-independent parts. Platform-independent\npart is in `qml` folder with the platform-dependent code under\n`qml/\u003cplatform-id\u003e`. Correct platform is picked up in installation\nphase (`make install`) or is set by `make` for local builds.\n\nWithin platform-independent code, platform is included allowing to\naccess platform-specific implementations of page stack, file dialog,\nand other specific aspects. For this approach to work, API in the\nplatform specific implementation has to be the same for all platforms.\n\nTo add new platform, add new directory under `qml`, new Makefile\ntarget to set it, and implement all the required QML items. Take a\nlook under other platforms for examples.\n\n## Building from Source\n\nTo build PureMaps from source, please refer to the [Build.md](./Build.md) file.\nIt provides comprehensive instructions for compiling the application on systems such as Debian 12 and Ubuntu 24.04.\n\n\n## API keys\n\nNote that you will need API keys if you wish to access the services\nthat require them (such as Mapbox). For that, register as a developer\nand insert these keys in the preferences. Among services that don't\nrequire API keys are OSM Scout Server (for offline maps), HSL (raster\ntiles for Finland), Sputnik (raster tiles in Russian), Photon\n(search).\n\n\n## Packaging\n\nPure Maps is packaged for different distributions. Included in the\nsource tree: Sailfish OS version is packaged as RPM, Linux version is\npackaged using Flatpak or RPM, and Ubuntu Touch version as\nclick. Several distributions provide packaging scripts in their source\ntrees.\n\nFor packaging, please copy `poor/apikeys.py` to `tools/apikeys.py` and\nfill missing API keys for the services that you plan to use. Note that\nthe format of `tools/apikeys.py` has changed with 2.9 release.\n\nFlatpak specific instructions are available under `packaging/flatpak`.\n\nUbuntu Touch specific instructions are available in\n[Ubuntu Touch README](packaging/click/README.md).\n\n\n## Development\n\n### General\n\nThroughout QML, Python, and C++ code, all the same type items\n(properties, signals, functions), are ordered alphabetically.\n\nIts possible that some of the implemented code does not fully comply\nwith the outlined order. Then it should be fixed eventually.\n\n\n### QML\n\nTo simplify development, there are few simple rules regarding QML file\norganization. QML files are organized as follows (use the needed\ncomponents):\n\n```\nimport A\nimport B\nimport \".\"\n\nimport \"js/util.js\" as Util\n\nItem {\n    id: item\n\n    // base class defined properties in alphabetic order\n    prop_a: val_a\n    prop_b: val_b\n\n    // new properties in alphabetic order\n    property         var  np_a: default_a\n    default property bool np_b: default_b\n\n    // readonly properties\n    readonly property var images: QtObject {\n        readonly property string pixel:         \"pure-image-pixel\"\n        readonly property string poi:           \"pure-image-poi\"\n        readonly property string poiBookmarked: \"pure-image-poi-bookmarked\"\n    }\n\n    // signals\n    signal mySignal\n\n    // local unexported properties\n    property bool _locked: false\n\n    // behavior\n    Behavior on bearing {\n        RotationAnimation {\n            direction: RotationAnimation.Shortest\n            duration: map.ready ? 500 : 0\n            easing.type: Easing.Linear\n        }\n    }\n\n    // new sub-items following the same principles\n    Item {\n        id: subitem\n    }\n\n    // connections\n    Connections {\n    }\n\n    // signal handlers\n    Component.onCompleted: init()\n    onActivated: doSomething()\n\n    // functions\n    function a() {\n        return 10;\n    }\n}\n```\n## Translations\n\nYou can translate Pure Maps to a new language or improve an existing \ntranslation using [Transifex](https://explore.transifex.com/rinigus/pure-maps/).\n\nIf you don't have a Transifex account and want to fix a minor issue, you can \ncreate a [pull request](https://github.com/rinigus/pure-maps/pulls) or [open an issue](https://github.com/rinigus/pure-maps/issues/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frinigus%2Fpure-maps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frinigus%2Fpure-maps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frinigus%2Fpure-maps/lists"}