Skip to content

v4.0.0

Latest

Choose a tag to compare

@kodehat kodehat released this 09 Aug 12:52
· 13 commits to main since this release

Warning

v4.0.0 contains breaking changes. The config was restructured into groups, PORTKEY_* environment variables were renamed, and emoji became icon. An un-migrated config.yml will not start — please read the v4.0.0 Breaking Changes before upgrading.

✨ What's new

  • 🖼️ Automatic favicons — external portals without an explicit icon now get their site's favicon fetched automatically, no configuration needed
  • 💾 Optional on-disk favicon cache (favicon.cacheEnabled + favicon.cacheDir) — 7-day TTL, background refresh, failure backoff; direct discovery or
    proxied via a favicon service (favicon.mode / favicon.serviceUrl)
  • 🎨 Custom icon files — SVG/PNG icons placed in a directory and referenced via /_/icons/<filename> (favicon.customIconsDir)
  • 📐 Multi-column grid layout — 2–12 columns for a compact start page (ui.layoutColumns, responsive on mobile)
  • 🔎 Grouped search results — portal groups stay visible while searching
  • 📊 New Prometheus metrics — favicon cache hits/misses/failures, portal & group counts, search & HTTP request durations
  • 🔗 Better URL slugs — CJK and emoji portal titles get proper URL-safe paths
⚠️ Breaking changes at a glance (click to expand)
v3.x.y v4.0.0
emoji: 💻 icon: 💻
logLevel, host, port, … server.logLevel, server.host, server.port, …
enableMetrics, metricsHost, metricsPort metrics.enabled, metrics.host, metrics.port
hideSearchBar ui.showSearchBar (inverted)
searchWithStringSimilarity search.stringSimilarity
PORTKEY_HOST, PORTKEY_FAVICONCACHEDIR PORTKEY_SERVER_HOST, PORTKEY_FAVICON_CACHE_DIR
subtitle removed

Full details: v4.0.0 Breaking Changes

4.0.0 - 2026-08-09

Added

  • Add favicon service
  • Add more tests
  • Add DomainFromURL function and update faviconHandler to validate domains
  • Add comprehensive metrics tests for Load and portal/group counts
  • Add missing package-lock.json to Dockerfile context
  • Add metrics for favicon cache, search, and HTTP request duration
  • Add SonarQube integration and coverage reporting
  • Add comprehensive unit tests for components, layouts, and server functionality
  • Add unit tests for components including layouts, pages, and utils
  • Add unit tests for server, utils, and build components; enhance coverage
  • Add permissions for actions in auto-merge job

