Packaging the TypeScript service
@athrio/loom-service-typescript is the first loadable language service. A project installs it to give its TypeScript product an editor program of its own, held apart from the frame's. The package builds to one ES module, dist/index.js, whose default export is the service — the artifact the dynamic loader imports at runtime.
The manifest
The exports field names the package's surface, and it is a single entry: the default ., the built dist/index.js whose default export is the service the loader reads. The files field ships only dist, so the published package is that one built file and its source map, and publishConfig makes the scoped package public. The repository field points npm at this package's directory in the monorepo, which the provenance signature verifies against the workflow that publishes it — a publish through Trusted Publishing fails without it.
The package carries one dependency, Prettier, which formats a TypeScript section for a project that has no Prettier of its own; the build leaves it out of the bundle, so the store installs it beside the service. The build bundles volar-service-typescript and Volar's language layers into dist/index.js, and the prepack script runs it before each publish, so the package always ships a fresh bundle. The runtime bridge reads effect, the @athrio/loom-lang-services contract, and the editor's TypeScript from the host at load. Those three are neither bundled nor installed — the host lends them, so a second copy never shadows the TypescriptSdk the host provides. The devDependencies exist only to build and type-check the source; what the running service shares with the host is fixed by the runtime version Runtime declares, not by an npm range.
{{ version = ${version} }} {{ effect = ${effect} }}
{
"name": "@athrio/loom-service-typescript",
"version": "::[version]",
"description": "The loadable TypeScript language service: the product's own editor program, held apart from the frame.",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/athrio-com/loom.git",
"directory": "packages/loom-service-typescript"
},
"type": "module",
"main": "./dist/index.js",
"exports": {
".": "./dist/index.js"
},
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "vite build",
"watch": "vite build --watch",
"prepack": "bun run build"
},
"dependencies": {
"prettier": "^3.8.4"
},
"devDependencies": {
"@athrio/loom-lang-services": "workspace:*",
"@volar/language-core": "^2.4.28",
"@volar/language-service": "^2.4.28",
"@volar/typescript": "^2.4.28",
"effect": "::[effect]",
"typescript": "^6.0.3",
"volar-service-typescript": "^0.0.71",
"vscode-uri": "^3.1.0"
}
}The TypeScript config
The config extends the workspace base, which supplies the compiler options and the Node and Bun types, and typechecks src. It never ships.
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "out",
"rootDir": "src"
},
"include": ["src"]
}The licence
npm ships a package's LICENSE whatever the files field says, and until now this package shipped none — an installer had the SPDX expression in the manifest and no text to read. The file below is that text.
It carries the MIT licence in full. Loom was dual-licensed under MIT and Apache-2.0 for a while, inheriting a Rust convention rather than a decision; the Apache branch bought a patent grant nobody was obliged to take, and dropping it left one licence to read and one string to keep consistent.
It also says what is not here. Athrio sells Loom Design under a licence of its own, and a reader who finds a permissive text here should not conclude it reaches that product too.
MIT License
Copyright (c) 2026 Quadrivium Academy Sihtasutus and Loom contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.