LOOK Language for VS Code
Official editor support for LOOK — the fast,
zero-dependency web scripting language by Codlook Bilişim.
Syntax highlighting · IntelliSense · snippets · one-key run/serve. Files ending
in .lk are detected automatically.
⌨️ Keyboard shortcuts
| Shortcut |
Command |
What it does |
Ctrl+Alt+R (⌘+⌥+R) |
LOOK: Run Current File |
Runs lk <file> in the terminal |
Ctrl+Alt+Shift+R |
LOOK: Serve Current File (HTTP) |
Starts lk-fcgi --mode http on a port |
| ▶ button (editor title & status bar) |
Run Current File |
One click to run |
| Command Palette → “LOOK:” |
all commands |
Run · Serve · Open REPL · Run Tests |
The shortcuts only fire while a .lk file is focused, so they never clash with
your other keybindings.
🧠 IntelliSense
Type a module name followed by :: and get its methods — each with a signature
and a short description:
response:: → json text html error header status redirect cookie
db:: → query exec first begin commit rollback transaction
request:: → header query body json file method path ip
- Completion — modules, methods, global functions (
route, env, jwt_sign…)
and keywords. Selecting a function inserts the call and places your cursor
inside the parentheses.
- Hover — point at any built-in (
db::query, jwt_sign, route…) to see its
signature and docs.
- Signature help — parameter hints appear as you type each argument.
Toggle it all with the look.suggest.enable setting.
🔎 Error checking (live)
Errors are underlined as you type — lk --check parses and statically
analyses your file (parse only; your code is never executed, so no DB writes
or emails fire) and reports the first problem with its line and column. It catches
syntax errors and undefined function calls (e.g. echo("x") →
“Undefined function: echo”). Fix it, and the squiggle clears.
Needs the lk binary (set look.path). Turn it off with look.check.enable: false.
✂️ Snippets
Start typing a prefix and press Tab:
| Prefix |
Expands to |
route-get |
GET route with an arrow handler |
route-post |
POST route that parses JSON |
route-param |
route with a {id} path parameter |
route-ws / route-sse |
WebSocket / Server-Sent-Events route |
route-404 |
404 fallback route |
fn |
expression-bodied arrow fn() => … |
function |
block function |
struct |
struct with default values |
if · foreach · for · switch · try |
control flow |
db-query · db-transaction |
parameterised query / transaction |
session · jwt · mail · parallel · use |
common tasks |
No semicolons. LOOK doesn’t use statement-terminating ; — not even in
for (…) loops. Snippets and completions never insert one.
🎨 Syntax highlighting
Keywords (fn, route, struct, use, parallel…), $variables, string
interpolation "{$name}", module::method, the => arrow, function names,
$row.col property access, numbers, operators and # comments.
⚙️ Settings
| Setting |
Default |
Description |
look.path |
lk |
Path to the lk executable (absolute if not on PATH). |
look.serve.port |
9000 |
Port used by Serve Current File. |
look.serve.workers |
4 |
Worker count used by Serve Current File. |
look.suggest.enable |
true |
Enable completion / hover / signature help. |
To use the run commands, install the lk runtime from
GitHub Releases or
codlook.com. Highlighting and IntelliSense work without it.
About LOOK
LOOK is a scripting language built for the web. Routing, databases, sessions,
JWT, validation, caching, an SMTP + IMAP mail server, WebSockets and SSE all ship
inside the language, compiled to a single dependency-free binary.
use jwt
route("GET", "/", fn() => response::json(["ok" => true, "app" => "LOOK"]))
route("GET", "/users/{id}", function($id) {
$user = db::first(app::db(), "SELECT * FROM users WHERE id = ?", [$id])
$user ? response::json($user) : response::error(404, "Not found")
})
# real-time + concurrency, no extra runtime
route("SSE", "/clock", function($conn) {
timer::every(1000, fn() => $conn.send(json::encode(["t" => date::now()])))
})
route("404", fn() => response::error(404, "Not found"))
- 🪶 Zero dependency — one static binary; copy to a VPS/Plesk/XAMPP and run.
- ⚡ Fast — FastCGI warm start; ~10k req/s, 28 MB RAM steady over 1M requests.
- 🔋 Batteries included — MySQL/PostgreSQL/SQLite, sessions, JWT, cache, queue,
jobs, mail server, WebSocket & SSE — all embedded.
- 🧩 Ergonomic —
fn() => … arrows, $row.col access, module::method, no semicolons.
Made by Codlook Bilişim · Apache 2.0 ·
Docs · Packages ·
GitHub