All Activity
- Past hour
-
adrian started following Weekly update – 12 June 2026 and PW 3.0.266 – Core updates
-
Just a note for everyone to be aware of this critical bug in this version if you have any save hooks: https://github.com/processwire/processwire-issues/issues/2269
- 1 reply
-
- 1
-
- Today
-
I don't think I actually remapped the space keys to something, but you could. You could make it a Hyper key or whatever. I rarely use that keyboard nowadays but I used it a lot for writing. It's such a great keyboard for typing for hours. Getting some special characters is quite hard and you need to learn a lot of different new and unnatural key combos, so not for daily coding tasks - neither in the past, nor today. Finally! 🤣
-
That's a really good use case, @adrian, thanks for spelling it out — "grab the original, tweak it locally, upload it back as the replacement" is exactly the kind of round-trip the library should make easy, and it pairs naturally with the Replace button that's already there. You're right that pulling the full-size original out of PW is unexpectedly fiddly without something like RockAdminTweaks. So I'm sold — a download affordance on each thumbnail earns its place. We'll add it. On the Replace/extension thing: glad that cleared it up. And on the back of this thread we've actually loosened one corner of it — .jpg ↔ .jpeg (and .tif ↔ .tiff) are the same format, and since Replace writes onto the original filename anyway, rejecting a .jpeg over a .jpg was just overly strict. That's fixed now, so the format match is about the actual format, not the literal extension string. Replace action now gives you visible, inline feedback right next to the affected row — a green confirmation on success and a red message with the actual reason on failure (so a problem like a non-writable file no longer fails silently). As for renaming: YES: Renaming a file through the library isn't just a cosmetic relabel — it rewrites the references too. It updates the field/file on disk and then rewrites the embeds in your rich-text (RTE) fields that point at the old URL, including embeds that live inside (Matrix)Repeaters, so the "Used in" links keep resolving and nothing 404s. That's the whole reason rename is a first-class action in the library rather than something you'd hand-edit. Cheers, Mike
-
My reasoning for wanting a download is so it's easy to get it, modify it in a local image editor and upload it again as the replacement for it. I feel like this is a good and valid use case. I do use RockAdminTweaks to add a download button to an image in the page editor, but without that, downloading the fullsize version of any image in PW is actually very fiddly. Thanks for the explanation about the replace restricting the extension. I didn't realize just how it worked, keeping the same filename etc. I am related note, does renaming a filename in the interface also replace all references to it in RTE fields?
-
@adrian, its very simpel activating columns and reordering them, on desktop its simply drag and drop, on mobile you got arrows. The checkboxes are shown only when active, clicking on the column name (or row) checks/unchecks. Bildschirmaufnahme 2026-06-19 um 20.08.51.mov Download button: I'm not sure this one fits the concept, to be honest. The library is meant as a central audit/management view of images that already live in your fields — where they're used, duplicates, inline metadata edits — and the original files are already reachable through their normal URLs (and via the page editor). A "download" action sort of cuts across that purpose, so before we add UI for it I'd rather understand what you're actually after. What's the use case? A few things it could mean, and they'd point at different solutions: grabbing originals to re-use elsewhere on the site → that's really what Insert/Choose from library already covers pulling files out for offline backup / handing to a client → more of an export concern than a per-thumbnail button just quick access to the full-size original → a click on the thumb takes one to the file and all variations. If you tell me the scenario, I can figure out whether it belongs here at all, or whether there's a better-fitting way to get you there. Replace and extensions: That one's intentional, though I can see why it feels off. Replace deliberately keeps the exact same filename — and therefore the same URL — so that every existing reference to the image (field relations, rich-text embeds, the "Used in" entries) keeps working untouched. Since the extension is part of the filename, allowing photo.jpg → photo.png would actually change the URL and silently break all those references. So Replace pins the format on purpose; it's a "swap the bytes behind this exact file" operation, not a "change the format" one. Our daily use case is replacing unretouched layout files with the finished images. If you genuinely want a different format, deleting the old image and uploading the new one is the right path — that gives you a new filename/URL, which is what a format change really is under the hood. The field's allowed-extensions setting is a separate thing (it governs new uploads); Replace is intentionally stricter than that. I could probably make the error message clearer about why, though — point taken. Cheers, Mike
-
Sorry, I just noticed the column ordering options - I know it explains what to do, but I think a move icon next to each one would make it clearer. I also do feel like there needs to be an option to set the default order in the settings because site editors will likely not realize they can reorder them.
-
Sorry @Mikel - the page column was staring me in the face, but because of the order my columns are appearing it was right next to the image and I think I sort it felt it was an image label or something. But I am curious how you are changing the column order? I also can't get the Used In column to appear. Should there be a checkbox to check here: Another request, but could you add a download button to each thumbnail? Also, when I use the "Replace" button, it won't let me upload an image with different extension to the existing image - is this intended? It feels off - surely any extension supported by the image field should be allowed?
-
Good catch, @adrian, thanks. It was the user page, not the separate tab. Confirmed and fixed. Already on main if you want to pull it. (via GitSync) If I understand this correctly, we already have this feature (and more): Just activate the columns "page" and "used in" and these show you all pages the image is uploaded to (page) or placed in a rich text field (used in). Page column is showing duplicates and the Used in modal shows the corresponding fields. And of course all with links to their pages. But maybe you meant something different? Always open to improvements 🙂 Cheers, Mike
-
Hi @Mikel - what do you think about having a column that lists (and links to: edit and view) the page that the image is uploaded to? Obviously the parent page, not repeater item pages. Also, I am seeing an issue where editing an image that is on a user page and on separate tab (not the main content one) doesn't strip out all of the other fields - I actually get the full page edit interface. I haven't tested, but I expect it's the user page issue, rather than the separate tab.
-
Update (1.0.4) – a grid view, and revamped icons Hi all, small but nice update. A client asked for a square-tile grid view, so it's in: alongside the existing masonry gallery and the data table, you now get a uniform thumbnail grid. The three layouts sit behind one toggle (grid / masonry / table), styled to line up with ProcessWire's own image-field view switcher so it feels native rather than bolted on. While doing that we also reworked the toolbar icons. The upcoming core moved its icon set to FontAwesome 6, where a few of the names we relied on changed or dropped out, so the toggle could end up blank depending on your core. To keep it stable across versions, the view/columns/manage icons are now bundled with the module itself instead of leaning on whatever FontAwesome the core ships – so they render the same on current and upcoming ProcessWire. Update via GitSync or the modules directory. Cheers, Mike
-
Marvin Scharle started following Page Bookmarks
-
Marvin Scharle started following News & Announcements
-
Marvin Scharle started following Module: AIOM+ (All In One Minify) for CSS, LESS, JS and HTML and Page Ratings
-
This is already possible, but you do need either an external LLM or a good local one (like Qwen Code 2.5, or Gemma 4) with the hardware to handle it. I am running Qwen 3 and Qwen Code 2.5 on my iMac and they are good, but slow (my iMac is from 2017) and I'm using 7-9b parameter models, so they are pretty limited in what they can do. These local models have ProcessWire knowledge, but not at the level that external models do. Qwen 3 is cool because you can watch its thought process before it answers your prompt. But Qwen Code 2.5 does better with PW, despite being older. I think it's highly unlikely that Rambler would ever be good enough to even be a replacement for a pre trained local model. Even those open source models have millions of dollars behind them. But I am hoping that Rambler gets good enough to have some sort of production value eventually, so I'm going to keep rambling on. 🙂
-
@Jonathan Lahijani yes and no. When we use the MLP (multilayer perceptron) model then we provide it with a pre trained GloVe file for vocabulary. We're using the 100d file from Stanford: https://nlp.stanford.edu/projects/glove/ For the transformer model, apparently the pre trained GloVe file doesn't help. I'm not really sure I understand why though, I'm still learning. I get similar results either way. In any case, the scale I'm working at is small and more educational than practical. The models work, and learn the general order of words, and how some words relate to one another. But it's Rambler, it rambles on like a crazy person, and it's not yet clear to me that it will ever be good enough to have a production use with my limited scale. Though I'm going to keep at it. One thing I've learned is that the "magic" behind what we see with frontier models has a lot to do with extremely large scale, both in hardware and training data. The ability to code happened kind of accidentally. It was apparently a surprise. As the scale increased, the models started coding, without it being the actual goal or intention. Another thing I've learned is that while many people understand the technology that goes into AI models, nobody fully understands how you go from models that complete sentences and answer questions to models that seemingly reason, understand humor, think and solve complex problems that they weren't actually trained on. (Though someone correct me if that's changed). While I now feel like I have a basic understanding of the technology and how it works, there is still a sense of something beyond understanding, at least when the technology is combined with scale. Definitely a interesting subject!
-
It is from 2021. I do not see any trace of the new version having replaceable battery: https://www.logitech.com/en-us/shop/p/mx-keys-s As always, companies are so proud to be green: "15.87 kg CO2e carbon footprint." Yet they want to force me to buy a brand new unit if I want a better battery. Planned obsolescence: https://en.wikipedia.org/wiki/Planned_obsolescence at its finest. So we have less CO2 and more junk. But: https://www.nasa.gov/centers-and-facilities/goddard/carbon-dioxide-fertilization-greening-earth-study-finds/ "Studies have shown that plants acclimatize, or adjust, to rising carbon dioxide concentration and the fertilization effect diminishes over time." I must believe one study, but not the other one, and they will tell me which study to believe in. OK, I get that. So they want me to believe that while nature is recovering, that’s actually bad news, because their selected studies say so, and who am I to question their selected studies? I am just a dumb IT guy, and they know everything better, since they publish a lot of papers no one reads.
-
ryan started following PW 3.0.266 – Core updates
-
This week we have ProcessWire 3.0.266 on the dev branch. The focus of this version has primarily been on expanding our documentation tools and API.md documentation files. As part of the process, WireTests files are added for each documented class. In addition, the WireApiDocs class got several major upgrades, plus its own documentation file: https://processwire.com/api/ref/wire-api-docs/ Other classes that gained custom API.md documentation and tests files this week were: Fieldtype: https://processwire.com/api/ref/fieldtype/ Selectors and Selector: https://processwire.com/api/ref/selectors/ Pages Versions: https://processwire.com/api/ref/pages-versions/ Wire Markup Regions: https://processwire.com/api/ref/wire-markup-regions/ Wire Text Tools: https://processwire.com/api/ref/wire-text-tools/ Wire Random: https://processwire.com/api/ref/wire-random/ Wire API Docs: https://processwire.com/api/ref/wire-api-docs/ The Fieldtype API.md was written by Claude Sonnet, Selectors/Selector was written by Claude Opus, PagesVersions was written by Kimi K2.7 and the rest were written by MiMo Pro. Each goes through multiple rounds of proofreading and testing. Proofreading is either done by GPT 5.5 or Claude Sonnet. Following that, GPT 5.5 builds tests for the class using the WireTests framework. After running tests, we find items to fix either in the API.md or the core. Then I do a round of proofreading and edits. Finally, both the class API.md file and the tests are committed to the core. At this point, most of the major classes in ProcessWire have their own API.md documentation files and tests, so now we're focused on some of the more specific tools and classes. I also wanted to mention that the Modules class got some major CLI improvements. Here's the full CLI command set available for the $modules API now: Modules ======= php index.php modules list [site|core] List installed modules, optionally limited to site or core modules php index.php modules unlist [site|core] List uninstalled modules, optionally limited to site or core modules php index.php modules info <name> [property] Get JSON of all info for module or optionally info property php index.php modules install <name> Install module php index.php modules uninstall <name> Uninstall module php index.php modules exists <name> Does given class name resolve to a module? (Yes/No) php index.php modules installed <name> Is module installed? (Yes/No) php index.php modules config <name> Get configuration data for module as JSON php index.php modules config <name> <property> Get value for property in module config php index.php modules dir <name> Query ProcessWire modules directory for module info php index.php modules updates [name] List available updates for installed site modules, or check one module php index.php modules download <name> [--install] Download module from PW modules directory (+ optionally install) php index.php modules download <url> [--install] Download module ZIP file from https URL (+ optionally install) php index.php modules update <name> [--force] Download and apply an available module update php index.php modules delete <name> Delete/erase uninstalled module from file system Optionally append --json to any of the above commands for more verbose JSON output While I'm posting CLI commands, here's the full command set for the updated WireApiDocs class: WireApiDocs =========== php index.php docs list List classes with API.md docs php index.php docs list 'Class*' List classes matches wildcard pattern php index.php docs list-verbose List classes with API.md docs in verbose mode php index.php docs list-verbose 'Class*' List classes matching pattern in verbose mode php index.php docs get <class> Get API docs for given class php index.php docs toc <class> Get table of contents for given class php index.php docs chapter <class> <num> Get body for given class and chapter number php index.php docs chapter <class> 'Title' Get body for given class and chapter title php index.php docs methods <class> Get public methods for given class (* prefix = hookable) php index.php docs method <class> <method> Get details for a single method (JSON only) php index.php docs classinfo <class> Get class info: parent, interfaces, traits php index.php docs constants <class> Get public constants for a class php index.php docs properties <class> Get @property annotations for a class php index.php docs groups <class> Get #pw-summary-[group] descriptions for a class php index.php docs vars List all API variables and the classes they represent WireApiDocs commands return JSON by default. To make command return plain text (not JSON), append `-text` to the command name, i.e. `list-text` See the dev branch commit log for additional core updates this week: https://github.com/processwire/processwire/commits/dev/. If using AgentTools, grab this week's new version too. More next week. Thanks for reading and have a great weekend!
- 1 reply
-
- 10
-
-
-
Thanks a lot for your help, very much appreciated! As you suggested, I created another blank folder "htaccesstest" and uploaded a blank index.html into that folder. Called that folder via URL in a browser and received a blank page, as expected. As soon as I set up a .htaccess and a .htpasswd file, I was again redirected to Process Wire's 404 page. However, no corresponding line was added to errors.txt or exceptions.txt in site/assets/logs/ To see what happens and maybe provoke an error notification, I removed the .htpasswd file, while the .htaccess was still referencing it. (I am using only absolute paths.) Again, a 404 has been shown, without additional error messages in any log file. Regarding the ProcessWire installation's .htaccess file: Since I tested both with standard index.php and index.html files, I don't believe file extensions could cause this issue. Maybe I will have to look for an alternative approach... Thanks again!
-
Is that an early version? I imagine they have either replaceable batteries now., I really like the mini Pebble by Logitech and it has replaceable AAA batteries. Probably too small for your usage with no num pad. https://www.logitech.com/en-eu/shop/p/pebble-keys-2.920-011851 I appreciate the multi device connection support. Handy when I need to switch from work to gaming machines 🙂
-
Happy Friday, everyone. I'm starting this Friday with something I meant to do last Friday! The latest version of MediaHub (1.19.25) is now available, and thanks to our testers, we have improvements across the UI, module performance and some new features too. Existing Media hubbers: Download here New to hubbing: Read here Full changelog: Read here What's new and improved in 1.19.25... Upload screen refresh Uploading is one of the first things a new user will do, so the first impression should be positive, distraction-free and simple. But behind a screen that seemingly has 'just one job', people asked if they could organise their uploads from here. While you can do this later within the Library, being able to associate your uploads with Collections and Labels at this point across multiple images will save you a lot of time and asset admin. An "Organise uploads" bar above the dropzone lets you assign Collections and Labels before the batch starts. If one doesn't exist yet, you can create it from here. A scrollable card queue replaces the old list. Each file shows a thumbnail or file-type icon, inline status, and a per-file progress bar. Oversized or unsupported files stage with a clear warning and are excluded from the upload. Inline filename editing on each card is possible before you upload. We'll introduce a table view shortly if you're uploading at scale and want to sort and filter at this point. Once your upload starts, you can see the progress of each file and a master progress bar. Custom fields on assets Adding custom fields to a MediaHub input field works the same way as the existing workflow. Should you wish, you can also assign custom fields to a master asset depending on your use case. You can assign custom fields to your master asset or just the MediaHub field on your page. They work indenpendently when you want, but also have a relationship with and inherit-with-override model. Inherit-with-override works the same way Title and Alt already do: The asset detail page (left) holds the canonical (library-level) value. Every reference inherits it by default. On a page, custom fields appear below Title, Filename, Description, and Tags. An editor can override the value for that one reference only. The override saves when the page saves, no separate save button A small reset control next to any overridden field lets you revert to the library value in one click On a MediaHub input field, a developer can choose to display custom fields in a different order than on the asset detail page Two tiers Some metadata belongs to the asset everywhere (a photographer credit, a licence URL). Other metadata belongs to how the asset is used in a specific field. Both are supported: Asset-level fields go on pkd-mediahub-asset. Master value plus per-reference override and reset Field-specific fields go on a template named mediahub-field-{fieldName} (mirrors ProcessWire's native pattern). These appear only in that field's drawer and are per-reference only, no library master I hadn't planned on allowing custom fields on the asset detail page, but it was straightforward once I added some of the standard text-based fields. It works in the same way you'd add a field to any template and doesn't even require the extra custom field to input field step (creating an extra fileless template). Anything on that asset template that isn’t one of MediaHub’s built-in fields: title, image, alt, labels, collections, and so on - is treated as yours. Should you wish to uninstall MediaHub, we have safeguards in place to keep your custom fields on your ProcessWire install, which is what I think you might want. The only real downside I have found so far is that custom fields on the master asset template show on every asset detail page, so a name like Photographer fits a photo but feels odd on a PDF or spreadsheet. What has worked for me is broader labels from the start (Source, Description). We plan to make this more asset-aware in a future release, but for now, name fields as if every asset type will see them, because they will. But, this is just a side note and doesn't affect input fields, which was the core feature and of the 1.19.25 release. Library thumbnails 1.19.25 takes a leaner approach to thumbnail generation and makes more effort to reuse thumbnails across the UI vs generating the full scope on upload and import. One preview at upload. Each image gets a single small proportional preview. That's 75% fewer auto-generated files at upload time. One library thumb per asset. Grid, Masonry, and List share one canonical thumbnail. CSS handles grid cropping. Built on first browse. The full library size is generated the first time you scroll an asset into view, not during upload. The upload preview is shown immediately as a placeholder so nothing looks broken while it's being prepared Import Existing Images and the asset picker use the same on-demand model. Bulk imports of existing assets from existing fields should feel noticeably lighter on disk and CPU. Library bulk actions and toolbar The search and filter area of the Library was cleaned up for consistency and clarity in advance of some architectural changes (more below) Selecting assets now swaps the breadcrumb row for a compact bulk action bar with actions for Collections, Labels, and Delete. There's a useful workflow change here: you can select assets first and then create and assign a collection in one step, rather than having to create the collection first. Library and picker consistency MediaHub looks like it has one central Library, but under the hood there are actually three slightly different versions of it: the main Library, the InputfieldMediaHub picker, and the TinyMCE picker. Over time I found that improvements made to the main Library were easy to overlook on the other two, since they didn't share any underlying code. To reduce that drift, 1.19.25 moves the toolbar, sidebar, filters, and tiles onto shared partials so all three surfaces stay aligned going forward. This isn't just a tidy-up under the hood either. It lightens the module overall, and it's what made it possible to introduce the Collections and Labels sidebar into Library screens that didn't have it before. Import page images The ability to import images from your existing fields was an early feature and has been in MediaHub since v1 1.19.25 gives it an overhaul. BTW the import Page Images button is optionally enabled in the field config so you can enable it on a field-by-field basis. Repeater and RepeaterMatrix support The scan now walks Repeater and RepeaterMatrix fields up to three levels deep. Results are grouped under breadcrumb headings so you can see exactly where each image came from. How matching works Each image on the page is scored against the whole Hub using four signals: filename stem file size dimensions and a perceptual hash (a 64-bit visual fingerprint that can match re-encoded or renamed copies). Each result gets a confidence badge: New - not currently in the Hub Exact match - identical file already in the Hub Likely match - looks like an asset already in the Hub Possible match - filename matches a Hub asset but the file content appears different Already added - already used in this field When a match is confirmed, MediaHub adds a reference to the existing asset rather than copying the file again. Hardening for large pagesThere's also longer scan and import time limits, JSON error handling, a 200-selection cap per request, and client-side checks so a timeout doesn't surface as a cryptic error. Import Page Images was one of MediaHub's earliest features, and I think there's more we can do here. The import modal in particular could use a bit more cleanup, so that's on the list. That's pretty much it. Thanks for reading and scrolling! MediaHub is currently available for single sites, developers of multiple sites and agencies. If you'd like to try it first, DM me. Have a great weekend, Peter
-
Today, I am happy to showcase one of Fruitcake Communications AG's latest projects powered by ProcessWire. Ausgleichskasse des Schweizerischen Gewerbes AK105 AK105 is one of Switzerland's long established trade compensation funds, serving over 10,000 companies with first and second pillar social insurance, family allowances and pension administration since 1947. The multilingual site gives employers, employees, the self employed and pensioners clear access to all services, news and the connect online portal for paperless administration. The website is only part of the whole project as we also refreshed the existing logo, created a new corporate identity from that, and reimagined all business materials. The result is a modern, professional brand identity that accurately reflects the organization’s values, also perfectly reflected on the new website. We have developed a portal for existing business customers, parties interested switching to AK105 and also the actual people to whose benefit the trade compensation funds are. The goal is to answer questions and provide further information directly on the federal government portal. We knew one of the most important aspects of such a challenge is the search function and improved accessibility. ProcessWire has ready-to-use tools for both of these goals whilst our frontend is purpose built in-house like always for Fruitcake. Search We are making heavy use of @ryan's RepeaterMatrix which allows any component to be used literally anywhere on the website. Searchability becomes a challenge just because of that though. Most of the actual content lives either inside RepeaterMatrix pages or is fetched from other meta content. Thus, a front-facing page will be stitched together from many different sources like repeaters and other pages. To actually make the website searchable, we have developed a sophisticated set of hooks and functions which will search through all repeaters, nested repeaters and then from these results, backtrack to the actual front-facing pages so that the search result shows the precise content found whilst then linking back to the correct place where that content is located. Accessibility Not only just because the target audience is people aged 50+, accessibility is another key requirement for such a project. Apart from following accessilibity standards, we also have included a text-size switcher to allow for better readability whilst keeping the rest of the content concise. Most of the work here is invisible though: Styles for prefers-reduced-motion switches, proper handling of any navigation and control element using just the keyboard and flawless screen-reader support. Actually selling this invisible work to clients is a challenge in itself. Luckily, our client is already familiar with the necessity and the benefit of the endeavour and thus there was almost no discussion needed. Admin impressions Technical details The site is powered by ProcessWire 3.0.255 of course using the new admin theme which we ❤️! Modules in use: RepeaterMatrix SeoMaestro ProcessRedirects TracyDebugger ProtectedMode WireMailSmtp FileValidatorSvgSanitizer InputfieldAssistedURL FieldtypeColorPicker Links Case study on our website: https://fruitcake.ch/cases/ak105/ Website: https://ak105.ch/ Showcase on processwire.com: coming soon
-
- 7
-
-
-
That's strange, as that's what I use and I like it. The only thing I do not like about it is the battery. There is no official replacement battery, which is a shame. I ordered my first third-party replacement for it two months ago and it was performing badly right from the beginning.
-
Hello everyone, I have been working on PWGermanShop, a comprehensive shop system built specifically for ProcessWire to address the regulatory and functional requirements of the German market. The system is nearing its final stages, and I am now looking for a small group of testers to help gather real-world feedback before a wider release. Since the ProcessWire forum is international, I am writing this post in English. However, please note that both the system and its documentation are currently only available in German, as the project is tailored to the DACH region. What is PWGermanShop? PWGermanShop is designed to handle the typical workflows and legal requirements of German e-commerce setups within ProcessWire. You can read through the documentation here to see how it works: 👉 https://mholte.de/docs/PWGermanShop/ How to participate in the test: The system is currently not publicly downloadable. I would like to share the installation files individually with interested testers to ensure a structured feedback process. If you are a ProcessWire developer building sites for the German-speaking market and would like to test the system: Please read the documentation to see if it fits your general requirements. Reply to this thread or send me a private message (PM) if you would like to participate. I will then send you the download link and instructions on how to install it. What kind of feedback is helpful? Is the setup and configuration process logical? Does the documentation cover all the steps clearly? Are there any bugs or edge cases you encounter during your tests? Thank you very much for your interest and support. I look forward to your feedback and to collaborating with some of you! Best regards
-
Sound and sensitivity of button presses. I also tried MX Keys for Mac, it's terrible. I returned it after a few days.
- Yesterday
-
Thanks Peter! Not specifically for the forums. I needed a reusable weather module for ProcessWire projects: normalized provider data, cache, fallbacks, geocoding, and optional widgets. The illustration is basically a quick visual overview of the module features. For some modules there isn’t always a meaningful screenshot to show, especially when the main value is in the API or backend logic, so I decided to make a small illustration for each module. It makes the project easier to scan and gives the release page a more polished, professional feel 🙂
-
Thanks @adrian, great catch on the superuser fallback. You were right — that made the setting misleading if someone intentionally cleared the excluded roles list. I’ve fixed that in 1.1.0, so leaving the field blank now tracks all roles. Also, thanks for the heads-up about Native Analytics being hookable now. I hadn’t been following its recent development closely, so I didn’t know about that change. I liked your suggestion and added optional Native Analytics integration in 1.1.0 as well. Compass remains fully standalone via Setup → Compass, but if Native Analytics with hookable dashboard tabs is installed, Compass now adds its own tab there too. And yes, I still think there’s room for smaller focused tools alongside bigger all-in-one analytics modules. Sometimes people just need a specific behavior/heatmap tool without adopting a broader analytics setup. Fun side note: Compass was originally started in April 2026 in Philadelphia, while I was at a Mel Robbins event.