Changed

  • Update README and screenshots for version 4.0.0 redesign
  • Update favicon cache configuration and remove deprecated files
  • Define MimeTypePNG constant and refactor MIME type usage
  • Update favicon caching mechanism and configuration options
  • Merge pull request #342 from kodehat/dependabot/github_actions/docker/login-action-4.6.0
  • Bump docker/login-action from 4.5.2 to 4.6.0
  • Restructure config options and introduce two favicon loading modes
  • Merge pull request #343 from kodehat/dependabot/docker/node-26.5.1-alpine3.23
  • Bump node from 26.5.0-alpine3.23 to 26.5.1-alpine3.23
  • Merge pull request #341 from kodehat/dependabot/github_actions/docker/login-action-4.5.2
  • Bump docker/login-action from 4.5.1 to 4.5.2
  • Merge pull request #340 from kodehat/dependabot/github_actions/docker/login-action-4.5.1
  • Bump docker/login-action from 4.4.0 to 4.5.1
  • Merge pull request #339 from kodehat/dependabot/go_modules/github.com/prometheus/client_golang-1.24.1
  • Bump github.com/prometheus/client_golang
  • Merge pull request #338 from kodehat/dependabot/npm_and_yarn/multi-1133c64998
  • Bump shell-quote and concurrently
  • Merge pull request #334 from kodehat/dependabot/npm_and_yarn/tailwindcss/cli-4.3.3
  • Bump @tailwindcss/cli from 4.3.2 to 4.3.3
  • Merge pull request #336 from kodehat/dependabot/github_actions/actions/checkout-7.0.1
  • Bump actions/checkout from 7.0.0 to 7.0.1
  • Merge pull request #335 from kodehat/dependabot/github_actions/actions/setup-go-7.0.0
  • Bump actions/setup-go from 6.5.0 to 7.0.0
  • Merge pull request #337 from kodehat/dependabot/go_modules/github.com/prometheus/client_golang-1.24.0
  • Bump github.com/prometheus/client_golang
  • Merge pull request #333 from kodehat/dependabot/npm_and_yarn/tailwindcss-4.3.3
  • Bump tailwindcss from 4.3.2 to 4.3.3
  • Merge pull request #332 from kodehat/dependabot/github_actions/SonarSource/sonarqube-scan-action-8.2.1
  • Bump SonarSource/sonarqube-scan-action from 8.2.0 to 8.2.1
  • Merge pull request #331 from kodehat/dependabot/github_actions/actions/setup-node-7.0.0
  • Bump actions/setup-node from 6.4.0 to 7.0.0
  • Update favifetch and enhance favicon handling with improved error signaling
  • Enhance favicon cache handling with format support and cleanup
  • Update favifetch and enhance fetchOptions with size parameter
  • Introduce constants for HTTP headers and URL prefixes in favicon cache
  • Streamline initGlobals and enhance TestMainLikeLifecycle
  • Update Go version handling in CI workflows to use go.mod
  • Simplify cachePath and remove unused format handling
  • Update favifetch
  • Replace faviconlib with favifetch for favicon handling
  • Enhance TitleForUrl to support CJK and emoji titles with proper slugging
  • Refactor favicon handling and logging
  • Update tools
  • Merge pull request #329 from kodehat/dependabot/docker/golang-1.27rc2-alpine3.23
  • Bump golang from 1.26.4-alpine3.23 to 1.27rc2-alpine3.23
  • Merge pull request #326 from kodehat/dependabot/github_actions/docker/setup-buildx-action-4.2.0
  • Bump docker/setup-buildx-action from 4.1.0 to 4.2.0
  • Merge pull request #325 from kodehat/dependabot/github_actions/docker/build-push-action-7.3.0
  • Bump docker/build-push-action from 7.2.0 to 7.3.0
  • Merge pull request #327 from kodehat/dependabot/github_actions/docker/login-action-4.4.0
  • Bump docker/login-action from 4.2.0 to 4.4.0
  • Merge pull request #328 from kodehat/dependabot/github_actions/docker/setup-qemu-action-4.2.0
  • Bump docker/setup-qemu-action from 4.1.0 to 4.2.0
  • Merge pull request #324 from kodehat/dependabot/npm_and_yarn/tailwindcss/cli-4.3.2
  • Bump @tailwindcss/cli from 4.3.1 to 4.3.2
  • Merge pull request #322 from kodehat/dependabot/github_actions/actions/cache-6.1.0
  • Bump actions/cache from 6.0.0 to 6.1.0
  • Merge pull request #321 from kodehat/dependabot/github_actions/actions/cache-6.0.0
  • Bump actions/cache from 5.0.5 to 6.0.0
  • Merge pull request #320 from kodehat/dependabot/github_actions/actions/setup-go-6.5.0
  • Bump actions/setup-go from 6.4.0 to 6.5.0
  • Merge pull request #319 from kodehat/dependabot/docker/node-26.4.0-alpine3.23
  • Bump node from 26.3.1-alpine3.23 to 26.4.0-alpine3.23
  • Merge pull request #317 from kodehat/dependabot/github_actions/SonarSource/sonarqube-scan-action-8.2.0
  • Bump SonarSource/sonarqube-scan-action from 8.1.0 to 8.2.0
  • Merge pull request #318 from kodehat/dependabot/github_actions/actions/checkout-7.0.0
  • Bump actions/checkout from 6.0.3 to 7.0.0
  • Comment out icons in portal configuration
  • Update dependencies
  • Merge pull request #315 from kodehat/copilot/adjust-main-page-width-mobile
  • Merge pull request #316 from kodehat/dependabot/docker/node-26.3.1-alpine3.23
  • Bump node from 26.3.0-alpine3.23 to 26.3.1-alpine3.23
  • Merge pull request #314 from kodehat/copilot/fix-code-scanning-findings
  • Merge pull request #312 from kodehat/dependabot/npm_and_yarn/tailwindcss/cli-4.3.1
  • Bump @tailwindcss/cli from 4.3.0 to 4.3.1
  • Merge pull request #311 from kodehat/dependabot/docker/alpine-3.24.1
  • Bump alpine from 3.24.0 to 3.24.1
  • Merge pull request #310 from kodehat/dependabot/npm_and_yarn/esbuild-0.28.1
  • Bump esbuild from 0.28.0 to 0.28.1
  • Complete redesign
  • Column support
  • Update Go toolchain to 1.26.4 and node to 26.3.0
  • Merge pull request #309 from kodehat/dependabot/docker/alpine-3.24.0
  • Bump alpine from 3.23.4 to 3.24.0
  • Merge pull request #307 from kodehat/dependabot/github_actions/actions/checkout-6.0.3
  • Bump actions/checkout from 6.0.2 to 6.0.3
  • Merge pull request #308 from kodehat/dependabot/npm_and_yarn/concurrently-10.0.3
  • Bump concurrently from 10.0.1 to 10.0.3
  • Merge pull request #306 from kodehat/dependabot/docker/golang-1.26.4-alpine3.23
  • Bump golang from 1.26.3-alpine3.23 to 1.26.4-alpine3.23
  • Merge pull request #305 from kodehat/dependabot/npm_and_yarn/concurrently-10.0.1
  • Bump concurrently from 10.0.0 to 10.0.1
  • Merge pull request #304 from kodehat/dependabot/docker/node-26.3.0-alpine3.23
  • Bump node from 26.2.0-alpine3.23 to 26.3.0-alpine3.23
  • Merge pull request #303 from kodehat/dependabot/github_actions/docker/setup-qemu-action-4.1.0
  • Bump docker/setup-qemu-action from 4.0.0 to 4.1.0
  • Merge pull request #302 from kodehat/dependabot/npm_and_yarn/concurrently-10.0.0
  • Bump concurrently from 9.2.1 to 10.0.0
  • Merge pull request #299 from kodehat/dependabot/github_actions/docker/setup-buildx-action-4.1.0
  • Bump docker/setup-buildx-action from 4.0.0 to 4.1.0
  • Merge pull request #301 from kodehat/dependabot/github_actions/docker/login-action-4.2.0
  • Bump docker/login-action from 4.1.0 to 4.2.0
  • Update generated files
  • Update tools
  • Merge pull request #300 from kodehat/dependabot/github_actions/docker/build-push-action-7.2.0
  • Bump docker/build-push-action from 7.1.0 to 7.2.0
  • Merge pull request #298 from kodehat/dependabot/docker/node-26.2.0-alpine3.23
  • Bump node from 26.1.0-alpine3.23 to 26.2.0-alpine3.23
  • Merge pull request #296 from kodehat/dependabot/docker/node-26.1.0-alpine3.23
  • Bump node from 25.9.0-alpine3.23 to 26.1.0-alpine3.23
  • Merge pull request #297 from kodehat/dependabot/docker/golang-1.26.3-alpine3.23
  • Bump golang from 1.26.2-alpine3.23 to 1.26.3-alpine3.23
  • Merge pull request #295 from kodehat/dependabot/go_modules/github.com/a-h/templ-0.3.1020
  • Bump github.com/a-h/templ from 0.3.1001 to 0.3.1020
  • Merge pull request #294 from kodehat/dependabot/npm_and_yarn/tailwindcss/cli-4.3.0
  • Bump @tailwindcss/cli from 4.2.4 to 4.3.0
  • Merge pull request #292 from kodehat/dependabot/npm_and_yarn/alpinejs/persist-3.15.12
  • Bump @alpinejs/persist from 3.15.11 to 3.15.12
  • Merge pull request #291 from kodehat/dependabot/npm_and_yarn/alpinejs-3.15.12
  • Bump alpinejs from 3.15.10 to 3.15.12
  • Merge pull request #290 from kodehat/dependabot/github_actions/orhun/git-cliff-action-4.8.0
  • Bump orhun/git-cliff-action from 4.7.1 to 4.8.0
  • Merge pull request #289 from kodehat/dependabot/npm_and_yarn/htmx.org-2.0.10
  • Bump htmx.org from 2.0.9 to 2.0.10
  • Replace websocket implementation with livereload for dev mode
  • Update Go and Alpine versions in Dockerfile and mise.toml
  • Merge pull request #285 from kodehat/dependabot/github_actions/actions/setup-node-6.4.0
  • Bump actions/setup-node from 6.3.0 to 6.4.0
  • Merge pull request #287 from kodehat/dependabot/npm_and_yarn/tailwindcss/cli-4.2.4
  • Bump @tailwindcss/cli from 4.2.2 to 4.2.4
  • Merge pull request #288 from kodehat/dependabot/npm_and_yarn/tailwindcss-4.2.4
  • Bump tailwindcss from 4.2.2 to 4.2.4
  • Merge pull request #286 from kodehat/dependabot/npm_and_yarn/htmx.org-2.0.9
  • Bump htmx.org from 2.0.8 to 2.0.9
  • Merge pull request #284 from kodehat/dependabot/github_actions/dependabot/fetch-metadata-3.1.0
  • Bump dependabot/fetch-metadata from 3.0.0 to 3.1.0

Fixed

  • Update Content-Security-Policy for enhanced security and resource loading in demo
  • Update favicon mode from direct to proxied
  • Update SonarQube job configuration and cleanup workflow
  • Replace npm install with npm ci for consistent dependency installation
  • Update loading bar tests to reflect margin behavior changes
  • Prevent path traversal in cachePath method
  • Use full width for search bar and progress bar on mobile
  • Prevent path traversal and URL injection in favicon cache
  • Fix missing environment variable for demo
  • Update environment variable name for Dependabot merge step
  • Update GitHub token for Dependabot to use GITHUB_TOKEN
  • Update GitHub token for Dependabot to use REPO_MERGE_TOKEN
  • Update panic recovery checks in config tests and add comment to API endpoint test
  • Enhance test coverage for health, home, version, and API endpoints

Removed

  • Remove unnecessary url.PathEscape (isValidHostname already ensures safe chars)