# Packages and Integrations Decodal provides separate packages for execution, host embedding, language services, and editor integration. ## Rust ### `decodal` The runtime and embedding API for Rust applications. It handles parsing, evaluation, and materialization of source; host globals; and imports containing either source or structured values. ```toml [dependencies] decodal = "0.4" ``` Enable the `derive` feature to generate a Decodal schema and decoder from a Rust struct. ```toml [dependencies] decodal = { version = "0.4", features = ["derive"] } ``` Enable the `regex` feature to validate regular-expression constraints. This feature requires `std`. ### `decodal-language-service` Provides transport-independent semantic evaluation and completion. It accepts an application's `HostEnvironment` directly, allowing production and editor evaluation to share global bindings and import rules. ### `decodal-lsp` Connects the language service to the Language Server Protocol. In addition to a stdio server, it exposes a library API that constructs an application-specific environment from the client's `InitializeParams`. ### `decodal-language-tools` Provides shared tools for source text, including the formatter. The Rust, LSP, and WebAssembly integrations all use the same formatter implementation. ## JavaScript and WebAssembly ### `decodal-wasm` Provides the evaluator and language service for browsers and other WebAssembly runtimes. ```sh npm install decodal-wasm ``` It is also published on JSR as `@hare/decodal-wasm`. Pass `globals`, `loadImport`, and `completeImport` to `DecodalLanguageService` so JavaScript-owned environments are shared by evaluation and completion. ### `decodal-codemirror` Language support for CodeMirror 6. It provides syntax highlighting, folding, indentation, and integration with the Decodal formatter. ```sh npm install decodal-codemirror ``` It is also published on JSR as `@hare/decodal-codemirror`. Combine it with the `decodal-wasm` language service when semantic evaluation and completion are required. ## Editor syntax The Tree-sitter grammar is an integration for parsing and highlighting in editors that use Tree-sitter. Tree-sitter is not required by the Decodal runtime, formatter, or LSP. Choose packages according to the integration you need: - Execution and embedding in Rust: `decodal` - Execution and semantic tooling in a browser: `decodal-wasm` - CodeMirror 6: `decodal-codemirror` - Transport-independent Rust language service: `decodal-language-service` - General editor clients: `decodal-lsp` - Syntax grammar for editors that use Tree-sitter: the Tree-sitter integration See [Embedding](./embedding.md) for concrete environment setup.