---
title: "How Hem fits your toolchain"
description: "Build-time tools, editor support, and runtime dependencies in a Hem project."
image: "https://hem.run/social/hem.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://hem.run/llms.txt
> Use this file to discover all available pages before exploring further.

# How Hem fits your toolchain

Hem is a compiler and editor toolchain. It emits ordinary TypeScript; it does not require an implicit core runtime. Libraries you explicitly use, including Hem's standard carriers and the optional Effect transport, remain application dependencies.

## Build time

Hem parses and checks `.hem` source, then emits `.ts` or `.tsx` siblings. The TypeScript checker checks those modules using your project's resolution, libraries, paths, and JSX configuration. Hem applies strict checker settings privately and adds language rules such as exhaustive matching and boolean-only conditions.

The compiler records source-to-output positions as it prints. TypeScript diagnostics are mapped back to the Hem source.

Compile Hem before running tools that consume its output. The Vite plugin orchestrates compilation and reloads changed siblings during development. Without Vite, use [the CLI](/guides/use-the-cli) as a build step and import the emitted modules.

## Edit time

The language server provides diagnostics, navigation, completion, and code actions over LSP. It uses the same compiler and formatter as the CLI, with unsaved editor buffers included in its project view.

Editors can work directly with Hem source. Other TypeScript tools consume emitted siblings. See [editor setup](/guides/editor-setup) for configuration and supported operations.

## Run time

Your TypeScript build compiles or bundles the emitted files. The Hem compiler and language server are not needed to execute the built application.

Core constructs emit JavaScript-compatible values and control flow. Standard `Option` and `Result` operations are explicit imports from `@hem-lang/std`; these are runtime library code, not compiler-only features.

With the Effect extension enabled, emitted code imports the configured transport. Effect supplies lazy execution, typed failures, services, concurrency, and resource cleanup. The preview targets the native `effect` package at `effect@4.0.0`; emitted code uses only its public Effect 4 API. See [Effect setup](/guides/enable-effect) for the support contract.

Other libraries retain their normal runtime and platform requirements.

## Generated-file ownership

Each successful build records source and sibling pairs in `.hem/generated-files.json`. Configure formatters, linters, and coverage tools to exclude those exact siblings, not all TypeScript files.

Do not edit generated siblings. Change the Hem source and rebuild. See [generated-file integration](/guides/integrate-generated-files).

## Related

- [Why Hem emits readable TypeScript](/explanation/why-hem) explains the output design.
- [Configuration](/reference/configuration) covers project settings and checker overlays.

Source: https://hem.run/explanation/architecture/index.mdx
