# eridu-tech > Mastering eridu-tech: Comprehensive Guides for the Backend Server Component Library ## search - [Search the documentation](/search.md) ## docs - [Tags](/docs/tags.md) - [One doc tagged with "Alibaba Cloud Function Compute"](/docs/tags/alibaba-cloud-function-compute.md) - [One doc tagged with "Analog.js"](/docs/tags/analog-js.md) - [7 docs tagged with "AOP"](/docs/tags/aop.md) - [One doc tagged with "AWS Lambda"](/docs/tags/aws-lambda.md) - [One doc tagged with "AWS Lambda@Edge"](/docs/tags/aws-lambda-edge.md) - [One doc tagged with "Aws s3"](/docs/tags/aws-s-3.md) - [One doc tagged with "Azure Functions"](/docs/tags/azure-functions.md) - [One doc tagged with "Bun"](/docs/tags/bun.md) - [6 docs tagged with "Cache"](/docs/tags/cache.md) - [6 docs tagged with "CircuitBreaker"](/docs/tags/circuit-breaker.md) - [One doc tagged with "Cloudflare r2"](/docs/tags/cloudflare-r-2.md) - [One doc tagged with "Cloudflare Workers"](/docs/tags/cloudflare-workers.md) - [9 docs tagged with "Configuring adapters"](/docs/tags/configuring-adapters.md) - [One doc tagged with "Container"](/docs/tags/container.md) - [9 docs tagged with "Creating adapters"](/docs/tags/creating-adapters.md) - [2 docs tagged with "Creating database adapters"](/docs/tags/creating-database-adapters.md) - [One doc tagged with "Deno"](/docs/tags/deno.md) - [One doc tagged with "Dependency Injection"](/docs/tags/dependency-injection.md) - [One doc tagged with "DI"](/docs/tags/di.md) - [One doc tagged with "Digital ocean spaces"](/docs/tags/digital-ocean-spaces.md) - [6 docs tagged with "Event-bus"](/docs/tags/event-bus.md) - [One doc tagged with "Fastly Compute"](/docs/tags/fastly-compute.md) - [5 docs tagged with "FileStorage"](/docs/tags/file-storage.md) - [One doc tagged with "File system"](/docs/tags/file-system.md) - [One doc tagged with "Google Cloud Run"](/docs/tags/google-cloud-run.md) - [One doc tagged with "Hono"](/docs/tags/hono.md) - [24 docs tagged with "HttpRouter"](/docs/tags/http-router.md) - [8 docs tagged with "In-memory"](/docs/tags/in-memory.md) - [6 docs tagged with "Kysely"](/docs/tags/kysely.md) - [6 docs tagged with "Libsql"](/docs/tags/libsql.md) - [6 docs tagged with "Lock"](/docs/tags/lock.md) - [One doc tagged with "Middleware"](/docs/tags/middleware.md) - [One doc tagged with "Middleware - Utilities"](/docs/tags/middleware-utilities.md) - [7 docs tagged with "Middlewares"](/docs/tags/middlewares.md) - [One doc tagged with "Minio"](/docs/tags/minio.md) - [6 docs tagged with "Mongodb"](/docs/tags/mongodb.md) - [6 docs tagged with "Mysql"](/docs/tags/mysql.md) - [One doc tagged with "Netlify"](/docs/tags/netlify.md) - [One doc tagged with "Next.js App Router"](/docs/tags/next-js-app-router.md) - [One doc tagged with "Next.js Pages Router"](/docs/tags/next-js-pages-router.md) - [8 docs tagged with "NoOp"](/docs/tags/no-op.md) - [One doc tagged with "Node.js"](/docs/tags/node-js.md) - [One doc tagged with "Nuxt"](/docs/tags/nuxt.md) - [8 docs tagged with "Plugins"](/docs/tags/plugins.md) - [6 docs tagged with "Postgres"](/docs/tags/postgres.md) - [6 docs tagged with "RateLimiter"](/docs/tags/rate-limiter.md) - [7 docs tagged with "Redis"](/docs/tags/redis.md) - [One doc tagged with "Resolver"](/docs/tags/resolver.md) - [7 docs tagged with "Resolvers"](/docs/tags/resolvers.md) - [One doc tagged with "Routing"](/docs/tags/routing.md) - [2 docs tagged with "Schema"](/docs/tags/schema.md) - [6 docs tagged with "Semaphore"](/docs/tags/semaphore.md) - [6 docs tagged with "SharedLock"](/docs/tags/shared-lock.md) - [One doc tagged with "Signed"](/docs/tags/signed.md) - [One doc tagged with "SolidStart"](/docs/tags/solid-start.md) - [6 docs tagged with "Sqlite"](/docs/tags/sqlite.md) - [One doc tagged with "Supabase Functions"](/docs/tags/supabase-functions.md) - [One doc tagged with "Supabase Storage"](/docs/tags/supabase-storage.md) - [One doc tagged with "SvelteKit"](/docs/tags/svelte-kit.md) - [One doc tagged with "TanStack Start"](/docs/tags/tan-stack-start.md) - [One doc tagged with "Tigris"](/docs/tags/tigris.md) - [9 docs tagged with "Usage"](/docs/tags/usage.md) - [10 docs tagged with "Utilities"](/docs/tags/utilities.md) - [2 docs tagged with "Validation"](/docs/tags/validation.md) - [One doc tagged with "Vercel"](/docs/tags/vercel.md) - [One doc tagged with "WinterTC"](/docs/tags/winter-tc.md) - [Backoff policies](/docs/components/backoff_policies.md): The eridu-tech/backoff-policies component - [Cache middlewares](/docs/components/cache/cache_middlewares.md): withCacheFactory middleware - [Cache Plugins](/docs/components/cache/cache_plugin.md): withCachePrefix plugin - [CacheResolver](/docs/components/cache/cache_resolver.md): The CacheResolver class provides a flexible way to configure and switch between different cache adapters at runtime. - [Cache usage](/docs/components/cache/cache_usage.md): The eridu-tech/cache component provides a way for storing key-value pairs with expiration independent of data storage - [Configuring Cache adapters](/docs/components/cache/configuring_cache_adapters.md): MemoryCacheAdapter - [Creating cache adapters](/docs/components/cache/creating_cache_adapters.md): Implementing your custom ICacheAdapter - [CircuitBreaker provider resolver classes](/docs/components/circuit_breaker/circuit_breaker_factory_resolver.md): pro - [CircuitBreaker middlewares](/docs/components/circuit_breaker/circuit_breaker_middlewares.md): withCircuitBreakerFactory middleware - [CircuitBreaker Plugins](/docs/components/circuit_breaker/circuit_breaker_plugin.md): withCircuitBreakerPrefix plugin - [CircuitBreaker usage](/docs/components/circuit_breaker/circuit_breaker_usage.md): The eridu-tech/circuit-breaker component provides a way for managing circuit-breaker independent of underlying platform or storage. - [Configuring CircuitBreaker adapters](/docs/components/circuit_breaker/configuring_circuit_breaker_adapters.md): RedisCircuitBreakerAdapter - [Configuring CircuitBreaker policies](/docs/components/circuit_breaker/configuring_circuit_breaker_policies.md): ConsecutiveBreaker - [Creating CircuitBreaker adapters](/docs/components/circuit_breaker/creating_circuit_breaker_adapters.md): Implementing your custom ICircuitBreakerAdapter - [Creating CircuitBreaker policies](/docs/components/circuit_breaker/creating_circuit_breaker_policies.md): Implementing your custom ICircuitBreakerPolicy - [Codec](/docs/components/codec.md): The eridu-tech/codec component provides seamless way to encode/decode data. - [Collection](/docs/components/collection.md): The eridu-tech/collection component provides a fluent, convenient wrapper for working with a Array, Iterable and AsyncIterable. - [Config accessor](/docs/components/config_accessor.md): The eridu-tech/config-accessor component provides standardized type-safe access to domain configuration variables. It supports optional schema validation useful accessing dynamic configurations (e.g tenneat configurations). - [DI Container usage](/docs/components/di.md): The eridu-tech/di component provides an Inversion of Control (IoC) container for managing service registrations, dependency resolution, and object lifetimes. - [Env accessor](/docs/components/env_accessor.md): The eridu-tech/env-accessor component provides easy type-safe access to enviroment variables. - [Configuring EventBus adapters](/docs/components/event_bus/configuring_event_bus_adapters.md): MemoryEventBusAdapter - [Creating EventBus adapters](/docs/components/event_bus/creating_event_bus_adapters.md): Implementing your custom IEventBusAdapter - [EventBus middlewares](/docs/components/event_bus/event_bus_middlewares.md): EventBus middlewares let you dispatch events around a wrapped function without coupling the function itself to the event bus. Each factory takes an IEventDispatcher (such as an EventBus) and returns a middleware configured with an event type and a payload invocable. The payload is resolved from the wrapped function's arguments (and, where applicable, its return value or caught error) and dispatched on the provided dispatcher, while the wrapped function's result (or thrown error) passes through unchanged. If the payload resolves to null (i.e. it doesn't return a value), no event is dispatched. - [EventBus Plugins](/docs/components/event_bus/event_bus_plugin.md): withEventBusPrefix plugin - [EventBusResolver](/docs/components/event_bus/event_bus_resolver.md): The EventBusResolver class provides a flexible way to configure and switch between different event-bus adapters at runtime. - [EventBus usage](/docs/components/event_bus/event_bus_usage.md): The eridu-tech/event-bus component provides a way for dispatching and listening to events independent of underlying technology. - [ExecutionContext](/docs/components/execution_context.md): The eridu-tech/execution-context module provides a type-safe, composable, and environment-agnostic way to store and propagate contextual data (such as request IDs, user info, or tracing metadata) across async boundaries and function calls. IExecutionContext uses symbols internally for reliable context isolation. - [FileSize](/docs/components/file_size.md): The eridu-tech/file-size component provides an easy way for defining, manipulating, and comparing file size. Furthermore, it is designed for easy integration with external file-size libraries. - [Configuring FileStorage adapters](/docs/components/file_storage/configuring_file_storage_adapters.md): MemoryFileStorageAdapter - [Creating FileStorage adapters](/docs/components/file_storage/creating_file_storage_adapters.md): Implementing your custom IFileStorageAdapter - [FileStorage Plugins](/docs/components/file_storage/file_storage_plugin.md): withFileStoragePrefix plugin - [FileStorageResolver](/docs/components/file_storage/file_storage_resolver.md): The FileStorageResolver class provides a flexible way to configure and switch between different FileStorage adapters at runtime. - [FileStorage usage](/docs/components/file_storage/file_storage_usage.md): The eridu-tech/file-storage component provides a way for managing files independent of underlying platform or storage. - [Configuring HttpRouter adapters](/docs/components/http_router/configuring_http_router_adapters.md): HttpRouter is adapter-based: it delegates URL pattern matching to a Hono Router instance. Any existing Hono-compatible adapter can be used interchangeably with the HttpRouter class. - [Creating HttpRouter adapters](/docs/components/http_router/creating_http_router_adapters.md): HttpRouter relies on the Hono router adapter interface for URL pattern matching and request dispatching. It does not ship with a built-in router. Instead, you supply a Hono Router instance that satisfies the adapter interface. - [Cloudflare Workers](/docs/components/http_router/frameworks_and_runtimes/edge_platforms/cloudflare_workers.md): Export router.fetch as the default module fetch handler. - [Fastly Compute](/docs/components/http_router/frameworks_and_runtimes/edge_platforms/fastly_compute.md): Use the @fastly/hono-fastly-compute adapter with the fire helper. - [Netlify](/docs/components/http_router/frameworks_and_runtimes/edge_platforms/netlify.md): Use the hono/netlify adapter to wrap HttpRouter for Netlify Edge Functions. - [Vercel](/docs/components/http_router/frameworks_and_runtimes/edge_platforms/vercel.md): Deploy HttpRouter to Vercel serverless or edge functions by exporting the default fetch handler. - [Analog.js](/docs/components/http_router/frameworks_and_runtimes/frameworks/analogjs.md): Analog.js API routes are powered by Nitro and h3. Use toWebRequest from h3 to convert the incoming event to a standard Request. - [Next.js App Router](/docs/components/http_router/frameworks_and_runtimes/frameworks/nextjs_app_router.md): HttpRouter can be used directly with Next.js App Router route handlers. - [Next.js Pages Router](/docs/components/http_router/frameworks_and_runtimes/frameworks/nextjs_pages_router.md): HttpRouter can be used directly with Next.js Pages Router route handlers. - [Nuxt](/docs/components/http_router/frameworks_and_runtimes/frameworks/nuxt.md): HttpRouter integrates with Nuxt server routes via Nitro and h3. Use toWebRequest from h3 to convert the incoming event to a standard Request. - [SolidStart](/docs/components/http_router/frameworks_and_runtimes/frameworks/solidstart.md): SolidStart supports fetch-based route handlers natively. - [SvelteKit](/docs/components/http_router/frameworks_and_runtimes/frameworks/sveltekit.md): HttpRouter works with SvelteKit server endpoints via the standard Request/Response API. - [TanStack Start](/docs/components/http_router/frameworks_and_runtimes/frameworks/tanstack_start.md): TanStack Start uses Vinxi under the hood and supports standard fetch handlers. - [Bun](/docs/components/http_router/frameworks_and_runtimes/javascript_runtimes/bun.md): Bun's Bun.serve() accepts a standard fetch handler directly. - [Deno](/docs/components/http_router/frameworks_and_runtimes/javascript_runtimes/deno.md): Deno provides the native Deno.serve() function which accepts a standard fetch handler. - [Node.js](/docs/components/http_router/frameworks_and_runtimes/javascript_runtimes/nodejs.md): Use the @hono/node-server adapter to serve HttpRouter on Node.js. - [Frameworks, Runtimes, and Platforms](/docs/components/http_router/frameworks_and_runtimes/overview.md): HttpRouter implements the WinterTC fetch standard, exposing a fetch(request Response | Promise method. This makes it compatible with any framework, runtime, or platform adapter that accepts a standard fetch handler. - [Alibaba Cloud Function Compute](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/alibaba_cloud_function_compute.md): This guide uses the third-party adapter rwv/hono-alibaba-cloud-fc3-adapter to run HttpRouter on Alibaba Cloud Function Compute. - [AWS Lambda](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/aws_lambda.md): Use the hono/aws-lambda adapter to wrap HttpRouter for AWS Lambda. - [AWS Lambda@Edge](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/aws_lambda_edge.md): Use the hono/lambda-edge adapter to run HttpRouter on Lambda@Edge with CloudFront. - [Azure Functions](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/azure_functions.md): Use the Azure Functions Adapter to run HttpRouter on Azure Functions V4 with Node.js 18+. - [Google Cloud Run](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/google_cloud_run.md): Google Cloud Run runs containerized workloads. This guide assumes you have a Google Cloud account with billing enabled. - [Supabase Functions](/docs/components/http_router/frameworks_and_runtimes/serverless_platforms/supabase_functions.md): Supabase Edge Functions run on Deno. HttpRouter integrates natively. - [HTTP Router usage](/docs/components/http_router/http_router_usage.md): The eridu-tech/http-router component provides a framework-agnostic HTTP router built on top of the Hono router engine. It implements the Winter TC fetch object standard, which means it exposes a standard fetch(request): Response signature. This allows it to be integrated directly into any runtime or framework that supports the Fetch API including Node.js, Bun, Deno, Cloudflare Workers, Next.js, Nuxt, SvelteKit, and more. - [Configuring Lock adapters](/docs/components/lock/configuring_lock_adapters.md): MemoryLockAdapter - [Creating Lock adapters](/docs/components/lock/creating_lock_adapters.md): Implementing your custom ILockAdapter - [LockFactoryResolver](/docs/components/lock/lock_factory_resolver.md): The LockFactoryResolver class provides a flexible way to configure and switch between different lock adapters at runtime. - [Lock middlewares](/docs/components/lock/lock_middlewares.md): withLockFactory middleware - [Lock Plugins](/docs/components/lock/lock_plugin.md): withLockPrefix plugin - [Lock usage](/docs/components/lock/lock_usage.md): The eridu-tech/lock component provides a way for managing locks independent of underlying platform or storage. - [Middleware](/docs/components/middleware.md): The eridu-tech/middleware module provides a flexible middleware system for intercepting and composing function calls. It enables you to wrap functions with pre-processing and post-processing logic, similar to middleware patterns found in web frameworks like Express.js. - [Overview](/docs/components/overview.md): eridu-tech is a modular, adapter-first TypeScript library for building - [Configuring RateLimiter adapters](/docs/components/rate-limiter/configuring_rate_limiter_adapters.md): RedisRateLimiterAdapter - [Configuring RateLimiter policies](/docs/components/rate-limiter/configuring_rate_limiter_policies.md): SlidingWindowLimiter - [Creating RateLimiter adapters](/docs/components/rate-limiter/creating_rate_limiter_adapters.md): Implementing your custom IRateLimiterAdapter - [Creating RateLimiter policies](/docs/components/rate-limiter/creating_rate_limiter_policies.md): Implementing your custom IRateLimiterPolicy - [RateLimiter resolver factory classes](/docs/components/rate-limiter/rate_limiter_factory_resolver.md): RateLimiterFactoryResolver - [RateLimiter middlewares](/docs/components/rate-limiter/rate_limiter_middlewares.md): withRateLimiterFactory middleware - [RateLimiter Plugins](/docs/components/rate-limiter/rate_limiter_plugin.md): withRateLimiterPrefix plugin - [RateLimiter usage](/docs/components/rate-limiter/rate_limiter_usage.md): The eridu-tech/rate-limiter component provides a way for managing rate-limiter independent of underlying platform or storage. - [Resilience](/docs/components/resilience.md): The eridu-tech/resilience component provides predefined fault tolerant middlewares. - [Configuring Semaphore adapters](/docs/components/semaphore/configuring_semaphore_adapters.md): MemorySemaphoreAdapter - [Creating Semaphore adapters](/docs/components/semaphore/creating_semaphore_adapters.md): Implementing your custom ISemaphoreAdapter - [SemaphoreFactoryResolver](/docs/components/semaphore/semaphore_factory_resolver.md): The SemaphoreFactoryResolver class provides a flexible way to configure and switch between different semaphore adapters at runtime. - [Semaphore middlewares](/docs/components/semaphore/semaphore_middlewares.md): withSemaphoreFactory middleware - [Semaphore Plugins](/docs/components/semaphore/semaphore_plugin.md): withSemaphorePrefix plugin - [Semaphore usage](/docs/components/semaphore/semaphore_usage.md): The eridu-tech/semaphore component provides a way for managing semaphores independent of underlying platform or storage. - [Serde](/docs/components/serde.md): The eridu-tech/serde component provides seamless way to serialize/deserialize data and adding custom serialization/deserialization logic for custom data types. - [Configuring SharedLock adapters](/docs/components/shared_lock/configuring_shared_lock_adapters.md): MemorySharedLockAdapter - [Creating SharedLock adapters](/docs/components/shared_lock/creating_shared_lock_adapters.md): Implementing your custom ISharedLockAdapter - [SharedLockFactoryResolver](/docs/components/shared_lock/shared_lock_factory_resolver.md): The SharedLockFactoryResolver class provides a flexible way to configure and switch between different shared-lock adapters at runtime. - [SharedLock middlewares](/docs/components/shared_lock/shared_lock_middlewares.md): withSharedLockFactory middleware - [SharedLock Plugins](/docs/components/shared_lock/shared_lock_plugin.md): withSharedLockPrefix plugin - [SharedLock usage](/docs/components/shared_lock/shared_lock_usage.md): The eridu-tech/shared-lock component provides a way for managing shared-locks (a.k.a reader writer locks) independent of underlying platform or storage. - [TimeSpan](/docs/components/time_span.md): The eridu-tech/time-span component provides an easy way for defining, manipulating, and comparing durations. Furthermore, it is designed for easy integration with external time libraries like Luxon and Dayjs. - [Getting started](/docs/getting_started.md): Write business logic once. Replace infrastructure anytime. - [Overview](/docs/guides/overview.md): Welcome to the Guides section. These guides walk you through practical, - [LLM](/docs/llm.md): This page is the gateway for AI assistants, LLM tooling, and anyone who wants - [ErrorPolicy type](/docs/utilities/error_policy_type.md): The ErrorPolicy type determines which errors should be handled for example in resilience middlewares like retry or fallback. - [Invocable](/docs/utilities/invocable.md): An Invocable represents a callable entity, which can be either: