Repository navigation
Releases
v0.1.9
Changed
- Visual Studio solution versioned with the repository (
Kubuno.Maps.slnx, generated by vskubuno, the naming of
every Kubuno repository): the server is the projectKubuno.Maps.Server, the frontendKubuno.Maps.Web, in
the solution folders Server, Libraries and Frontend, with the shared launch profile "Maps (Kubuno Core + browser)".
The crate and npm names do not change.
Added
- Choice of database engine. Maps now runs on PostgreSQL, MySQL/MariaDB or
SQLite, selected by the administrator at run time ([database] engine) from a
single build — there is no separate binary per engine, and all three drivers
ship in the one.kbpkg. SQLite makes a self-contained, server-less install
possible.
Changed
- Saved-place and review tags are stored as a portable JSON array. They were
held in a PostgreSQL-only array column; the same tags, tag filtering and
behaviour now work identically on the three engines. Existing PostgreSQL
instances are converted automatically on upgrade — the column is migrated in
place and its index rebuilt — so no action is required and no data is lost.
Security
-
The signed-in user is now taken from the core's signed identity token only. The module used to trust the
plainX-Kubuno-User-Id/-Role/-Emailheaders, so any process able to reach its local port could
act as any user, administrators included. It now accepts a request only with a validX-Kubuno-Authtoken
signed by the core with this module's own secret, for this module, and not expired (kubuno-modauth); the
plain headers are ignored. With no internal secret configured, every user request is refused. The/ipc/*guard now comparesX-Internal-Secretin constant time and refuses every request when no secret is configured (an empty header used to match an empty secret). -
The 3D sky view (textures, star catalogue, constellations) no longer relies on the access-token cookie
the web client used to keep readable by page scripts: textures load with signed tickets, data files
with your session. Requires a Kubuno core that issues signed tickets (POST /api/v1/auth/tickets) and@kubuno/sdkwith the signed-URL helpers. -
Security fixes from the shared database layer (kubuno-db 0.9.0). The
database password can no longer appear in a log through the debug output of
the database settings. -
GPX import can no longer be stalled or starved by a crafted file. The XML
parser used to read uploaded.gpxtracks could be pushed into minutes or
hours of pure CPU work by a single tag carrying a very large number of
attributes, and into unbounded memory growth by a tag repeating namespace
declarations. Either one, sent by anyone able to submit a track, could pin a
worker thread or drive the module into an out-of-memory kill; no request
timeout could interrupt it. The parser now bounds both. -
GeoIP database reader updated past an unsound memory-mapping API. The
previous library exposed memory-mapped database access as safe even though a
.mmdbmodified on disk while in use could corrupt memory. Maps reads the
database into memory rather than mapping it, so no instance was exposed, but
the vulnerable code no longer ships at all. -
Input validation library updated. The version in use carried
RUSTSEC-2024-0421 through its domain-name parser, which accepted Punycode
labels that decode to plain ASCII — a mismatch an attacker can use to make two
different names look like one. -
Database driver updated past an unfixable advisory. The previous line
pulled in an RSA implementation vulnerable to a timing side-channel
(RUSTSEC-2023-0071) for which no fix will ever exist. The new line does not
depend on it at all, and it refuses any SQL string built at run time unless it
has been audited — every such query here was checked and is now assembled
at compile time, so none is built at run time at all.
Fixed
- Files kept on the server's local storage are found again on Windows and under symlinked storage
roots (shared storage layer updated to kubuno-storage 0.1.2). - Database migrations keep the same checksum on every OS. The repository now
pins line endings to LF (.gitattributes), so a checkout on Windows no longer
turns SQL migrations, scripts, manifests or sources into CRLF. A database
migrated by a Linux build is therefore no longer refused by a Windows or macOS
build of the same version because its migration checksums differ.
v0.1.8
Security
- HTTP/2 layer updated to a patched release.
h2moves from 0.4.15 to
0.4.19, closing a denial of service through unbounded empty DATA frames
(RUSTSEC-2026-0258). - Error library updated to a patched release.
anyhowmoves from 1.0.102
to 1.0.104, closing an unsoundness inError::downcast_mut()
(RUSTSEC-2026-0190). - TLS library updated to a patched release. The pinned
rustlscarried
RUSTSEC-2026-0285 (medium). Every outbound HTTPS connection goes through it.
v0.1.7
Fixed
- A map embedded in a page no longer steals the scroll wheel. Scrolling
towards the fields below a map sent the reader into orbit instead: the map
caught every wheel turn passing over it. The wheel now zooms only once the map
has been selected — its search field counts as much as the map itself, since
naming a place and then zooming in on it is one gesture — and otherwise the
page scrolls as if the map were a picture. The zoom buttons work either way.
Applies to the location picker and to the small map this module lends to other
parts of the product. - A place is now listed once. Searching for an address could return the same
line several times — "Paris, Île-de-France, France métropolitaine, France"
twice over — because the geocoder answers with map objects, and one place is
usually several of them: a boundary and a point, each with its own identity
and the very same name. The list is now keyed on the name that is actually
read. This applies everywhere the module searches: the route panel, the search
bar and the location picker.
Added
- Pick a position on a map, in forms that belong to other parts of Kubuno.
Wherever the instance asks for a latitude and a longitude — the address of a
building in the admin console, today — this module now offers a map instead of
two number fields: search for the address, click to drop the pin, drag it to
adjust. The coordinates stay editable by hand for anyone who already has them,
and the plain fields come back if this module is removed.
Changed
-
This module now installs as a Kubuno package (
.kbpkg) only. Its system
packages (Debian/RPM and the Windows and macOS installers) are no longer
built: the module is distributed as one.kbpkgper platform (Linux, Windows,
macOS) that the Kubuno server installs itself — from the admin console, or
offline withkubuno modules:install <file>.kbpkg. -
A new look for the default map. The default basemap now uses the Kubuno
theme: near-white land, a soft grey urban mask with white streets, warm beige
industrial and commercial areas, light green vegetation and teal-blue water.
Motorways are drawn grey-blue, regional roads light grey-blue, and road
numbers appear in colour-coded shields (red for motorways and national roads,
yellow for departmental roads, green for European routes). Buildings are flat
light-grey shapes at every zoom, and place labels are tinted by category
(green for parks, orange for food, blue for shops and transit, red for
health). The theme is applied on top of the streamed OpenFreeMap style, so
the data source, the other basemaps (light, terrain, satellite, offline) and
the overlays are unchanged. -
The search bar is now a rounded pill with a directions shortcut. The
field sits in a white pill with a soft shadow; a search button and a
directions button (diamond icon) live inside it. When a place is open, the
pill shows its name with a clear button instead. Suggestions open attached
under the pill in the same card, with keyboard navigation (arrow keys,
Enter, Escape); the part of each name that matches what you typed is shown
in bold, and places near the current view are listed first. -
Category chips are now white pills with line icons. The most useful
categories come first (restaurants, hotels, things to do, museums, public
transport, parking, pharmacies, ATMs); chips that do not fit in the row
fold into a "More" menu. "Things to do" also finds theme parks, zoos and
aquariums, and "Public transport" also finds subway entrances and stations. -
The layers control is now a map thumbnail. The bottom-left button shows
a preview of the alternative basemap (satellite imagery while the map is
shown, and vice versa) labelled "Layers", follows the map as you pan, and
moves out of the way of the place panel. -
The place panel fills the left side of the map. It opens as a
full-height white panel: hero photo under the search pill, larger title, a
rating line computed from the reviews left on Kubuno, tabs (Overview,
Reviews, About, and Tickets when the place has a booking link), five round
actions, an expandable description card and icon-led information rows. -
The README now opens with the module's logo. The public README on
GitHub now shows the module's designer logo (the same PNG shown as the
browser tab icon and in the applications menu) at the top of the page — the
repository landing now matches the icon a signed-in user sees inside the
platform. The image ships in-repo, under.github/logo.png, so it renders
even when the repo is browsed offline. -
New Maps logo — a hexagon with a red map pin over a green landscape,
used as the browser-tab icon and in the applications menu. It is now raster
(PNG) designer artwork.
Added
- Home and Work shortcuts in the search dropdown, editable inline and
saved with your account preferences; recent searches are listed under
them, with a link to the full history, and they also match while you type. - An "around here" card under the search dropdown shows the town at the
centre of the map and the current temperature (from Open-Meteo, cached for
ten minutes). A traffic line is ready in the card but stays hidden until a
traffic data source is configured — no invented data. - "Send to your phone" on a place shows a QR code of the place link,
generated locally without any third-party service. - A share menu on a place offers "Copy link" (with a confirmation
message) and "Copy place card" for pasting into other modules. - A handle on the place panel's edge collapses the whole left panel off
the map and brings it back; the save button shows "Saved" when the place is
already in your saved places. - The directions panel was rebuilt. A travel-mode row (Recommended, Car,
Public transport, Walking, Bike, Plane), stacked origin and destination
fields with a connector column and a swap button, suggestions under the
fields (your location, Home and Work, recent searches) and result cards
with the mode icon, duration, distance and expected arrival time.
"Recommended" compares car, bike and walking routes side by side, fastest
first; each route can be picked from the panel or by clicking its line on
the map (the chosen one is blue, the others grey). "Plane" draws the
great-circle line with the straight-line distance and an indicative flight
time. Public transport is shown but not available yet: Kubuno has no
timetable source. - Up to nine points per route: add destinations, drag stops to reorder
them, remove them, or pick any point on the map. - Route options: avoid motorways, tolls or ferries, and distance units
(kilometres or miles, shared with the settings page). When the routing
server does not support the requested exclusions, the panel says so and
recomputes without them instead of pretending. - "Leave now", "Leave at…" and "Arrive by…" show the expected arrival or
departure time on each result. There is no traffic model, so the route
itself does not change with the time. - Route actions: send to a phone (QR code), copy link, print. A route link
reopens the same route when the page loads.
Fixed
-
The map no longer flickers to black while the window is resized. During a
resize the map's drawing surface was reallocated on every observer tick and,
for one frame, the dark space background behind the globe showed through.
Resizes are now coalesced to one per frame and the map is redrawn
synchronously, so no empty frame is ever shown. -
Selecting a search suggestion is now recorded in the search history.
The history was never populated because the map queried the geocoder
directly; a selection is now recorded server-side as well. -
Recent searches keep their coordinates. The history endpoint reported
them as empty (a numeric column was read with the wrong type), so a recent
entry could not be reopened in one click. Entries without coordinates are
now geocoded again on selection. -
Search suggestions favour places near the current map view instead of
listing homonyms from the other side of the world first. -
Sketch points and labels are drawn again. The two map layers that show
sketch points and text labels were declared with a filter the map engine
rejects, so they were silently dropped (with an error in the browser console)
every time the basemap loaded. They now render as intended. -
A withdrawn dependency is no longer used. A crate deep in the tree
(spin0.9.8, pulled in through the HTTP stack) was yanked by its authors.
No vulnerability was announced, but a withdrawn crate has no business in a
release; the lockfile now takes the version that replaced it. -
The package could not be built where
zipis absent. The Windows job of
the continuous integration has nozip, so the Windows package was simply lost
the first time it was attempted — a script failure, not a build failure. The
builder now falls back to 7-Zip, then to PowerShell.
Added
-
Maps opens straight on the way to a place. A link of the form
/maps?dest=<address>opens the route panel with that address already set as the destination, so another part of Kubuno — the "Directions" button of a meeting invitation, for one — can hand over a destination without the reader retyping it. -
directionsUrlservice. Maps now offers other modules a way to build that link. A module that wants to point at a place asks for the service and shows nothing when Maps is not installed, instead of hard-coding a route into it. -
This module now ships a
.kbpkg— the single package format a Kubuno
server installs by itself, the same file on Linux, Windows and macOS. It
carries the same binary, interface and manifest as the system packages,
arranged the way the server expects to find a...
v0.1.6
Changed
- Theme tokens: two colours for navigation labels (
--color-text-nav,
--color-text-nav-active). Every module carries the same token sheet, so the
values must match across them — whichever bundle loads last would otherwise
win. No visible change inside this module.
Added
- A mini-panel for the shell's right rail: your saved places, one click from
wherever you are.
Changed
- Default application background token aligned with the core (
--body-bg#f8fafd). Only
visible when the module runs standalone: inside the shell the active theme sets it.