Releases

Each module ships on its own cadence. This is the full chronological feed across all of them.

Subscribe via RSS
October 2026
frontend
v1.0.0 Released

Backup and Restore, About Tab, and Runtime Backend URL

The first stable release of the web interface: backup and restore from settings, an About tab with component versions, and one image that works for every deployment.

  • Backup and restore card on Settings > Database Usage, and a first-run prompt to restore a backup or start blank
  • Settings > About lists the version of each component
  • A notice when the frontend and backend versions do not match, and admin banners for incompatible modules and for access over plain HTTP
  • Read when the server starts, from STRAWLY_API_URL with the same origin as default, instead of at build time
  • Published as git.strawly.app/strawly/strawly-frontend for amd64 and arm64
backend
v1.0.0 Released

Backup and Restore, Version Reporting, and Module Registration

The first stable release of the core API: encrypted database backup and restore, version reporting, and modules that set themselves up on a fresh install.

  • Encrypted database backup and restore from Settings > Database Usage, behind the new data:backup:manage permission
  • GET /api/version, and a version field in /health
  • Modules register through POST /internal/modules/register, which creates their default settings rows and records their version and the core range they support
  • The auth cookie is marked Secure only for requests that arrived over HTTPS, so installs reached over plain HTTP on a local network can sign in
  • Loads in production only when STRAWLY_ALLOW_DEMO=1 is set
  • Published as git.strawly.app/strawly/strawly-backend for amd64 and arm64
optimizations-azure
v1.0.0 Released

Self-Registration and Compatibility Checks

The first stable release of the Azure recommendations engine. It requires core 1.x and sets itself up on a fresh install.

  • Requires core: >=1.0.0 <2.0.0
  • Registers with the backend on start and every minute, creating its default settings on a fresh deployment
  • Collectors pause while a database restore runs, and while the backend reports this module as incompatible
  • /health reports the module version, the core range it needs, and its registration state
  • Published as git.strawly.app/strawly/strawly-optimizations-azure for amd64 and arm64
September 2026
frontend
v0.5.0 Released

Overview Dashboard, Digest Schedule, and Full-Screen Charts

A permission-gated overview dashboard as the landing page, digest send times and opt-ins, full-screen dashboard charts, and snooze and ignore reasons on resource detail pages.

  • Overview dashboard at /dashboard: realized savings, open savings, recommendations awaiting action, and resources covered, plus savings trend, pipeline, savings by category, top opportunities, and inventory mix widgets. Each widget appears only for users with the matching permission and module
  • Setup steps on the dashboard while no cloud data has been collected: add credentials, turn on a module, set a scan schedule
  • Signed-in visitors to the login page go straight to the dashboard. The sidebar shows the Strawly logotype and links to the dashboard
  • Settings > Notifications: daily and weekly digest send times, edited in the viewer's timezone and stored in UTC, and a system alerts card with a recipient list and cooldown
  • Daily and weekly digest opt-in toggles under user Preferences
  • Usage and savings dashboard charts gain a full-screen view and removable filter pills. Recommendation types that share a label, such as terminate and delete-unused, merge into one slice and one filter option
  • Savings trend filterable by recommendation type, and a Snoozed Savings card on the usage dashboard
  • Per-year and per-month savings toggle on the initiatives page
  • Resource detail: snoozed and ignored recommendations move to the closed list with their justification, and the history timeline shows snooze expiry, rejection category, and reason
  • VM memory shown as memory used throughout charts and evidence, with resident memory in GiB
  • VM recommendation settings: CPU terminate %, idle memory ceiling in GiB, and disk IOPS max safe %
  • Warning status for partial collector runs in run history and logs
  • Inventory Commitments page removed
backend
v0.5.0 Released

Digest Scheduler, Email Audit Log, and Wide-Table Metrics

Scheduled digests and alert polling, an audit log for every outbound email, resource charts read from the provider metric tables, and VM memory reported as memory used.

  • Daily and weekly digests sent at an admin-set time, 07:00 UTC and Monday by default. Each covers collector run health, realized savings, new recommendations, and initiative activity, and an empty window still sends a short message so a stopped scheduler is visible
  • System alert poller checks for newly failed collector runs every 5 minutes. Both jobs hold an advisory lock so one instance sends
  • Every alert, digest, and test email is logged with its delivery status. Repeat alerts for a collector that is still failing are held back for the configured cooldown
  • SMTP password encrypted at rest, with a connection check and a test send from settings
  • Resource detail charts read the wide per-service metric tables directly. The long-format daily metric projection is dropped and SKU history moves to its own change log
  • VM memory published as memory used. Azure reports available memory, so the API inverts it and drops the zero readings Azure emits when the guest agent stops reporting
optimizations-azure
v0.4.0 Released

Credential Checks, Idle VM Terminate, and Projection Reconcile

Runs fail when Azure rejects the credential, a corrected VM memory reading, terminate for running idle VMs, one recommendation per VM, and cleanup of orphaned recommendation rows.

  • Inventory and metrics collectors check the Azure credential before they start. An expired or invalid client secret, an unknown app, or an unknown tenant aborts the run as an error so it reaches the logs and alert emails. Recommendation collectors keep analysing data already collected
  • A run that skips any query batch finishes with a warning status and a summary of what was missed
  • VM memory fix: Azure's Available Memory Percentage is now inverted to memory used before thresholds apply. Earlier releases compared free memory against used-memory thresholds
  • Terminate now also fires on running VMs with no workload: average CPU under 1%, resident memory under 16 GiB, and every rightsize guard passing. Both limits are configurable
  • One recommendation per VM. Terminate, rightsize, burstable, and upgrade candidates for the same machine collapse to the strongest, with the others kept as evidence, so savings are not counted twice
  • VMs need real readings on at least half the lookback window. Rightsize is skipped when the target size has no price yet
  • VM size ladders split by series generation and storage type, so Dv2, DSv2, and v3 to v5 sizes are no longer mixed
  • Monthly savings snapshots broken down by recommendation type
  • Each recommendation run removes recommendation rows whose Azure source row is gone. In-review, planned, and snoozed rows are dismissed with a status event, and implemented and ignored rows stay for the savings ledgers. A one-off script clears existing orphans
  • SKU history written only when a resource's SKU name, tier, or capacity changes
August 2026
frontend
v0.4.0 Released

Notifications, Alerts, and Initiative Savings

Notifications and Alerts, a total/realized/remaining savings split on initiatives, client secret expiry warnings, and richer disk recommendation evidence.

  • Notifications settings page and a new Operate > Alerts view
  • Stale badge on committed recommendations the engine no longer detects
  • Initiative cards and detail page show total, realized, and remaining savings, with segmented progress bars: green implemented, purple planned, red snoozed or ignored, grey remaining
  • Collapsed Resolved Contacts section on the initiative detail page
  • Client secret expiry field on provider credentials with an app-wide expiry banner
  • Recommendation pipeline: resource type and identified-month range filters, plus a funnel on the usage dashboard
  • Logs and Tables moved from Operate to a new Admin nav section
  • Disk recommendation evidence: media trade-off, replication column, full SKU details, and named fields on SKU change history events
  • Status column added to the initiative CSV export
backend
v0.4.0 Released

Email Notifications and Initiative Savings Split

Email notifications, stale recommendation tracking, an initiative savings and contact split, and managed disk metrics through the API.

  • Email notifications: SMTP settings, system alerts, and digests
  • Committed recommendations whose condition disappeared are surfaced, and the flag clears on revert
  • Initiative savings split into total, realized, and remaining, with per-status recommendation counts in the progress payload
  • Initiative contacts split into active and resolved based on linked recommendation status
  • Client secret expiry date stored on provider credentials
  • Managed disk peak metrics and transaction costs exposed through the API. Disk replication on recommendation items
  • Explicit prisma:migrate:deploy script
optimizations-azure
v0.3.0 Released

