fix: Make sure that route-prefix does not break the UI#2541
fix: Make sure that route-prefix does not break the UI#2541CommanderStorm merged 6 commits intomaplibre:mainfrom
route-prefix does not break the UI#2541Conversation
route-prefix does not break the UI
CommanderStorm
left a comment
There was a problem hiding this comment.
I don't think this will work as expected, at least it does not work this way when I run the production bundle:
just run --webui enable-for-all --route-prefix /martin ./tests/fixtures/pmtiles/stamen_toner__raster_CC-BY+ODbL_z3.pmtilesWe don't use vite in prod, so these URLs need to be relative indeed.
Not quite sure how to best handle this.
CommanderStorm
left a comment
There was a problem hiding this comment.
Seems to work now mostly.
We still don't support serving the UI at /martin but we support /martin/ now, which is progress.
I also tested the regular base URLs.
There was a problem hiding this comment.
Pull request overview
This PR fixes a bug where Martin's WebUI breaks when using the --route-prefix configuration option. The issue occurred because static assets (JavaScript bundles, favicon, Open Graph images) used absolute paths starting from the root (/_/assets/*), which didn't account for custom route prefixes.
Changes:
- Configure Vite to use relative paths for asset references by setting
base: './' - Update static asset references in index.html to use relative paths
- Add contributor name to author meta tag (unrelated to the fix)
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| martin/martin-ui/vite.config.ts | Added base: './' to make Vite generate relative asset paths that work with any route-prefix |
| martin/martin-ui/index.html | Changed favicon and social media image paths from absolute to relative, plus added contributor to author meta tag |
## 🤖 New release
* `martin-tile-utils`: 0.6.9 -> 0.6.10 (✓ API compatible changes)
* `mbtiles`: 0.15.1 -> 0.15.2 (✓ API compatible changes)
* `martin-core`: 0.2.6 -> 0.3.0 (⚠ API breaking changes)
* `martin`: 1.3.0 -> 2.0.0
### ⚠ `martin-core` breaking changes
```text
--- failure enum_missing: pub enum removed or renamed ---
Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_missing.ron
Failed in:
enum martin_core::config::OptOneMany, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/cfg_containers.rs:29
enum martin_core::config::OptBoolObj, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/cfg_containers.rs:8
--- failure module_missing: pub module removed or renamed ---
Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/module_missing.ron
Failed in:
mod martin_core::config, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/mod.rs:1
mod martin_core::config::env, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/env.rs:1
--- failure struct_missing: pub struct removed or renamed ---
Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/struct_missing.ron
Failed in:
struct martin_core::config::env::OsEnv, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/env.rs:53
struct martin_core::config::IdResolver, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/id_resolver.rs:10
struct martin_core::config::env::FauxEnv, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/env.rs:76
--- failure trait_missing: pub trait removed or renamed ---
Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_missing.ron
Failed in:
trait martin_core::config::env::Env, previously in file /tmp/.tmpiF3o7Z/martin-core/src/config/env.rs:20
```
<details><summary><i><b>Changelog</b></i></summary><p>
## `mbtiles`
<blockquote>
##
[0.15.2](mbtiles-v0.15.1...mbtiles-v0.15.2)
- 2026-02-11
### Other
- restrict `unused_trait_names` for trait imports
([#2542](#2542))
</blockquote>
## `martin-core`
<blockquote>
##
[0.3.0](martin-core-v0.2.6...martin-core-v0.3.0)
- 2026-02-11
### Added
- *(unstable-cog)* Change tile path semantics for COG sources to match
other sources, expose COG bounds, center and tileSize in TileJSON
([#2510](#2510))
### Other
- *(martin-core)* [**breaking**] remove the configration from the
martin-core crate
([#2521](#2521))
- restrict `unused_trait_names` for trait imports
([#2542](#2542))
</blockquote>
## `martin`
<blockquote>
##
[2.0.0](martin-v1.3.0...martin-v2.0.0)
- 2026-02-11
### Added
- *(srv)* Add HTTP 301 redirects for common URL mistakes
([#2528](#2528))
- *(unstable-cog)* Change tile path semantics for COG sources to match
other sources, expose COG bounds, center and tileSize in TileJSON
([#2510](#2510))
### Fixed
- logs not being integrated with the `path-prefix` correctly
([#2549](#2549))
- Make sure that `route-prefix` does not break the UI when using
trailing slash urls
([#2541](#2541))
### Other
- *(deps)* Bump the all-npm-version-updates group across 2 directories
with 7 updates ([#2553](#2553))
- Add test coverage for header handling in tilejson requests
([#2529](#2529))
- *(martin-core)* [**breaking**] remove the configration from the
martin-core crate
([#2521](#2521))
- *(deps)* autoupdate pre-commit
([#2545](#2545))
- restrict `unused_trait_names` for trait imports
([#2542](#2542))
- *(deps)* Bump the all-npm-version-updates group across 2 directories
with 12 updates ([#2533](#2533))
</blockquote>
</p></details>
---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Using
--route-prefixbreaks the UI.If I start Martin with
--route-prefix /martin, I can't use the UI because index.html is always going to reach out to/_/assets/*for its static assets.Steps to reproduce from the release:
./martin --webui enable-for-all --route-prefix /martin my.mbtiles/_/assets/index-Cw7_pX04.js/_/assets/maplibre-CAAeTMl5.jsTesting the changes:
just runand see that http://localhost:3000 worksjust run --webui enable-for-all --route-prefix /martinand see that it breaks. You might need to setVITE_MARTIN_BASE=http://localhost:3000/martinin.env.localif you have that set.Full disclosure, vite (and frontend in general) isn't my main thing, so I'm not sure if this has greater implications than I realize. Feedback welcome!
This may relate to #2207