# Mount Middleware
The Mount Middleware lets you mount an application built with another framework into your Hono application.
## Import
```ts twoslash
import { Hono } from 'hono'
import { mount } from 'hono/mount'
```
## Usage
Register the middleware with `app.all()` on a path that ends with `/*`:
```ts
import { Router as IttyRouter } from 'itty-router'
// Create itty-router application
const ittyRouter = IttyRouter()
// Handle `GET /itty-router/hello`
ittyRouter.get('/hello', () => new Response('Hello from itty-router'))
const app = new Hono()
app.all('/itty-router/*', mount(ittyRouter.handle))
```
By default, the mounted application receives a new `Request` with the matched path prefix removed from its URL. A request to `/itty-router/hello` reaches itty-router as `/hello`.
The mounted application is called as `handler(request, c.env, c.executionCtx)`, the same arguments as a Cloudflare Workers `fetch` handler. Use `optionHandler` to pass different arguments.
## Options
You can pass a function or an object as the second argument.
### optionHandler: `(c: Context) => unknown`
Returns the arguments passed to the mounted application after the `Request`. An array is spread into multiple arguments. You can pass the function directly as the second argument:
```ts twoslash
import { Hono } from 'hono'
import { mount } from 'hono/mount'
const app = new Hono()
const anotherApp = (request: Request, ...args: unknown[]) =>
new Response(request.url)
// ---cut---
// Call `anotherApp(request, c.env)`
app.all(
'/app/*',
mount(anotherApp, (c) => c.env)
)
// Call `anotherApp(request, c.env, c.executionCtx)`
app.all(
'/app/*',
mount(anotherApp, {
optionHandler: (c) => [c.env, c.executionCtx],
})
)
```
### replaceRequest: `((originalRequest: Request) => Request) | false`
Controls which `Request` is passed to the mounted application:
```ts twoslash
import { Hono } from 'hono'
import { mount } from 'hono/mount'
const app = new Hono()
const anotherApp = (request: Request, ...args: unknown[]) =>
new Response(request.url)
// ---cut---
// `/legacy/users` reaches the mounted application as `/api/users`
app.all(
'/legacy/*',
mount(anotherApp, {
replaceRequest: (req) => {
const url = new URL(req.url)
url.pathname = url.pathname.replace(/^\/legacy/, '/api')
return new Request(url, req)
},
})
)
```
To pass the original `Request` unchanged, set it to `false` as a shorthand for `(req) => req`:
```ts twoslash
import { Hono } from 'hono'
import { mount } from 'hono/mount'
const app = new Hono()
const anotherApp = (request: Request, ...args: unknown[]) =>
new Response(request.url)
// ---cut---
app.all(
'/app/*',
mount(anotherApp, {
replaceRequest: false,
})
)
```