Stale Dismissal and Disk Alternatives

Automatic dismissal of stale committed recommendations, alternative-aware disk collectors, a multi-rung ASP rightsize, and metric-write reliability work.

  • Every collector flags and dismisses committed recommendations whose condition disappeared
  • Disk collectors: alternative-aware auto-implement, recommendations refreshed when their alternatives change, a low-confidence rightsize alternative on Reserved-disk terminate calls, and the latency and price trade-off stated in evidence
  • ASP: multi-rung capability-checked rightsize, Elastic Premium scale-in gate, and terminate allowed to fire without metrics
  • Metric writes chunked across all collectors. A hung request can no longer hold a whole date. Lost batches are reported instead of dropped
  • True sub-interval peak columns on managed disk metrics
  • Monday metrics run collects the last 3 days. Pricing collector key registered in advisory-lock LOCK_IDS
July 2026
frontend
v0.3.0 Released

Savings Ledgers, Kanban Initiatives, and Currency History

Operate > Savings ledgers and dashboard, an initiative Kanban board, exchange rate history, a reworked initiative comms export, and security fixes.

  • Operate > Savings with Realized and Ignored ledgers plus a savings dashboard. Savings by Category trend driven from monthly snapshots with pie drill-down
  • Initiatives list converted to an Open / In Progress / Done Kanban board
  • Initiative comms export reworked: renamed button, updated email and CSV, instance counts and alternatives, stated analysis lookback window, and a snooze request line
  • Initiative rename and target-date editing via pencil, resource-type badges, and a manager-only delete with confirmation
  • Scope suggestions: per-email rows with Owner and Team badges, Add all, scoped to the initiative's billing accounts
  • Currency settings: exchange rate history table with sample days, per-month override, and backfill
  • Per-day calendar heatmap on the Metrics and Inventory sections of Azure submodules
  • Two-day metrics collection option on the global daily schedule, scoped to Monday runs
  • Security: CSP and header matchers fixed to apply with i18n, HSTS added, i18next-fs-backend pinned for a prototype-pollution fix, and a timeout on the core API client
backend
v0.3.0 Released

Projection Layer, Savings Module, and FX Pinning

A provider-agnostic projection layer, the savings module, month-aware FX pinning, negotiated discounts, and security hardening.

  • Savings module: savings breakdown endpoint, multi service-type filtering, and ignoredAt stamped on user rejections
  • Savings snapshots stored in USD and converted on read, captured on startup and via daily cron, with the category trend driven from history
  • Negotiated discounts applied to every money read path, with net-of-discount values
  • Recommendation currency conversion made month-aware and pinned at commit time (fxLockedMonth). Reason-text USD figures converted to the display currency
  • Exchange rate history endpoint
  • Backend reads and writes switched onto provider-agnostic projection tables. Azure system-of-record tables moved to a dedicated Postgres schema
  • Initiatives: manager-only permanent delete, owner suggestions filtered to accounts with recommendations in the initiative, and distinct resource types per initiative
  • Per-user and per-account rate limiting
  • Security: dev secrets removed, metrics and docs gated in production, auth cookie parsing hardened, JSON body size limit, production startup validation, and atomic role permission changes
  • 54 incremental migrations squashed into a single baseline
optimizations-azure
v0.2.0 Released

Shared Workflow Engine and Projection Dual-Write

The recommendation workflow engine moved to the shared submodule, dual-write to projection tables, open-savings snapshots, and collector robustness fixes.

  • Recommendation workflow engine moved to shared and consumed by every collector
  • Collector output dual-written to provider-agnostic projection tables
  • Open savings captured at the end of a global recommendations run
  • VM terminate recommendation based on continuous deallocation rather than snapshot count
  • ASP orphan duration measured in calendar days. Terminate no longer dismissed when inventory history is shorter than the lookback
  • Resource and resource group names lower-cased during inventory collection, with a matching backfill and a subscription-name casing fix
  • Two-day metrics collection on scheduled runs, limited to Monday
  • Disk metrics collector concurrency raised from 3 to 15
  • Pino logging for scheduler and collectors, hardened HTTP layer, and fixes across pricing, subscription deletion, backfill crashes, and advisory-lock key validation
June 2026
frontend
v0.2.0 Released

Recommendations, Scopes, and SQL Database

Recommendations lifecycle UI, Scopes page, two new resource types, and a range of dashboard and inventory improvements.

  • Scopes page under Inform nav: CSV upload, collapsible hierarchy config, Azure subscription auto-population, tree UI with cascading picker, and contact picker integration on initiatives
  • SQL Database and Managed Disk: settings, inventory, recommendations, and detail pages
  • Recommendations lifecycle: ignored status, tier selection, planned fields, exemptions tab, multiple alternatives side-by-side, and recommendation age as relative time
  • Initiatives: clickable rows, more columns, bulk status change, email export rewritten as summary prose, and date formatting respecting user preference
  • Savings figures respect per-year/per-month preference throughout recommendations, initiatives, and inventory
  • Cross-chart filtering and stat card groups for recommendations and initiatives on the usage dashboard
  • Table filter state persisted across navigation without requiring a saved view
  • Exchange rate panel moved to Global Settings. CPU, memory, and disk IOPS thresholds added to VM recommendation settings
backend
v0.2.0 Released

Scopes, Currency, and Recommendation Lifecycle

Scopes feature, multi-currency support, a full recommendation lifecycle overhaul, and two new Azure resource types.

  • Scopes: map cloud accounts to team/owner contacts via CSV upload, dynamic hierarchy levels with HierarchyItem CRUD, and Azure subscription auto-population
  • Currency conversion via Frankfurter/ECB exchange rates with per-year/per-month savings view preference
  • Recommendation lifecycle: ignored status, tier selection, planned fields, resource exemptions, status-change audit trail, bulk status change, and revert to new
  • SQL Database and Managed Disk inventory, recommendations, and settings endpoints
  • Initiatives: server-side system changelog, archive instead of delete, time-windowed comment edits, and block archive while recommendations are in progress
  • Saved views with field-values, sorting, and reorder support for inventory, logs, and recommendations
  • Schema and migrations moved to shared submodule. Unified RunLog model across all collectors
  • Fields renamed to FOCUS cloud-agnostic terminology. resourceName/resourceGroup casing normalized
optimizations-azure
v0.1.0 Released

Initial Azure scanner

First release of the Azure cost optimization module: VM and ASP recommendation engines, two new resource types, and parallelized collection.

  • VM recommendation engine: terminate, rightsize, and burstable-candidate types with peak CPU, memory, disk IOPS, and HTTP queue safety gates
  • ASP recommendations: scale-in and rightsize merged into a single recommendation per plan
  • SQL Database and Managed Disk collectors: inventory, metrics, pricing, and recommendations
  • Parallelized metrics collection for VMs, SQL Databases, ASPs, and disks with bounded concurrency
  • Resource exemption support and ignored status across all recommendation collectors
  • Per-module schedule overrides for metrics and recommendations runs
  • Unified RunLog model. Shared submodule consumed for schema, auth, and currency
  • Debug flag for per-resource log verbosity. Progress logging per region/subscription group
May 2026
backend
v0.1.0 Released

Foundation

Core platform: authentication, access control, multi-language support, and licensing.

  • JWT authentication with httpOnly cookies, login, logout, and token revocation
  • Role-based access control: default roles (Administrator, Analyst, Engineer) and custom roles with configurable permission boundaries
  • i18n infrastructure ready for community translations
  • Source First License 1.1: free for non-commercial use, commercial license available
frontend
v0.1.0 Released

Foundation

Core UI: authentication flows, user and role management, theming, and localization.

  • Authentication UI: login, logout, and session handling
  • User management: invite, protect, and manage users and their roles
  • Custom themes: user-selectable themes with dark mode support
  • Localization: i18n wired up across all pages