Use the smallest lane that fits the application. A browser demo needs no project; a new app starts with one command; an existing JS/TS project can keep its familiar bundler.
For a small demo:
<script type="module" src="https://hlvm.dev/hql.js"></script>
<script type="text/hql" src="./app.hql"></script>
For production, emit ordinary ESM instead of shipping the compiler:
hql compile app.hql -o app.js
See HQL in the Browser for CSP, multi-module, and loader boundaries.
hql new site --kind web
In an interactive terminal this creates and starts the app. The default is a
minimal dependency-free page: hql.json, one src/app.hql, and ignored
generated state. Resume it later with hql dev site; create release files with
hql build site.
Request the larger React Todo example only when useful:
hql new site --kind web --example todo
For either shape, hql dev compiles HQL, installs missing project dependencies,
bundles, watches, and serves. hql build writes dist/; --ssr prerenders a
React build. HQL owns the private JS tool runtime and hql.lock, so users do not
install a separate JavaScript runtime or package manager.
The source manifest is always hql.json. Host package metadata and generated
bridges live under ignored HQL state and are regenerated; do not edit them.
hql new app --kind mobile
hql dev app
The default has one src/app.hql. Use --example todo for the routed React
Native example. HQL compiles source, creates ignored Expo/Metro bridge files,
installs JS dependencies, and starts the requested target:
hql run ios app
hql run android app
hql run web app
hql build ios app
HQL hides the JavaScript host toolchain, but it cannot replace platform-owned capabilities: local iOS builds need Xcode, local Android builds need the Android SDK, and hosted production builds require the corresponding service account. Those are target platform requirements, not HQL project configuration.
The zero-config path is to run the existing entry through HQL:
hql src/main.ts
That TypeScript or JavaScript graph may import .hql files directly. If the
project must keep Vite, esbuild, Rollup, Webpack, or Bun as the outer command,
install hql-lang in that project and enable its matching adapter. One adapter
is technically necessary because those bundlers do not consult global compiler
installations when resolving an unknown file extension.
Playgrounds and embedding tools can compile in-memory source:
import { run, transpile } from "hql-lang/browser";
console.log(await run("(+ 1 2)"));
console.log(await transpile('(print "hi")'));
Normal production applications should precompile. Browser security still prevents arbitrary filesystem access, local subprocesses, and host-only HLVM capabilities.