> For the complete documentation index, see [llms.txt](https://marblejs.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marblejs.gitbook.io/docs/other/api-reference/marblejs-http/createserver.md).

# createServer

### I**mporting**

```typescript
import { createServer } from '@marblejs/http';
```

### **Type declaration**

```haskell
createServer ::  CreateServerConfig -> () -> Promise<ServerIO<HttpServer>>
```

### **Parameters**

| *parameter* | definition           |
| ----------- | -------------------- |
| *config*    | `CreateServerConfig` |

#### ***CreateServerConfig***

| *parameter*    | definition                                |
| -------------- | ----------------------------------------- |
| *listener*     | `HttpListener`                            |
| *port*         | \<optional> `number`                      |
| *hostname*     | \<optional> `string`                      |
| *event$*       | \<optional> `HttpServerEffect`            |
| *options*      | \<optional> `ServerOptions`               |
| *dependencies* | \<optional> `Array<BoundDependency<any>>` |

### Returns

`ServerIO<HttpServer>is`&#x20;

### **Example**

```typescript
import { bindTo } from '@marblejs/core';
import { createServer } from '@marblejs/http';
import { IO } from 'fp-ts/lib/IO';
import { listener } from './http.listener';

const httpsOptions: https.ServerOptions = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem'),
};

const server = createServer({
  port: 1337,
  hostname: '127.0.0.1',
  httpListener,
  dependencies: [
    bindTo(fooToken)(foo),
  ],
  event$: (...args) => merge(
    listening$(...args),
    upgrade$(...args),
  ),
  options: { httpsOptions },
});

const main: IO<void> = async () =>
  await (await server)();

main();
```
