Developer setup
You need Node 22 and, for the server, Elixir 1.15 or newer.
git clone https://github.com/ScriptKittyOS/kotiko.gitcd kotikoThe extension
Section titled “The extension”The extension folder is what ships: no bundler and no runtime npm dependencies, so store
reviewers can read it as it is.
- Open
chrome://extensionsand turn on Developer mode. - Select Load unpacked and choose the
extensionfolder. - After a change, select the reload button on Kotiko's card.
In Firefox, open about:debugging#/runtime/this-firefox, select Load Temporary Add-on… and
choose extension/manifest.json.
Tests and checks
Section titled “Tests and checks”From the repository root:
npm cinpm run lint # ESLint and web-ext lintnpm test # unit, DOM, background and property testsnpm run coverage # the same, failing below 90 % of lines or 80 % of branchesnpx playwright install chromiumnpm run e2e # end-to-end tests in Chromium with the unpacked extensionCI runs more checks (the shared spec, versions, licenses, the old name); the full list is in
.github/workflows/ci.yml.
The server
Section titled “The server”cd servermix deps.getmix test # or mix test --cover: fails below 90 % of linescp .env.example .env && chmod 600 .env # then fill in LLM_API_KEY./run.shYour own Kotiko server explains running it, and the configuration reference every setting.
The docs site
Section titled “The docs site”This site lives in site/ (Astro Starlight) with its own package.json. It pulls the
privacy policy, the references and the contributor documents from the repository when it
builds, so edit those files, not their copies.
cd sitenpm cinpm run dev # http://localhost:4321npm run build # writes dist/npm run check # links, stable URLs, error anchors, no third-party URLsnpm test # the site's own testsnpx playwright install chromiumnpm run e2e # accessibility (light and dark) and network checks of every pageThe site makes no request to any other host, so it never uses web fonts, analytics or
embeds. Store links come from site/src/config.ts.
Layout
Section titled “Layout”extension/ the browser extension, shipped as it is background.js lookups, storage, sync, messages from pages content.js, content/ swaps words on the page; the word card popup.*, dashboard.* the toolbar popup and the word list with Settings lib/ shared modules (store, matcher, errors, lookups) ui/ design system: tokens, base, components, icons _locales/ every interface stringserver/ the optional Elixir + SQLite serverspec/ the word format and prompt the extension and server sharesite/ this docs siteslices/ one SPEC.md per piece of work; decisions in DECISIONS.mdtest/ unit, DOM, background, e2e and performance testsHow the parts fit together is in Architecture.
