# Packages and Integrations Decodal は実行、ホスト組み込み、言語サービス、エディタ統合を用途別の package として提供する。 ## Rust ### `decodal` Rust アプリケーション向けの runtime と embedding API である。 source の parse・evaluate・materialize、host global、source または structured value の import を扱う。 ```toml [dependencies] decodal = "0.4" ``` Rust struct から Decodal schema と decoder を生成する場合は `derive` feature を有効にする。 ```toml [dependencies] decodal = { version = "0.4", features = ["derive"] } ``` 正規表現制約を検証する場合は `regex` feature を有効にする。 この feature は `std` を必要とする。 ### `decodal-language-service` transport に依存しない semantic evaluation と completion を提供する。 アプリケーションの `HostEnvironment` をそのまま受け取るため、本番評価と編集時評価で global bindings と import 規則を共有できる。 ### `decodal-lsp` language service を Language Server Protocol に接続する。 stdio server のほか、client の `InitializeParams` からアプリケーション固有の environment を構築する library API を提供する。 ### `decodal-language-tools` source formatter など、source text を扱う共通ツールを提供する。 formatter は Rust、LSP、WebAssembly の各統合から同じ実装を利用できる。 ## JavaScript and WebAssembly ### `decodal-wasm` browser と WebAssembly 対応 runtime 向けの evaluator と language service である。 ```sh npm install decodal-wasm ``` JSR では `@hare/decodal-wasm` として提供される。 `DecodalLanguageService` に `globals`、`loadImport`、`completeImport` を渡すことで、JavaScript が所有する environment を評価と補完で共有できる。 ### `decodal-codemirror` CodeMirror 6 向けの language support である。 syntax highlighting、folding、indentation、Decodal formatter との統合を提供する。 ```sh npm install decodal-codemirror ``` JSR では `@hare/decodal-codemirror` として提供される。 semantic evaluation と completion が必要な場合は `decodal-wasm` の language service と組み合わせる。 ## Editor syntax Tree-sitter grammar は、Tree-sitter を採用するエディタで構文解析と highlighting を行うための統合である。 Decodal runtime、formatter、LSP の利用には Tree-sitter は必要ない。 用途ごとの選択は次の通りである。 - Rust での実行と組み込み: `decodal` - browser での実行と semantic tooling: `decodal-wasm` - CodeMirror 6: `decodal-codemirror` - transport 非依存の Rust language service: `decodal-language-service` - 一般的な editor client: `decodal-lsp` - Tree-sitter 採用 editor の syntax grammar: Tree-sitter integration 具体的な environment の構築方法は [Embedding](./embedding.md) を参照する。