# Simnaril > Documentation for building stateful, in-process simulations of third-party HTTP services with Simnaril. Each link is the plain markdown for one documentation page. ## Start here - [Getting started](https://simnaril.dev/getting-started/llms.txt): This guide builds a small simulation and runs ordinary application code against it. ## Core concepts - [Simulation environments](https://simnaril.dev/simulation-environments/llms.txt): SimEnvironment connects production-style HTTP requests to simulated services. It owns HTTP interception and the origins registered within it. - [Resource state](https://simnaril.dev/resource-state/llms.txt): SimResource stores the entities for one simulated resource in memory. It contains domain state and has no dependency on HTTP. - [REST resources](https://simnaril.dev/rest-resources/llms.txt): api.resource() creates in-memory state and exposes conventional JSON CRUD operations for it. ## Extending a simulation - [Custom operations](https://simnaril.dev/custom-operations/llms.txt): Simnaril provides three ways to go beyond the supplied REST behavior. Choose the smallest change that matches the service. - [Middleware](https://simnaril.dev/middleware/llms.txt): Middleware runs around a matched HTTP operation. It can inspect the request, change shared context, stop the operation, or change the response. - [Composing a simulation](https://simnaril.dev/composing-a-simulation/llms.txt): Define a simulated service in a factory function. The function constructs the environment, APIs, resources, middleware, and operations as one object graph. ## Optional - [GitHub](https://github.com/KensioSoftware/simnaril): source code, issues and releases - [npm](https://www.npmjs.com/package/@kensio/simnaril): published package