Skip to content
GitHub Actions edited this page Mar 15, 2026 · 2 revisions

nself v0.9.9 - Stability & Plugin Ecosystem

Release Date: March 15, 2026 Type: Bug Fix & Stability Release Status: Release Candidate ✅


Overview

v0.9.9 is the final stabilization release before v1.0 LTS. It ships with no new features — only targeted bug fixes across the CLI, the Pro plugin ecosystem, and the nclaw showcase apps.


Bug Fixes

CLI

nself status — service detail lookup failure

show_service_detail built container names with hyphens (e.g. nself_node-exporter) but Docker Compose converts hyphens to underscores when naming containers (nself_node_exporter). The lookup always failed for hyphenated service names. Fixed by converting hyphens with ${service_name//-/_}.

nself logs — crash when PROJECT_NAME is not set

format_service_name used bare ${PROJECT_NAME} in prefix-strip patterns. With set -u active, referencing this variable before export caused an immediate crash. Fixed with ${PROJECT_NAME:-nself} defaults.

nself status — shows 0/N running for non-default project names

When a project was started with a custom COMPOSE_PROJECT_NAME, the status command reported all services as stopped because the container name prefix didn't match. Both issues above contributed to this symptom.

nself ssl delegationnself ssl now correctly delegates to nself auth ssl.


Pro Plugins

All nine nclaw Rust plugins (notify, cron, google, mux, ai, claw, voice, browser, livekit) compile clean under SQLX_OFFLINE=true with zero errors.

nself-aisqlx::query! macros in usage.rs had stale .sqlx/ cache hashes that diverged after query updates. Converted both record_fallback and monthly_spend to runtime sqlx::query() to remove the CI dependency on regenerated cache files.

nself-googleAccountInfo struct was missing #[derive(serde::Serialize)], causing an into_response() compile error in the account info endpoint. Derive added.

nself-muxCalendarSync and DonorAction variants were added to RuleAction in rules.rs but the match arm in gmail_history.rs was not updated, producing a non-exhaustive match compile error. Both arms added.

nself-voice — Claw health check now has a 3-second timeout to prevent indefinite blocking at startup. Session and recording data is now written to the database on call completion. Migration adds call_sid UNIQUE, from_number, and status columns.

nself-browser — Session records are written to np_browser_sessions after each screenshot, scrape, and pdf operation. Columns: url, operation, status, error, duration_ms, source_account_id.

nself-cron — Schedule validation runs before INSERT (invalid cron expressions return HTTP 400 instead of writing a broken job). list_jobs_for_account returns only jobs owned by the requesting account. source_account_id stored on all job records.


CI

Coverage workflow schema mismatch — the psql schema setup step in coverage.yml was creating tables with outdated column definitions. Updated to match live migration output:

  • np_jobs: added source_account_id TEXT NOT NULL DEFAULT 'default'
  • np_voice_sessions: added call_sid TEXT UNIQUE, from_number TEXT, status TEXT NOT NULL DEFAULT 'active'
  • np_browser_sessions: columns replaced to match new migration schema

nclaw Showcase App

Calendar recurrence — day-of-week timezone bugcheck.getDay() returns the day of week in the local timezone. ISO date strings parsed with new Date('YYYY-MM-DD') are UTC midnight, which shifts to the prior calendar day in UTC−4/−5. Fixed with getUTCDay() throughout the weekly recurrence check.

Key rotation — DST boundary — US Daylight Saving Time (March 8, 2026) caused a 30-day key age check to return false on day 30 because the raw millisecond difference was ~29.96 days. Fixed by truncating both timestamps to UTC midnight before computing the day delta.


Upgrading

nself update
# or reinstall from scratch:
curl -fsSL https://install.nself.org | bash

If the plugin registry returns an empty list after updating, clear the local cache:

rm -f ~/.nself/cache/plugin-registry.json
nself plugin refresh
nself plugin list

Pro plugins use short IDs, not the Rust crate names:

nself license set <your-license-key>
nself plugin install notify cron google mux ai claw
# Max tier only:
nself plugin install voice browser

What's Next — v1.0.0 LTS

v1.0.0 is the stable, long-term-support release. It follows v0.9.9 once the release candidate has been validated in production for at least two weeks with no critical issues.

Home


Getting Started


Commands


Features


Configuration


Plugins (87 + 10 monitoring)

Free (25)
Pro (62)
Planned (26)
  • plugin-audit
  • plugin-blog
  • plugin-checkout
  • plugin-commerce
  • plugin-drm
  • plugin-export
  • plugin-flow
  • plugin-import
  • plugin-ldap
  • plugin-mailgun
  • plugin-media
  • plugin-oauth-providers
  • plugin-pages
  • plugin-postmark
  • plugin-rate-limit
  • plugin-reports
  • plugin-saml
  • plugin-scheduler
  • plugin-sendgrid
  • plugin-sso
  • plugin-subscription
  • plugin-thumb
  • plugin-transcoder
  • plugin-twilio
  • plugin-waf
  • plugin-watermark

Guides


Architecture


Reference


Licensing


Security


Brand


Operations


Contributing


Admin


Changelog


All commands (52)

Clone this wiki locally