Skip to main content
Version: Next

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

Phase 5 — Lifecycle & startup integrity

#FeatureValueIntrusion
20ConfigureOnStarted / ConfigureOnStopped callbacks — hooks for app-ready and shutdown cleanup (warm caches, close connections, flush buffers)Startup/shutdown controlConfig only
21Separate liveness probe /livez — always-200 endpoint for k8s liveness, distinct from /healthz readinessK8s-native opsZero — auto when health checks enabled
22Startup readiness gate/healthz returns 503 until all OnStarted callbacks complete, preventing traffic before initializationProduction safetyZero — internal
23Warmup / async initializationIWarmupService interface + ConfigureWarmup(Func<IServiceProvider, CancellationToken, Task>[]), executed after app starts but before readiness probe turns greenCold-start mitigationConfig only
24Startup DI validation — optional ValidateOnStart flag that eagerly resolves all registered services to catch missing DI registrations at bootFail-fastConfig only
25Startup banner — log framework version, enabled features, and key config values at UseShark() timeOperationsZero — auto
26Middleware pipeline injection pointsapp.UseShark(beforeAuth: mw => ..., afterAuth: mw => ...) for inserting custom middleware at precise pipeline positionsPipeline controlConfig only
27Eager singleton activation[SingletonService(Eager = true)] flag to pre-create singletons at startup instead of first-resolutionCold-start mitigationAttribute option

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