Skip to content

v0.8.0

Release Date: 2026-06-21

Highlights

  • Organization Ownership Transfer - Transfer ownership from one member to another with transaction-safe implementation
  • OmniStorage Session Backend - Production-ready session storage with Redis support, size limits, and observability
  • SpiceDB API Compatibility - Updated client for newer SpiceDB versions

Added

Organization Ownership Transfer

New TransferOwnership method in the organization service for secure ownership transfers:

import "github.com/grokify/systemforge/identity/organization"

// Transfer ownership to another member
err := orgService.TransferOwnership(ctx, organization.TransferOwnershipInput{
    OrganizationID: orgID,
    FromPrincipal:  currentOwnerID,
    ToPrincipal:    newOwnerID,
    NewRoleForOld:  "admin", // or "member"
})

Features:

  • Transaction-safe implementation with automatic rollback
  • Validation: current owner verification, target must be existing member
  • Authorization backend sync after ownership change
  • New API endpoint: POST /organizations/{slug}/transfer-ownership

See Memberships - Ownership Transfer for details.

OmniStorage Session Store

New session store backend powered by omnistorage-core:

import "github.com/grokify/systemforge/session/bff"

store, err := bff.NewOmniStorageStore(bff.OmniStorageConfig{
    Backend:            "redis",
    RedisURL:           "redis://localhost:6379",
    MaxSessionSize:     1024 * 1024, // 1MB
    MaxSessionsPerUser: 5,           // Auto-evict oldest
    DefaultTTL:         24 * time.Hour,
    SiteID:             "myapp",     // Multi-site isolation
})

Features:

  • Memory and Redis backends for development and production
  • Session size limits to prevent bloat attacks
  • Per-user session limits with automatic eviction
  • Site isolation for multi-tenant deployments
  • Violation callbacks for observability and alerting

See Session Management and BFF Sessions for details.

Fixed

SpiceDB Client API Compatibility

Updated embedded SpiceDB client to use grpc.NewClient instead of the removed runnableServer.GRPCDialContext method, ensuring compatibility with SpiceDB v1.54.0+.

Dependencies

Dependency Change
go 1.26.2 → 1.26.4
github.com/authzed/authzed-go 1.9.0 → 1.10.0
github.com/authzed/spicedb 1.52.0 → 1.54.0
github.com/danielgtaylor/huma/v2 2.37.3 → 2.38.0
github.com/go-chi/chi/v5 5.2.5 → 5.3.0
github.com/jackc/pgx/v5 5.9.2 → 5.10.0
github.com/mattn/go-sqlite3 1.14.44 → 1.14.46
github.com/plexusone/omniobserve 0.9.0 → 0.11.0
github.com/plexusone/omnistorage-core (new) 0.5.0
github.com/redis/go-redis/v9 9.19.0 → 9.20.1
golang.org/x/crypto 0.50.0 → 0.53.0
google.golang.org/grpc 1.81.0 → 1.81.1

Documentation