merefield
(Robert)
4์ 24, 2026, 5:57์คํ
1235
So a sneak peak of some prototype work Iโm doing.
Iโm going to be looking at giving early access to this for current and recent backers for a period (regardless of sponsorship level)
Going forward I have will be offering early access to some new features from $7/month for individual sponsors/small communities and $40/month for business.
5๊ฐ์ ์ข์์
merefield
(Robert)
4์ 25, 2026, 10:33์ค์
1236
Initial invites to early access have just gone out for current sponsors. Iโll widen this to past sponsors soon and this access will remain for a period, after which maintaining a minimum level of sponsorship will be required.
Sponsor list is reviewed daily, so please consider sponsoring me if you are keen to use the latest features on Locations and/or generally keen to support my work.
Backers will always get fixes first.
Features will be migrated to the public repo on a case by case basis and after a delay โฆ
3๊ฐ์ ์ข์์
nathank
(Nathan Kershaw)
5์ 6, 2026, 4:21์ค์
1237
Iโve just been implementing the awesome Automated User Location Determination, which involves configuring Maxmind properly. This was on a new instance.
The new app.yml is lovely and lean, but doesnโt include the Maxmind ENV variables as a comment any more.
If this is to be more accessible to less confident self-hosting sysadmins, we might need a clear explainer - and to point them to this topic:
What is MAXMIND and why would I want it?
Discourse uses MAXMIND to provide geographical information for reverse IP lookups.
[location]
Without Maxmindโs database youโll see something like this:
[nolocation]
Or perhaps youโve noticed this message fly by when you rebuild your container:
MaxMind IP database download requires an account ID and a license key
Please set DISCOURSE_MAXMIND_ACCOUNT_ID and DISCOURSE_MAXMIND_LICENSE_KEY. See https://meta.discourse.org/t/configure-maxmind-for-reverseโฆ
Also - a minor UX thing
An unwanted (by me anyway) link to the map pops up on the sidebar, and this isnโt governed by any settings. Iโve hidden it thus:
// hide the users map link
.sidebar-sections li[data-list-item-name="users map"] {
display: none;
}
Perhaps it is time to deprecate both this and the (setting controlled) topic map link? These can now easily be added via the standard UI if the admin wishes to have them.
1๊ฐ์ ์ข์์
Moin
5์ 6, 2026, 6:19์ค์
1238
Links the admin adds to the sidebar are currently not translatable. So for a community where users might prefer different interface languages, the plugin adding the link to the sidebar provides the option to translate and display them in multiple languages.
2๊ฐ์ ์ข์์
gilles
5์ 9, 2026, 12:35์คํ
1239
I noticed that I cannot enable geolocation for topics in a category.
It doesnโt offer to save the changes (Iโm on version 2026.5.0-latest )
1๊ฐ์ ์ข์์
merefield
(Robert)
5์ 9, 2026, 10:46์คํ
1240
This should be fixed now.
The fix should be deployed to Early Access and Public versions of the repo, together with a whole host of compatibility fixes.
As a part of that work Iโve increased the difference between the versions.
The Early Access version exposed to sufficiently privileged Sponsors has the following features which the public version of Locations currently lacks:
Title
Description
Users-map globe
Adds an interactive 3D globe view for the Users Map, with avatars placed by location, drag/touch rotation, zoom, reset, search focus, user-card clicks, and always-on bump mapping.
Globe screen saver
Optional experimental idle screen saver showing a rotating 3D globe with user avatars below the header.
Enhanced users-map filters
Adds controls for result limit, search type, search term, and group filtering on the Users Map.
Nearby topic filter
Adds a nearby topic-list filter based on distance from the current userโs location.
IP-based user location lookup
Automatically estimates and stores user locations from IP data, with configurable trigger mode, granularity, cooldown, GeoNames resolution, skip-if-existing behavior, and debug logging.
This means the maintained public version has been slightly downgraded. Iโm afraid thatโs necessary to ensure my sponsors get sufficient benefit.
If you would like these extra features, consider sponsoring me and making sure you go for a monthly tier which includes Early Access. Sponsoring me at the right tier will give you access to the Early Access version within 24 hours.
3๊ฐ์ ์ข์์
gilles
5์ 10, 2026, 7:45์ค์
1241
Thanks @merefield for your speed .
1๊ฐ์ ์ข์์
Roi
8์ 7, 2026, 11:10์คํ
1242
์ต๊ทผ Discourse ๋ฒ์ ์์ ๋น์ถ์ฒ(deprecation) ์๋ฆผ์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ์ต๋๋ค:
[PLUGIN discourse-locations] ๋น์ถ์ฒ ์๋ฆผ: model:composer์ api.modifyClass๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋น์ถ์ฒ๋ฉ๋๋ค. ๋์ addModelField, addModelAccessor/addModelGetter/addModelSetter, addModelMethod, addModelSaveProperty, addModelCallback API๋ฅผ ์ฌ์ฉํ์ธ์. [Discourse 2026.8๋ถํฐ ๋น์ถ์ฒ] [deprecation id: discourse.modify-class-model]
์์ ์ ์น๊ตฌ์๊ฒ ๋ฌผ์ด๋ณด์์ง๋ง, ์ ์ด๋ณด์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ค๋ ฅ์ผ๋ก๋ ํด๊ฒฐํ๊ธฐ๊ฐ ํ๋ ๊ฒ ๊ฐ์ต๋๋คโฆ
1๊ฐ์ ์ข์์
Jagster
(Jakke Flemming)
8์ 8, 2026, 10:45์ค์
1243
์ฐธ๊ณ :
[๊ด๋ฆฌ์ ๊ณต์ง] ํ๋ฌ๊ทธ์ธ 'discourse-locations'์๋ ์
๋ฐ์ดํธ๊ฐ ํ์ํ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. (id:discourse.modify-class-model)
Viddekla
(Julian Mรผller)
8์ 8, 2026, 11:02์ค์
1244
์ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค:
[Bildschirmfoto 2026-08-08 um 13.00.26]
[Admin-Hinweis] Plug-in โdiscourse-locationsโ enthรคlt Code, der aktualisiert werden muss. (ID:discourse.modify-class-model)โ
[Admin-Hinweis] Eines deiner Themes oder Plug-ins enthรคlt Code, der aktualisiert werden muss. (ID:discourse.legacy-array-like-object.proxied-array)
Seit dem letzten Update erhalte ich stรคndig diese beiden Fehlermeldungen. Was kann ich da tun?
merefield
(Robert)
8์ 8, 2026, 5:49์คํ
1245
์ด ๋ฌธ์ ๋ @cvx ๋์ ๊ธฐ์ฌ๋ก ํด๊ฒฐ๋์์ต๋๋ค (์ฌ์ค 5์ผ ์ ์ ํด๊ฒฐ๋์์ต๋๋ค! )
์ต๊ทผ PR
PR
์ฃผ์ ๋ชฉ์
์์ฑ์
#168
๋ณด์ ๊ฒฝ๊ณ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Ruby ๋ฐ JavaScript ์์กด์ฑ์ ์
๋ฐ์ดํธํฉ๋๋ค.
angusmcleod
#169
๋น์ถ์ฒ๋๋ Composer modifyClass ์ฌ์ฉ๋ฒ์ ํ๋์ ์ธ ๋ชจ๋ธ ํ์ฅ API๋ก ๊ต์ฒดํฉ๋๋ค.
cvx
#171
Composer ์์น ๊ธฐ๋ณธ๊ฐ ํ
์คํธ๋ฅผ ํ์ฅํ๊ณ ์นดํ
๊ณ ๋ฆฌ ์ ํ ์ ์์น ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ์์ ํฉ๋๋ค.
merefield
#172
ํ๋ฌ๊ทธ์ธ ๋ฆฐํ
๋ฐ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ํ์ฌ Discourse ํ๋ฌ๊ทธ์ธ ์ค์ผ๋ ํค๊ณผ ๋๊ธฐํํฉ๋๋ค.
merefield
#173
use-after-free ์ทจ์ฝ์ ์ ์์ ํ๊ธฐ ์ํด Ruby json ์ ๋ฌผ์ 2.21.1์์ 2.21.2๋ก ์
๊ทธ๋ ์ด๋ํฉ๋๋ค.
dependabot
#174
์์น ๊ฒ์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๋ณต์ํ๊ณ , ๋น ์ง์ค์ฝ๋ฉ ์์ฒญ์ ๋ฐฉ์งํ๋ฉฐ, ๋งต ์์ ์ฅ์น ๋ฐ ํ๊ท ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ ํฉ๋๋ค.
merefield
๊ธฐ์ฌํด ์ฃผ์ @angus ๋๊ณผ @cvx ๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด ๋ณ๊ฒฝ์ฌํญ์ ๋ฌด๋ฃ ํ๋ฌ๊ทธ์ธ๊ณผ ์คํฐ์ ์ ์ฉ ์กฐ๊ธฐ ์ ๊ทผ ํ๋ฌ๊ทธ์ธ ๋ชจ๋์ ์ ์ฉ๋์์ต๋๋ค.
๋ํ, Chatbot ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์์น๋ฅผ ๋
ผ์ํ ์ ์๋๋ก ํ๋ ์ฝ๋๋ ์คํฐ์ ์ ์ฉ ์ ์ฅ์์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ญ๋์ ํ์ธต ๋ ๊ฐํํ๊ธฐ ์ํด Locations Early Access๋ก ์ด๋๋์์ต๋๋ค.
5๊ฐ์ ์ข์์
merefield
(Robert)
8์ 12, 2026, 4:59์คํ
1246
์ค๋ ์ ๋ ์ผ๋ฆฌ ์ก์ธ์ค์์ ๋ฉ์ธ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฌ๋ฌ ๋น๊ธฐ๋ฅ์ ๊ฐ์ ์ฌํญ์ ๋ฐฑํฌํธํ์ต๋๋ค:
main โ early_back_port
merged 04:54PM - 12 Aug 26 UTC
Previously, fixes and performance improvements developed on the early-access braโฆ nch remained coupled to features that were not intended for the base plugin.
This change back-ports improvements that belong in the public base plugin, providing a cleaner and tested foundation for a separate early-access extension. It does not add a new product feature or expose an early-access capability; it corrects, optimizes, and refactors existing base-plugin behavior.
## Improvements included
- Parse stored user locations consistently before upserting map records:
- Accept serialized JSON and already-parsed hashes.
- Ignore malformed, missing, or incomplete values safely.
- Preserve the complete persisted location data when valid.
- Tighten users-map responses and selection:
- Return only the identity, avatar, latitude, and longitude data map clients need.
- Respect the core `enable_names` setting.
- Sort by `last_seen_at DESC`, place never-seen users last, and break equal timestamps by directory-item ID.
- Apply the existing `location_users_map_limit` setting after ordering, so the default 50-user cap consistently selects the most recently active eligible users.
- Extract the standard map topic query into a reloadable `TopicQuery` concern:
- Return mapped topics only.
- Enforce the configured maximum topic count.
- Preserve global and category-specific closed-topic filtering.
- Use the serializer-provided user location for composer defaults while retaining the custom-field fallback.
- Parse user locations in regular directory responses instead of returning JSON strings.
- Allow long, unbroken location labels to wrap without escaping the user card.
- Remove the legacy global `DMenu` modal patch now that Discourse core handles keyboard input in float-kit menus rendered from modals.
- Add browser regressions for real keyboard entry and browser-geolocation selection inside the add-location modal.
- Use Zeitwerk for namespaced plugin code and the supported topic-list custom-field preload API.
- Refresh development and release tooling:
- Remove the obsolete legacy ESLint configuration now that the repository uses the flat config.
- Enforce the declared Node engine and prevent pnpm from silently installing peer dependencies.
- Exclude vendored Leaflet styles from plugin style linting.
- Check plugin version increments with Ruby's `Gem::Version`, removing the workflow's Node and npm dependency.
- Bump the plugin patch version to `7.3.6`.
## Out of scope
- Nearby topic filtering and its distance or bearing calculations.
- Automatic IP-based user-location lookup, including MaxMind and GeoNames integration.
- Location-aware Chatbot tools.
- The 3D users-map globe, globe textures, and idle screensaver.
- Early-access users-map controls for group, search type, search term, and result-limit filtering.
- Early-access-only settings, routes, assets, jobs, supporting libraries, and tests.
- Renaming the private plugin or changing sponsor installations to load both repositories.
- Adding the backend modifiers and frontend outlets needed for the private repository to become a duplication-free extension; those belong to the next extraction phase.
## Validation
- Focused Ruby coverage: 14 examples, 0 failures.
- Plugin browser suite: 23 passing, 2 pre-existing skips, 0 failures.
- The skipped QUnit cases cover category and global topic-map population; both scenarios are exercised with real Leaflet rendering in `spec/system/topic_map_spec.rb`.
- Core modal-menu browser regression: 1 example, 0 failures.
- Focused Ruby and frontend linting passed.
- Style linting, type checking, and the complete plugin `pnpm lint` suite passed.
2๊ฐ์ ์ข์์
merefield
(Robert)
8์ 21, 2026, 2:02์คํ
1247
๋ถ๋งํฌ ๋ฉ๋ชจ ํ๋ฌ๊ทธ์ธ ๊ณผ ์ ์ฌํ๊ฒ, Locations๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ํ๋ก ์คํฐ์๊ฐ ์๋๋๋ผ๋ ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
์ด๋ ์ ์ง๋ณด์ ์์
์ ๊ฐ์ํํ๊ธฐ ์ํด ํ์ํ ์กฐ์น์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ๋ ์ ์ํ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ํ ์ด์ ์ โ์ผ๋ฆฌ ์ก์ธ์คโ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฒ์ ์ ์คํฐ์ ์ ์ฉ ๊ธฐ๋ฅ์ด ํฌํจ๋ ํ์ ๋ ํ๋ฆฌ๋ฏธ์ ํ์ฅ์ผ๋ก ํ๋ฆฝํฉ๋๋ค.
๊ธฐ์กด์ ์ผ๋ฆฌ ์ก์ธ์ค ํด๋ก ๋ช
๋ น์ด๋ฅผ app.yml์์ ๋ค์์ผ๋ก ๊ต์ฒดํ์ธ์. ์ด๋ ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ์ ๋จผ์ ๋ฐฐ์นํด์ผ ํฉ๋๋ค:
git clone https://github.com/merefield/discourse-locations.git
git clone https://YOUR_GITHUB_USERNAME:YOUR_TOKEN@github.com/merefield/discourse-locations-pro-ext.git
๊ทธ ํ Discourse๋ฅผ ์ ์์ ์ผ๋ก ๋ค์ ๋น๋ํ์ธ์. ๊ธฐ์กด ์์น ๋ฐ์ดํฐ๋ ์ ์ง๋๋ฏ๋ก ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ ํ์ํ์ง ์์ต๋๋ค.
์ด๋ฆ ๋ณ๊ฒฝ ํ์๋ ์ ์ฅ์ ์ ๊ทผ ๊ถํ์ ์ ์ง๋์ด์ผ ํฉ๋๋ค. ์ ๊ทผ ๋๋ ์ค์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ์์ง๋ก ์๋ ค์ฃผ์๋ฉด ๊ธฐ๊บผ์ด ๋์์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋น์คํฐ์ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ์ ์
๋ฐ์ดํธ๋์์ง๋ง, ์ฌ์ดํธ๋ ํด๋น ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ ์์ ์ผ๋ก ๋น๋๋ ๊ฒ์
๋๋ค!
๊ณ์๋ ๊ด์ฌ๊ณผ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
GitHub์์ ์ 7๋ฌ๋ฌ ์ด์์ ๋ธ๋ก ์ฆ ๋ฑ๊ธ์ผ๋ก ์คํฐ์๋ฅผ ๋ฑ๋กํ๋ฉด Locations Pro์ ์ ๊ทผํ ์ ์์ต๋๋ค
๊ธฐ๋ฅ
Discourse Locations๋ ์์ ํ ์์น ์ ์ฅ, ์ง์ค์ฝ๋ฉ, ์ง๋ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ์ ํ์ ์ธ Pro ํ์ฅ ๊ธฐ๋ฅ์ ๊ณ ๊ธ ํ์, ์๋ํ, ์ฌ์ฉ์ ์ง๋ ํ์๋ฅผ ์ถ๊ฐํ๋ฉฐ, ์ด ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ์ ์๊ตฌํฉ๋๋ค.
๊ธฐ๋ฅ
๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ
Pro ํ์ฅ
๊ตฌ์กฐํ๋ ์ฃผ์ ์์น ๋ฐ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์
๋ ฅ ํ๋
โ
์ฌ๋ฌ ์ ๊ณต์๋ฅผ ํตํ ์ ํ ๋๋ ํ์ ์ง์ค์ฝ๋ฉ
โ
์นดํ
๊ณ ๋ฆฌ ๋ฐ ์ฌ์ดํธ ์ ์ฒด ์ฃผ์ ์ง๋ ๋ณด๊ธฐ
โ
๊ฒ์๋ฌผ, ํ๋กํ, ์นด๋, ๋๋ ํฐ๋ฆฌ ์ง๋์ ํ์๋๋ ์ฌ์ฉ์ ์์น
โ
์ง์ญ ์ด๋ฆ ๋ฐ ์ฌ์ฉ์ ์ด๋ฆ ๊ฒ์์ด ๊ฐ๋ฅํ Leaflet ์ฌ์ฉ์ ์ง๋
โ
๊ตฌ์ฑ ๊ฐ๋ฅํ ์์น ๋ผ๋ฒจ, ๊ตญ๊ธฐ, ์ง๋ ๋ง์ปค, ํด๋ฌ์คํฐ๋ง, ํ์ผ
โ
์ ์ฃผ์ ๋ฅผ ํ์ฌ ์ฌ์ฉ์์ ์์น๋ก ๊ธฐ๋ณธ ์ค์
โ
IP ๊ธฐ๋ฐ ์ฌ์ฉ์ ์์น ์๋ ์ถ์
โ
๋
์
ํ์ฌ ์ฌ์ฉ์ ์์น ๊ธฐ๋ฐ์ ์ธ๊ทผ ์ฃผ์ ํ์
โ
๋
์
์์น ์ธ์ Discourse Chatbot ๋๊ตฌ (์ ํ)
โ
๋
์
๊ถํ ์ธ์ ๊ทธ๋ฃน ๋ฐ ๊ฒฐ๊ณผ ์ ํ ์ฌ์ฉ์ ์ง๋ ํํฐ
โ
๋
์
์ธํฐ๋ํฐ๋ธ WebGL ์ฌ์ฉ์ ์ง๋ ์ง๊ตฌ๋ณธ
โ
๋
์
์ ํด ์ง๊ตฌ๋ณธ ํ๋ฉด ๋ณดํธ๊ธฐ
โ
๋
์
Pro๋ฅผ ์ค์นํ๋ฉด ๋
์ ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋๋ฉฐ, ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ์ ๋์ฒดํ์ง๋ ์์ต๋๋ค.
merefield
(Robert)
8์ 27, 2026, 9:46์คํ
1248
์ด์ ์๋ ์ฐํ ์กฐ์น๋ก ์ถ๊ฐ๋์์ง๋ง, ์ดํ PM CSS๊ฐ ์ผ๋ฐ์ ์ธ ์ฃผ์ ์ฒ๋ผ ๋ณด์ด๊ฒ ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ์ ๊ฑฐํ๊ณ , PM ์ฌ์ฉ์ ์์น ๋ผ๋ฒจ ์ ๋ ฌ์ ๋ค์ ๊น๋ํ๊ฒ ๊ฐ์ ธ์ค๊ฒ ๋์์ต๋๋ค:
main โ fix/narrow-post-location-alignment
merged 09:37PM - 27 Aug 26 UTC
Previously, narrow PM post metadata applied a legacy 44px left margin to user loโฆ cation labels, which could misalign long locations against the current core PM layout.
This change removes the obsolete PM-specific offset so location labels use the shared post metadata alignment.
1๊ฐ์ ์ข์์
neilernst
(Neil)
9์ 2, 2026, 4:24์ค์
1249
์ฌ์ฉ์ ์ ์ ์์น๋ฅผ ์ ์ฅํ ๋ฐฉ๋ฒ์ด ์์๊น์? ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ์ฌ๋์ด ์ฌ์ฉํ๋ ์ธ๋ด ์ฐ์ฅ ๊ฐ์ ๊ฒฝ์ฐ, ์ด๋ฆ์ด ์๋๋ผ ์ขํ๋ก ์์น๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก ์ฝ๊ฒ ๊ฒ์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋/๊ฒฝ๋ ์ขํ ์ธํธ๋ฅผ ์ฌ์ฉ์ ์ง์ ์ด๋ฆ๊ณผ ํจ๊ป ์ ์ฅํ ์ ์๋ค๋ฉด ๋งค์ฐ ์ ์ฉํ ๊ฒ์
๋๋ค.
1๊ฐ์ ์ข์์
merefield
(Robert)
9์ 2, 2026, 7:12์ค์
1250
๋ค. ์ขํ๋ง ์ฃผ์ ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
์๋ ์ฌํญ์ ํ์ธํด ์ฃผ์ธ์:
์
๋ ฅ ํ๋๋ฅผ ๋๋ฉด ์์น ์ ๋ณด ์ ๊ณต์์ ํด๋น ์์น ํญ๋ชฉ์ด ์๋ ํ ์ผ๋ฐ ๊ฒ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: