ShokupanContext
Defined in: src/context.ts:126
Shokupan Request Context
The context object passed to all middleware and route handlers. Provides access to request data, response helpers, and typed state management.
Examples
Section titled “Examples”app.get('/hello', (ctx) => { return ctx.json({ message: 'Hello' });});interface AppState { userId: string; requestId: string;}
const app = new Shokupan<AppState>();
app.use((ctx, next) => { ctx.state.requestId = crypto.randomUUID(); // ✓ Type-safe return next();});app.get('/users/:userId/posts/:postId', (ctx) => { // ctx.params is automatically typed as { userId: string; postId: string } const { userId, postId } = ctx.params; return ctx.json({ userId, postId });});interface RequestState { userId: string; permissions: string[];}
const app = new Shokupan<RequestState>();
app.get('/admin/users/:userId', (ctx) => { // Both typed! const { userId } = ctx.params; // ✓ From path const { permissions } = ctx.state; // ✓ From state
if (!permissions.includes('admin')) { return ctx.json({ error: 'Forbidden' }, 403); } return ctx.json({ userId });});Type Parameters
Section titled “Type Parameters”State extends Record<string, any> = Record<string, any>
The shape of ctx.state for type-safe state access across middleware.
Params
Section titled “Params”Params extends Record<string, string> = Record<string, string>
The shape of ctx.params based on the route path pattern.
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new ShokupanContext<
State,Params>(request,server?,state?,app?,signal?,enableMiddlewareTracking?,requestId?):ShokupanContext<State,Params>
Defined in: src/context.ts:219
Parameters
Section titled “Parameters”request
Section titled “request”any
server?
Section titled “server?”Server<any>
state?
Section titled “state?”State
signal?
Section titled “signal?”AbortSignal
enableMiddlewareTracking?
Section titled “enableMiddlewareTracking?”boolean = false
requestId?
Section titled “requestId?”string
Returns
Section titled “Returns”ShokupanContext<State, Params>
Properties
Section titled “Properties”[$debug]?
Section titled “[$debug]?”
optional[$debug]:DebugCollector
Defined in: src/context.ts:135
[$finalResponse]?
Section titled “[$finalResponse]?”
optional[$finalResponse]:Response
Defined in: src/context.ts:136
[$rawBody]?
Section titled “[$rawBody]?”
optional[$rawBody]:string|ArrayBuffer|Uint8Array<ArrayBufferLike>
Defined in: src/context.ts:137
[$routeMatched]
Section titled “[$routeMatched]”[$routeMatched]:
boolean=false
Defined in: src/context.ts:153
readonlyoptionalapp:Shokupan
Defined in: src/context.ts:223
handlerStack
Section titled “handlerStack”handlerStack:
HandlerStackItem[] =[]
Defined in: src/context.ts:132
isHtmx
Section titled “isHtmx”isHtmx:
boolean
Defined in: src/plugins/application/htmx/index.ts:14
Checks if the request is an HTMX request.
isHtmxBoosted
Section titled “isHtmxBoosted”isHtmxBoosted:
boolean
Defined in: src/plugins/application/htmx/index.ts:18
Checks if the request is boosting.
isUpgraded
Section titled “isUpgraded”isUpgraded:
boolean=false
Defined in: src/context.ts:410
params
Section titled “params”params:
Params
Defined in: src/context.ts:130
request
Section titled “request”
readonlyrequest:any
Defined in: src/context.ts:220
response
Section titled “response”
readonlyresponse:ShokupanResponse
Defined in: src/context.ts:134
server?
Section titled “server?”
readonlyoptionalserver:Server<any>
Defined in: src/context.ts:221
session
Section titled “session”session:
SessionData&object
Defined in: src/plugins/middleware/session.ts:298
Type Declaration
Section titled “Type Declaration”id:
string
destroy()
Section titled “destroy()”destroy():
Promise<void>
Returns
Section titled “Returns”Promise<void>
regenerate()
Section titled “regenerate()”regenerate():
Promise<void>
Returns
Section titled “Returns”Promise<void>
reload()
Section titled “reload()”reload():
Promise<void>
Returns
Section titled “Returns”Promise<void>
save()
Section titled “save()”save():
Promise<void>
Returns
Section titled “Returns”Promise<void>
touch()
Section titled “touch()”touch():
void
Returns
Section titled “Returns”void
sessionID
Section titled “sessionID”sessionID:
string
Defined in: src/plugins/middleware/session.ts:299
sessionStore
Section titled “sessionStore”sessionStore:
Store
Defined in: src/plugins/middleware/session.ts:300
signal?
Section titled “signal?”
readonlyoptionalsignal:AbortSignal
Defined in: src/context.ts:224
state:
State
Defined in: src/context.ts:131
Accessors
Section titled “Accessors”cookies
Section titled “cookies”Get Signature
Section titled “Get Signature”get cookies():
Record<string,string>
Defined in: src/context.ts:316
Request cookies
Returns
Section titled “Returns”Record<string, string>
headers
Section titled “headers”Get Signature
Section titled “Get Signature”get headers():
any
Defined in: src/context.ts:367
Request headers
Returns
Section titled “Returns”any
Get Signature
Section titled “Get Signature”get host():
string
Defined in: src/context.ts:341
Request host (e.g. “localhost:3000”)
Returns
Section titled “Returns”string
hostname
Section titled “hostname”Get Signature
Section titled “Get Signature”get hostname():
string
Defined in: src/context.ts:334
Request hostname (e.g. “localhost”)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get io():
Server<DefaultEventsMap,DefaultEventsMap,DefaultEventsMap,any>
Defined in: src/context.ts:398
Socket.io server
Returns
Section titled “Returns”Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>
Get Signature
Section titled “Get Signature”get ip():
SocketAddress
Defined in: src/context.ts:329
Client IP address
Returns
Section titled “Returns”SocketAddress
logger
Section titled “logger”Get Signature
Section titled “Get Signature”get logger():
Logger
Defined in: src/context.ts:142
Application logger instance
Returns
Section titled “Returns”Logger
method
Section titled “method”Get Signature
Section titled “Get Signature”get method():
any
Defined in: src/context.ts:264
HTTP method
Returns
Section titled “Returns”any
nativeStream
Section titled “nativeStream”Get Signature
Section titled “Get Signature”get nativeStream():
ReadableStream<Uint8Array<ArrayBufferLike>>
Defined in: src/context.ts:709
Exposes the raw, unread incoming ReadableStream of the HTTP request body.
Use this if you want to manually process chunks (e.g., custom streaming parsers)
without anything being buffered to memory or disk first.
Returns
Section titled “Returns”ReadableStream<Uint8Array<ArrayBufferLike>>
origin
Section titled “origin”Get Signature
Section titled “Get Signature”get origin():
string
Defined in: src/context.ts:360
Request origin (e.g. “http://localhost:3000”)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get path():
any
Defined in: src/context.ts:268
Request path
Returns
Section titled “Returns”any
protocol
Section titled “protocol”Get Signature
Section titled “Get Signature”get protocol():
string
Defined in: src/context.ts:348
Request protocol (e.g. “http:”, “https:“)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get query():
Record<string,any>
Defined in: src/context.ts:303
Request query params
Returns
Section titled “Returns”Record<string, any>
Get Signature
Section titled “Get Signature”get req():
any
Defined in: src/context.ts:260
Base request
Returns
Section titled “Returns”any
requestId
Section titled “requestId”Get Signature
Section titled “Get Signature”get requestId():
string
Defined in: src/context.ts:194
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get res():
ShokupanResponse
Defined in: src/context.ts:378
Base response object
Returns
Section titled “Returns”responseBody
Section titled “responseBody”Get Signature
Section titled “Get Signature”get responseBody():
string|ArrayBuffer|Uint8Array<ArrayBufferLike>
Defined in: src/context.ts:383
Get the raw response body content (if available)
Returns
Section titled “Returns”string | ArrayBuffer | Uint8Array<ArrayBufferLike>
secure
Section titled “secure”Get Signature
Section titled “Get Signature”get secure():
boolean
Defined in: src/context.ts:355
Whether request is secure (https)
Returns
Section titled “Returns”boolean
socket
Section titled “socket”Get Signature
Section titled “Get Signature”get socket():
Socket<DefaultEventsMap,DefaultEventsMap,DefaultEventsMap,any>
Defined in: src/context.ts:393
Socket.io socket
Returns
Section titled “Returns”Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>
Get Signature
Section titled “Get Signature”get url():
URL
Defined in: src/context.ts:248
Returns
Section titled “Returns”URL
Get Signature
Section titled “Get Signature”get ws():
ServerWebSocket<undefined>
Defined in: src/context.ts:388
Raw WebSocket connection
Returns
Section titled “Returns”ServerWebSocket<undefined>
Methods
Section titled “Methods”body()
Section titled “body()”body<
T>():Promise<T>
Defined in: src/context.ts:672
Read request body with caching to avoid double parsing. The body is only parsed once and cached for subsequent reads.
Type Parameters
Section titled “Type Parameters”T = any
Returns
Section titled “Returns”Promise<T>
emit()
Section titled “emit()”emit(
event,data?):void
Defined in: src/context.ts:843
Emit an event to the client (WebSocket only)
Parameters
Section titled “Parameters”string
Event name
any
Event data (Must be JSON serializable)
Returns
Section titled “Returns”void
file()
Section titled “file()”file(
path,fileOptions?,responseOptions?):Promise<Response>
Defined in: src/context.ts:993
Respond with a file
Parameters
Section titled “Parameters”string
fileOptions?
Section titled “fileOptions?”BlobPropertyBag
responseOptions?
Section titled “responseOptions?”ResponseInit
Returns
Section titled “Returns”Promise<Response>
get(
name):any
Defined in: src/context.ts:373
Get a request header
Parameters
Section titled “Parameters”string
Header name
Returns
Section titled “Returns”any
html()
Section titled “html()”html(
html,status?,headers?):Promise<Response>
Defined in: src/context.ts:922
Respond with HTML content
Parameters
Section titled “Parameters”string | Promise<string>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
htmxRedirect()
Section titled “htmxRedirect()”htmxRedirect(
url):void
Defined in: src/plugins/application/htmx/index.ts:30
Sets the HX-Redirect header.
Parameters
Section titled “Parameters”string
Returns
Section titled “Returns”void
json()
Section titled “json()”json(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:854
Respond with a JSON object
Parameters
Section titled “Parameters”object | Promise<object>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
jsx(
element,args?,status?,headers?):Promise<Response>
Defined in: src/context.ts:1028
Render a JSX element
Parameters
Section titled “Parameters”element
Section titled “element”any
JSX Element
unknown
JSX Element Args/Props
status?
Section titled “status?”number
HTTP Status
headers?
Section titled “headers?”HTTP Headers
Returns
Section titled “Returns”Promise<Response>
nativeFormData()
Section titled “nativeFormData()”nativeFormData():
Promise<FormData>
Defined in: src/context.ts:700
Bypasses the configured maxBodySize and memory buffering, directly invoking the
underlying native runtime’s FormData parser.
In Bun, this handles large files by seamlessly backing them up to disk, keeping memory usage extremely low. Use this when handling large file uploads.
Returns
Section titled “Returns”Promise<FormData>
onSocketDisconnect()
Section titled “onSocketDisconnect()”onSocketDisconnect(
callback):void
Defined in: src/context.ts:170
Registers a callback to be executed when the associated WebSocket disconnects. This is only applicable for requests that are part of a WebSocket interaction or upgrade.
Parameters
Section titled “Parameters”callback
Section titled “callback”() => void | Promise<void>
Returns
Section titled “Returns”void
parseBody()
Section titled “parseBody()”parseBody():
Promise<void>
Defined in: src/context.ts:718
Pre-parse the request body before handler execution. This improves performance and enables Node.js compatibility for large payloads. Errors are deferred until the body is actually accessed in the handler.
Returns
Section titled “Returns”Promise<void>
pipe()
Section titled “pipe()”pipe(
stream,options?):Response
Defined in: src/context.ts:1048
Pipe a ReadableStream to the response
Parameters
Section titled “Parameters”stream
Section titled “stream”ReadableStream
ReadableStream to pipe
options?
Section titled “options?”ResponseInit
Response options (status, headers)
Returns
Section titled “Returns”Response
pushUrl()
Section titled “pushUrl()”pushUrl(
url):void
Defined in: src/plugins/application/htmx/index.ts:26
Sets the HX-Push-Url header.
Parameters
Section titled “Parameters”string | false
Returns
Section titled “Returns”void
redirect()
Section titled “redirect()”redirect(
url,status):Promise<Response>
Defined in: src/context.ts:944
Respond with a redirect
Parameters
Section titled “Parameters”string | Promise<string>
status
Section titled “status”number = 302
Returns
Section titled “Returns”Promise<Response>
refresh()
Section titled “refresh()”refresh():
void
Defined in: src/plugins/application/htmx/index.ts:34
Sets the HX-Refresh header.
Returns
Section titled “Returns”void
respond()
Section titled “respond()”respond(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:766
Respond with automatic content negotiation Uses Accept header to determine the best response format
Parameters
Section titled “Parameters”any
Data to respond with
status?
Section titled “status?”number
HTTP status code
headers?
Section titled “headers?”Additional headers
Returns
Section titled “Returns”Promise<Response>
send()
Section titled “send()”send(
body?,options?):Response
Defined in: src/context.ts:820
Send a response
Parameters
Section titled “Parameters”BodyInit
Response body
options?
Section titled “options?”ResponseInit
Response options
Returns
Section titled “Returns”Response
Response
set(
key,value):ShokupanContext<State,Params>
Defined in: src/context.ts:405
Helper to set a header on the response
Parameters
Section titled “Parameters”string
Header key
string
Header value
Returns
Section titled “Returns”ShokupanContext<State, Params>
setCookie()
Section titled “setCookie()”setCookie(
name,value,options):ShokupanContext<State,Params>
Defined in: src/context.ts:590
Set a cookie
Parameters
Section titled “Parameters”string
Cookie name
string
Cookie value
options
Section titled “options”CookieOptions = {}
Cookie options
Returns
Section titled “Returns”ShokupanContext<State, Params>
setRenderer()
Section titled “setRenderer()”setRenderer(
renderer):void
Defined in: src/context.ts:189
Parameters
Section titled “Parameters”renderer
Section titled “renderer”Returns
Section titled “Returns”void
status()
Section titled “status()”status(
statusCode):Promise<Response>
Defined in: src/context.ts:977
Respond with a status code DOES NOT CHAIN!
Parameters
Section titled “Parameters”statusCode
Section titled “statusCode”number | Promise<number>
Returns
Section titled “Returns”Promise<Response>
stream()
Section titled “stream()”stream(
callback,onError?):Response
Defined in: src/context.ts:1131
Generic streaming helper for binary/text data
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives a StreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
streamSSE()
Section titled “streamSSE()”streamSSE(
callback,onError?):Response
Defined in: src/context.ts:1209
Server-Sent Events (SSE) streaming helper
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives an SSEStreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
streamText()
Section titled “streamText()”streamText(
callback,onError?):Response
Defined in: src/context.ts:1172
Text streaming helper with proper headers
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives a TextStreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
text()
Section titled “text()”text(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:891
Respond with a text string
Parameters
Section titled “Parameters”string | Promise<string>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
trigger()
Section titled “trigger()”trigger(
event,options?):void
Defined in: src/plugins/application/htmx/index.ts:22
Sets the HX-Trigger header.
Parameters
Section titled “Parameters”string | Record<string, any>
options?
Section titled “options?”after?
Section titled “after?”"receive" | "settle" | "swap"
Returns
Section titled “Returns”void
upgrade()
Section titled “upgrade()”upgrade(
options?):boolean
Defined in: src/context.ts:432
Upgrades the request to a WebSocket connection.
Parameters
Section titled “Parameters”options?
Section titled “options?”Upgrade options or inline WebSocket handlers
[Request, ...options: ([State] extends [undefined] ? [options?: { data?: undefined; headers?: HeadersInit }] : [options: { data: State; headers?: HeadersInit }])[]][1] | InlineWebSocketHandlers<State> & object
Returns
Section titled “Returns”boolean
true if upgraded, false otherwise
This method will link the WebSocket connection to the context object, allowing you to access the connection in your handlers.
Example
Section titled “Example”app.get('/ws', (ctx) => { ctx.upgrade({ open: (ctx, ws) => ws.send("Connected"), message: (ctx, ws, msg) => ws.send(msg), close: (ctx, ws) => console.log("Disconnected") });});