Aesthetic drawing in your terminal — smooth braille strokes, shape correction, palettes, symmetry.
Project description
monoline
Aesthetic drawing in your terminal — smooth braille strokes, tldraw-style shape correction, curated palettes, symmetry, and a dot grid.
🚧 Under construction — screenshot coming soon.
Install
pip install monoline # or: pipx install monoline / uv tool install monoline
Quick start
monoline # start on a blank canvas
monoline drawing.mono.json # open (or create) a named drawing
Click and drag with the mouse to draw. Hold Ctrl while dragging to snap the
stroke to a line, circle, ellipse, or rectangle. Press ? any time for the
in-app cheat sheet, c to clear, q to quit.
Keymap
| Keys | Action |
|---|---|
| drag | draw |
| Ctrl+drag | snap to shape (line / circle / ellipse / rect) |
d / e |
pen / eraser |
1-9 |
pick color |
p / P |
next / previous palette |
s |
cycle symmetry (off → vertical → horizontal → radial4) |
g |
toggle dot grid |
u / Ctrl+Z |
undo |
r / Ctrl+Y |
redo |
| Ctrl+S | save |
x |
export (.txt = ANSI, .svg = SVG) |
c |
clear the canvas (asks to confirm) |
? |
this help overlay (escape or ? to close) |
q |
quit (asks to confirm if there are unsaved changes) |
Palettes
Cycle through with p / P, or set a default in the config file:
tokyonight(default)catppuccingruvboxnordpastelneonmono
Configuration
monoline reads a TOML config file on startup, creating it with defaults on first run:
- Linux:
~/.config/monoline/config.toml - macOS:
~/Library/Application Support/monoline/config.toml - Windows:
%LOCALAPPDATA%\monoline\monoline\config.toml
# monoline configuration
shape_correct = "ctrl" # ctrl | always | off
palette = "tokyonight" # see the palette list above
smoothing = 0.5 # 0.0 - 1.0
shape_correct— when Ctrl+drag snaps to a recognized shape."ctrl"(default) snaps only while Ctrl is held;"always"snaps every stroke without needing Ctrl (useful if your terminal swallows Ctrl+drag);"off"disables shape recognition entirely.palette— the color palette to load on startup. Overridden automatically when opening a saved file that recorded a different palette.smoothing— how much Chaikin smoothing/resampling is applied to freehand strokes, from0.0(raw mouse samples) to1.0(maximally smoothed).
File formats
.mono.json— monoline's native format: versioned JSON containing canvas size, background, palette, and every stroke. Fully reopenable and editable — this is what Ctrl+S saves..txt(ANSI) — a plain-text export with embedded truecolor ANSI escape codes.catit in any truecolor-capable terminal to see the drawing..svg— a vector export of the strokes, suitable for viewing in a browser or editing in a vector graphics tool.
Pick the format by the extension you type when exporting with x.
Terminal support
monoline draws with Unicode braille characters and needs mouse reporting, so your terminal matters:
- Windows: use Windows Terminal. The legacy
conhost.execonsole does not support the mouse reporting monoline needs for drawing. - Font: pick a braille-capable monospace font — Cascadia Code/Mono, any Nerd Font, or the default monospace font on macOS/Linux all work.
- Ctrl+drag not registering? Some terminal emulators swallow the Ctrl
modifier on mouse drags. If shape snapping never triggers, set
shape_correct = "always"(snap every stroke) or"off"(disable it) in your config file.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file monoline-0.1.0.tar.gz.
File metadata
- Download URL: monoline-0.1.0.tar.gz
- Upload date:
- Size: 49.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65cf36f2657fa1df9acc1aca93e409a8144d2b497338b121151da3ecd3c01a8c
|
|
| MD5 |
4c206003fc83e4f0ce321f8563946982
|
|
| BLAKE2b-256 |
36d3737907e533ad4baa7950c8b1beb2001b5ea59f94fc84d7918d9d2af0bb85
|
Provenance
The following attestation bundles were made for monoline-0.1.0.tar.gz:
Publisher:
release.yml on ByapakSigdel/monoline
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
monoline-0.1.0.tar.gz -
Subject digest:
65cf36f2657fa1df9acc1aca93e409a8144d2b497338b121151da3ecd3c01a8c - Sigstore transparency entry: 2084451770
- Sigstore integration time:
-
Permalink:
ByapakSigdel/monoline@916a53ea14de89e9ca628cad0459689f463ec57f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ByapakSigdel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@916a53ea14de89e9ca628cad0459689f463ec57f -
Trigger Event:
push
-
Statement type:
File details
Details for the file monoline-0.1.0-py3-none-any.whl.
File metadata
- Download URL: monoline-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bfcec9a0b62c59353e8ccb4b1b443392c06fa36f1d8e73521af64d545753fc1
|
|
| MD5 |
2292604acd3b0fc69e19f1a99b1d84d6
|
|
| BLAKE2b-256 |
499d85f2170d97ee7e9ad593e4e57a7d377b927e5e5e05fe90c7f67158d96489
|
Provenance
The following attestation bundles were made for monoline-0.1.0-py3-none-any.whl:
Publisher:
release.yml on ByapakSigdel/monoline
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
monoline-0.1.0-py3-none-any.whl -
Subject digest:
8bfcec9a0b62c59353e8ccb4b1b443392c06fa36f1d8e73521af64d545753fc1 - Sigstore transparency entry: 2084451788
- Sigstore integration time:
-
Permalink:
ByapakSigdel/monoline@916a53ea14de89e9ca628cad0459689f463ec57f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ByapakSigdel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@916a53ea14de89e9ca628cad0459689f463ec57f -
Trigger Event:
push
-
Statement type: