Changelog
All notable changes to EZMON are documented here, following Keep a ChangelogΒ format.
π’
This changelog is sourced from the official EZMON repositoryΒ on the main branch.
v0.1.3 β Latest
Added
- Notification Target Type β Alert channels now support a
targetTypefield (all|agent|monitor) to eliminate duplicate cross-source notifications - Target Type UI β Three-option selector (βπ Allβ, βπ» Agentsβ, ββοΈ Monitorsβ) in the Add/Edit Channel modal under Dashboard Settings β Alert Channels
- Worker
/debugMonitor Info β The/debugendpoint now includes acloud_monitorssection withlast_status,next_check_at,due_now, andtime_until_check - Worker
/reset-monitorsEndpoint β NewPOST /reset-monitorsdevelopment endpoint to force re-evaluation of all monitors on the next trigger
Fixed
- Agent recovery double notification β
lib/notify.tswas missingtargetTypefiltering; addedsourceTypeparameter and filter logic todispatchNotification() config_jsonJSONB read as string β Cloudflare Worker now wraps allconfig_jsonaccess with aJSON.parse()guard indispatchNotifications()- Monitor notifications never firing β
isTransitionlogic now also acceptsunknown β downas a valid state change trigger - Duplicate notifications for all channels β
dispatchNotifications()now filters byconfig_json.targetTypematching the eventsourceType - Monitor incidents failing silently β
agent_idis now nullable in theincidentstable; ametadataJSONB column was added for monitor context DashboardIncidenttype mismatch β ChangedinnerJointoleftJoinon agents; updated type to allowagentId: string | null- Worker beta deploy targeting production β Added explicit
deploy:betascript (wrangler deploy --env beta) toapps/worker/package.json
Changed
Check Nowbutton no longer updateslastStatusornextCheckAtβ only records a new row incloud_check_resultsfor the history graph
v0.1.2
Added
- Custom Status Page Slug β Users can configure custom URLs (e.g.
/status/my-server) from Dashboard Settings via a newcustom_slugcolumn instatus_pages - Cloud Monitors on Status Page β Public Status Page now displays Cloud Monitors (HTTP/TLS/Keyword) alongside Agents, including latency data
- Beta Worker Environment β
[env.beta]configured inapps/worker/wrangler.tomlfor separate secrets and deployment (ezmon-evaluator-beta) - Notification Test Buttons β βTest Offlineβ and βTest Onlineβ buttons in the Add/Edit Channel modal for live template preview
- Test API Endpoint β
POST /api/dashboard/notifications/testfor dummy notification dispatch - Template Placeholder Resolution β
dispatchNotification()now resolves{project},{agent},{monitor},{status},{time}placeholders
Fixed
customOnlineMessagenot applying βlib/notify.tswas missing template parsing logic on agent recovery; placeholder resolution now added- Zod schemas stripping unknown fields β
customOfflineMessageandcustomOnlineMessagewere silently discarded; fixed by adding.passthrough()to all config schemas
Changed
- Heartbeat recovery handler now passes
templateVarswhen dispatching online recovery notifications - Test endpoint uses distinct dummy values:
{agent}βtest-agent-1,{monitor}βtest-monitor-1
v0.1.1 β 2026-05-07
Added
- Cloud Monitors β HTTP, TLS, and Keyword checks running on Cloudflare Worker Cron
- Cloud check history β Results stored 30 days with automatic retention cleanup
- GlobalAgentMap β Agent distribution map by country on the overview dashboard
- Settings Hub β Alert Channels and Cloud Monitors moved to a unified Settings page
- Docker monitoring β Agent reports running Docker container count
- Tags & Grouping β Agents can be tagged for grouping
- Public Status Page β Per-project configurable public status page
- Metrics history charts β CPU/RAM/Disk/Network charts from 5-minute aggregated buckets
- GitHub Actions CI/CD β Automated static Go binary builds for
linux/amd64andlinux/arm64 - Incidents UI β Filter open/resolved/all with pagination
- targetType β Notification channels can be scoped to:
agent,monitor, orall
Changed
- Agent metrics now use
gopsutil(CPU, RAM, Disk, Load, Network) β no more placeholders - Logo and branding updated
- Turborepo upgraded to v2.9.10
middleware.tsreplaced withproxy.tsconvention (Next.js 16)- Versioning synchronized between root
package.json, UI, and agent binary - Agent
Versionchanged fromconsttovarto allow linker injection via-ldflagsat build time - Delete agent modal text translated from Indonesian to English
install.shregistration call now reads fromEZMON_AGENT_VERSIONenv var
Fixed
- 203/EXEC systemd error β binary now compiled statically (
CGO_ENABLED=0) via GitHub Actions - Notification channels missing DELETE and PATCH toggle
- JSONB parsing issue in Neon HTTP SQL API (config fields read as strings)
- React import bug on notifications page
- GlobalProjectSwitcher not syncing in beta environment
- Sidebar version badge showing stale version β now reads dynamically from
apps/web/package.json - Agent binary in GitHub Releases had no version in the filename
- Infinite loading bug on
/dashboard/status-pageconfiguration view forceMountprop warning in sidebar layout
v0.1.0 β 2026-05-04
Added
- Granular CPU Monitoring β Per-core CPU charts render dynamically based on actual agent hardware. Supports 64+ cores using HSL color generation
- IP-based Agent Geolocation β Agent detects its public IP via
ipify.organd resolves location (city, country, lat/lon) viaip-api.com - Interactive World Map β
AgentLocationMapcomponent with zoom/pan, country hover tooltip, animated agent pin, and full ISO 3166-1 numeric mapping (220+ countries) - Extended Time Range Selector β Metric charts support 5m, 10m, 30m, 1h, and custom range (min 5m, max 7d)
- Automated Release Workflow β Single GitHub Actions workflow that auto-tags, builds agent binaries, and publishes versioned releases
- Initial MVP β Authentication (NextAuth), Project management, Agent onboarding, Push-based heartbeat monitoring, Offline detection, Incident creation, Notification channels (Telegram, Discord, Webhook), Dashboard UI, and
install.shpublic installer script
Changed
- Agent CPU collection switched from non-blocking to blocking
cpu.Percent(1s, true)for accurate per-core real-time data - Heartbeat payload now includes
publicIpfield cpuCoresAvgpersisted as JSON array inmetric_bucketsfor frontend parsing
Fixed
- Country map hover showing βUnknown (undefined)β for territories without geo ID
- Country hover tooltip clipped at top/right edge of map
- Missing ISO numeric codes for Serbia, Montenegro, Iceland, South Sudan, Oman, and others
Last updated on