Skip to main content
Version: 0.5.x

Roadmap

Core principle: features auto-discover via conventions or activate via config. Users never change their ISharkEndpoint coding pattern, never implement new interfaces, and never call framework APIs in business code.

v0.4.0 — 2026-06-28 ✅

  • Deprecate [SharkEndpoint] / [SharkMethod] / SharkHttpMethod and related reflection infrastructure (IDependencyReflectorFactory, DependencyReflectorFactory, Reflector, ReflectorExtension) — migrate to ISharkEndpoint
  • Startup configuration self-checkConfigurationValidator validates JWT, multi-tenant configs at AddShark() time
  • Graceful shutdown — K8s-friendly SIGTERM handling: health check → 503, drain requests, then shutdown
  • Audit trail batch/async write — Channel-based buffer + background flush (AsyncWrite, BatchSize, FlushInterval)
  • Idempotency distributed storeIIdempotencyStore swappable via TryAddSingleton or IdempotencyStoreFactory
  • Rate limiting distributed storeIDistributedRateLimitStore + SharkRateLimiterMiddleware, MemoryRateLimitStore default, RateLimitStoreFactory
  • Sharkable.Cache.Redis NuGet plugin — Redis-backed IIdempotencyStore + IDistributedRateLimitStore, AddSharkableRedis()

Phase 1 — Existing feature hardening (zero-intrusion)

#FeatureValueIntrusionStatus
1Startup configuration self-check — validate JWT, rate limiting, multi-tenant configs at AddShark() time with clear error messagesPrevent misconfigurationZero — auto-runs✅ v0.4.0
2Graceful shutdown — K8s-friendly SIGTERM handling: health check → 503, drain requests, then shutdownProduction necessityZero — K8s-native✅ v0.4.0
3Audit trail batch/async write — buffer + background flush instead of sync writesPerformanceZero — internal mechanism only✅ v0.4.0
4Compile-time route conflict detection — Roslyn Analyzer that catches GET /api/orders/{id} registered twice before runtimeQuality assuranceZero — ships with NuGet

Phase 2 — Observability

#FeatureValueIntrusionStatus
5Built-in distributed tracing — ActivitySource + W3C traceparent propagation, ITracingExporter for OpenTelemetry plugins, auto X-Trace-Id headerObservabilityZero — ActivitySource
6Extensible health checks — structured JSON /healthz via HealthCheckService, HealthChecksConfigure for custom checks, auto JWT authority reachability, uptime + versionOperationsConfig only
7Lightweight profiler panel — per-request latency, memory delta, slow-request TOP10, /_sharkable/profilerDebuggingConfig only

Phase 3 — Distributed / cluster support

#FeatureValueIntrusionStatus
8Idempotency distributed store interfaceIIdempotencyStore + TryAddSingleton, MemoryIdempotencyStore default, users plug Redis/DBCluster HAConfig only✅ v0.4.0
9Multi-tenant data source isolationITenantDataSource scoped service, TenantOptions.ConfigureDataSource(), per-tenant connection string routing via DI scopeSaaSConfig only
10Rate limiting distributed store interfaceIDistributedRateLimitStore + MemoryRateLimitStore default, SharkRateLimiterMiddleware, Sharkable.Cache.Redis pluginCluster HAConfig only✅ v0.4.0
11Adaptive rate limitingEnableAdaptive, dynamically adjust permit limit based on CPU/GC metricsRobustnessConfig only

Phase 4 — Developer experience & polish

#FeatureValueIntrusion
12Auto ETag / conditional requests — SHA256 content hashing, 304 Not Modified for GET endpointsCache optimizationZero — auto
13Response compressionEnableResponseCompression, uses ASP.NET Core built-in middlewarePerformanceConfig only
14OpenAPI example generation — infer realistic examples from type names + XML docsDXZero — auto
15Error message localizationAccept-Language driven IErrorLocalizer, ErrorLocalizerFactory, pluggable translatori18nConfig only
16AutoCrud AOT zero rd.xml — Source Generator emits typeof(T) references at compile time, user never touches itAOT experienceZero — Source Generator
17Soft-delete global filter — entity implements ISoftDeletable, AutoCrud auto-filters IsDeleted = false + soft deletesData layerEntity marker interface
18BackgroundService enhancementSharkBackgroundService with health reporting, retry policy, execution tracingBackground jobsZero — auto
19ProblemDetails (RFC 7807) compatibilityUseProblemDetails flag, all error responses output standard format with type/title/status/detail/instance/traceIdInteropConfig only

Excluded (high-intrusion)

FeatureReason
CQRS-lite (ICommand/IQuery)Requires rewriting every endpoint class
Modular ISharkModuleRequires large restructure
Strongly-typed IDs (OrderId, UserId)Requires changing all method signatures
Smart enumsRequires changing all enum definitions
Cache tag invalidationRequires changing write endpoints
API test runnerRequires writing new test code
Lightweight gatewayRequires creating a new project
Source Generator SDKRequires new package + client code