Eight tools, one key each.
Frames, rectangles, ellipses, lines, Bézier paths, and text sit on F, R, O, L, P and T. Shift constrains, Alt draws from the centre, and snapping catches edges, centres, corners and text baselines while you drag.
Rust · Native · v0.1.0
You shouldn't need a full design suite to draw a 24-pixel icon. Strek is a native app with eight tools, two panels, and an export that crops to your artwork instead of the canvas. It's written in Rust.
What it does
Three jobs. Everything in the app serves one of them, which is why there are no submenus to dig through and nothing hidden behind a mode you have to remember.
Frames, rectangles, ellipses, lines, Bézier paths, and text sit on F, R, O, L, P and T. Shift constrains, Alt draws from the centre, and snapping catches edges, centres, corners and text baselines while you drag.
Group, ungroup and reorder in the Layers panel. Align six ways, distribute in either direction, nudge one unit with an arrow key or ten with Shift. The Design panel holds position, size, rotation, opacity, fill and stroke. Adaptive rulers, grids, persistent guides and explicit snapping controls keep placement precise; the Color Library keeps named palettes close at hand.
Standard and outlined SVG, PNG, JPEG and WebP all crop to the
visible artwork, so there's no dead margin around the mark.
Documents save as plain .strek.json, which reviews in
a pull request like any other text file.
Selection
A plain click takes the outermost container, so dragging a logo moves the whole logo rather than one stray path out of it. Getting at a nested shape is a deliberate act: hold the modifier to grab what's under the cursor, or walk the hierarchy with Enter and Shift+Enter. The layer tree is there when you want it, not a prerequisite for every edit.
These are defaults. Every binding lives in a keybindings.json you can edit.
The group moves as one unit.
Select the exact shape under the cursor.
Move one level into the current group.
Return to the parent without leaving the canvas.
Automation
A running Strek window exposes the same commands, pointer events and screenshots used by the app over a local, per-user socket.
Use strek automate to read state, run editor actions,
send canvas-local pointer events, insert text, show or hide UI,
and save a PNG screenshot. No synthetic mouse movement required.
The app bundles AUTOMATION.applescript with
strekState, strekAction,
strekPointer, strekText,
strekUi and strekScreenshot handlers.
Run it directly with osascript or load it from your
own AppleScript.
Launch strek mcp over stdio to expose
get_state, perform_action,
pointer, insert_text,
set_precision, guide,
saved_color, set_ui and
screenshot. Strek must already be running when a
tool is called.
{
"mcpServers": {
"strek": {
"command": "/opt/homebrew/bin/strek",
"args": ["mcp"]
}
}
}
Under the hood
The editor core is a plain Rust crate: scene graph, transactional edits, patch-based undo, and a display list. The desktop app draws that display list with GPUI; the SVG renderer writes the same one to a file, so an export matches what was on screen.
Install the latest Strek release with the generated shell installer:
curl -fsSL https://github.com/HelgeSverre/strek/releases/latest/download/strek-installer.sh | sh
macOS · Apple Silicon and Intel
Read the source