Browser, Web, And Mobile

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.

No-Build Browser Page

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.

New Web Application

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.

New Mobile Application

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.

Existing JavaScript Or TypeScript Project

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.

Browser Runtime API

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.

Next