Repository navigation
Releases: yuxqiu/quillway
Release list
v0.1.8
Quillway 0.1.8
The animated rainbow border now preserves the popup’s transparency and background blur during generation.
Stable blur while writing
Previously, the rainbow gradient covered the whole popup behind its translucent panel. As it moved, it tinted the interior and obscured the blurred desktop underneath.
The rainbow now draws only along the rounded border. The panel keeps its configured opacity throughout generation, so the animation no longer changes the interior’s color or covers the background blur.
Upgrading
No configuration changes are required.
With home-manager, update the Quillway flake input and switch your configuration. For a tarball installation (quillway-v0.1.8--linux.tar.gz), replace the executable and restart the daemon.
If you encounter a problem, please include your compositor and the output of quillway doctor in an issue.
v0.1.7
Quillway 0.1.7
Background blur now follows the popup's rounded shape, and clicking outside the popup closes it.
Blur follows the panel
Applying compositor blur could produce a rectangle larger than the visible popup, covering its transparent shadow margins and rounded corners.
Quillway now requests blur through ext-background-effect-v1, with a region matching the panel itself. The region follows resizing and scrolling, and respects ui.client_shadow.
On compositors supporting this protocol, blur is requested automatically. Its strength and appearance remain controlled by the compositor.
The Wayland UI integration now uses the released iced_exwlshell 0.20.1, which provides this protocol support.
Click outside to close
Clicking outside the popup now closes it and cancels any rewrite in progress. Clicks inside the panel continue to work normally. The popup also closes when keyboard focus moves elsewhere.
Upgrading
No configuration changes are required.
With home-manager, update the Quillway flake input and switch your configuration. For a tarball installation (quillway-v0.1.7-<arch>-linux.tar.gz), replace the executable and restart the daemon.
If you encounter a problem, please include your compositor and the output of quillway doctor in an issue.
v0.1.6
Quillway 0.1.6
The popup now follows your desktop's light/dark setting, and Ctrl+Backspace in the refine box no longer deletes words from your text.
Light and dark follow your desktop
The popup's theme has a new setting, auto, which is now the default. It reads your desktop's light/dark preference through the XDG desktop portal, the same setting GTK and libadwaita apps follow, and switches as soon as you change it, even while the popup is open.
[ui]
theme = "auto" # auto | dark | light- When the desktop prefers dark, the popup is dark; when it prefers light, the popup is light.
- When the desktop states no preference, or no portal is running, the popup stays dark, as before. Some light modes set "no preference" (
color-scheme 'default') rather than "prefer light"; on those, setprefer-light(gsettings set org.gnome.desktop.interface color-scheme prefer-light) or usetheme = "light". darkandlightstill pick a theme regardless of the desktop. (#3)
Ctrl+Backspace in the refine box only edits the refine box
Since 0.1.5, Ctrl+Backspace or Ctrl+Delete in the refine box also deleted a word from the text box below it. The word-by-word delete now acts only on the box you're typing in. (#4)
Upgrading
If you never set ui.theme, the popup now follows your desktop. On a desktop that prefers light, it will turn light. To keep it always dark, add theme = "dark" under [ui] in config.toml and run quillway reload.
Otherwise nothing changes. With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball (quillway-v0.1.6-<arch>-linux.tar.gz), replace the binary and restart quillway daemon.
As always, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.5
Quillway 0.1.5
Two small fixes: the popup's shadow and translucency now look as intended on Intel and AMD graphics, and the text box gets the usual word-by-word delete keys.
The shadow, translucency and corners render properly
On Intel and AMD GPUs (Mesa's Vulkan driver), the popup's shadow showed up only as a hard band along the bottom edge, with nothing at the top or sides. The rounded corners looked slightly dotted.
The cause was the surface format. Mesa offers 10-bit color formats first, and since wgpu 27, iced 0.14 (the GUI toolkit Quillway uses) picks one of them. Those formats keep only 2 bits of transparency, so every pixel was 0%, 33%, 67% or 100% opaque. A soft shadow can't survive that: it vanished everywhere except where it's darkest, just below the popup.
iced has fixed this upstream, but not in a release yet, so Quillway now builds with that fix applied to iced 0.14. You get:
- a soft shadow all the way around, darkest below as if lit from above;
- smooth rounded corners;
- panel translucency (
ui.opacity) as you set it, instead of rounded to the nearest of those four levels.
This affected any Wayland compositor using Mesa, not just one. Nothing needs configuring.
Word-by-word delete in the text box
In the text box, Ctrl+Backspace now deletes the word before the cursor, and Ctrl+Delete the word after it. With text selected, they delete just the selection. Ctrl+←/→ already moved by word, and the refine box already had all of these.
Upgrading
Nothing to change. With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball (quillway-v0.1.5-<arch>-linux.tar.gz), replace the binary and restart quillway daemon.
If you build from source: Quillway now takes a few iced crates from a fork (github.com/yuxqiu/iced) through [patch.crates-io], until an iced release includes the fix. Cargo fetches it automatically.
As always, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.4
Quillway 0.1.4
A small follow-up to 0.1.3: the popup's message line has moved to the bottom, so nothing jumps when a message appears.
Messages appear at the bottom, and nothing moves
In 0.1.3, errors and notes appeared between your text and the preset chips. When one appeared, the chips and footer moved down. If you'd just clicked a chip that got "Nothing to rewrite", the chips shifted out from under your mouse pointer.
Now the message is a tray under the footer, attached to the popup's bottom edge. The popup stays put at the top and grows downward, so the input, your text, the chips and the footer all stay exactly where they were. That's also true when you press Ctrl+E to open an error's details, such as llama-server's log; they expand downward too.
Everything else about messages is unchanged:
- Failures have a red
!badge, and things you can fix have a neutralibadge. - There's one message at a time, and it clears once the problem is gone.
If your custom model file (model.active = "custom:…") is missing, the tray names the file. The popup also tells you how to fix it: point model.active at an existing file, or pick a model with quillway models use.
Upgrading
Nothing to change. With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball (quillway-v0.1.4-<arch>-linux.tar.gz), replace the binary and restart quillway daemon.
As always, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.3
Quillway 0.1.3
A small release that tidies up how the popup talks to you. Errors and notes now share one calm, consistent message line. Ctrl shortcuts never type stray characters into the refine box any more.
One message line instead of red text everywhere
The popup used to show problems as plain red text, and where it appeared depended on what went wrong. A model server failure could spill its whole log into the popup. Now there's one message line under your text, or under the install card, and it shows one message at a time.
- Two kinds, easy to tell apart. Failures, such as the model server, the clipboard, a copy or a download, get a red tint and a
!badge. Things you can fix yourself, such as "Nothing to rewrite", "Nothing to copy" or "Stopped by a reload", get a neutral tint and anibadge. A refused copy no longer looks like a crash. - Details on request. Each message is one short line. If there's more to it, like llama-server's log when the model fails to start, the line shows
^E details. Press Ctrl+E to open it, and again to hide it. - It goes away when the problem does. There are no timeouts. "Nothing to rewrite" disappears as soon as you type or paste text. Other messages clear when you run again, undo, edit the text they're about, finish an install, or close the popup.
- Reported once. If a rewrite fails because the model server did, you see one message, not two.
- Plainer wording. Clipboard and copy failures now start with "Couldn't read the clipboard:" or "Couldn't copy:". A failed download shows its reason under the install card, and ↵ tries the install again.
Ctrl shortcuts don't type into the refine box
Pressing Ctrl+1 to run a preset briefly typed a "1" into the instruction box before removing it. Ctrl+0, Ctrl+9, Ctrl+Shift+digit, the AZERTY digit row and Ctrl with Cyrillic letters left their character behind. Now no key pressed with Ctrl types anything there. Copy, cut, paste, select all and Ctrl+Backspace work as before, and AltGr characters are unaffected.
The Ctrl shortcuts still work from the instruction box only. In the text box, Ctrl+1 does nothing.
Upgrading
Nothing to change in your config. There's one new key: Ctrl+E shows or hides an error's details.
With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball (quillway-v0.1.3-<arch>-linux.tar.gz), replace the binary and restart quillway daemon.
As always, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.2
Quillway 0.1.2
This release is about reliability. The model server now starts, reloads and stops predictably. A long list of edge cases that could hang a command, lose your text or show a misleading message are fixed. A few command-line details and config checks changed, so please skim Upgrading below.
Install any model from the popup
If the active model isn't downloaded yet, the popup shows an install card. Models with a non-OSI license can now be installed from there too. The card shows the license notice, and ↵ accepts it and starts the download. Progress with speed and time left, and errors such as an unreadable clipboard are now shown.
A model server you can rely on
quillway reloadwaits for the new model and tells you if it fails. A missing model or a llama-server that won't start is reported, and the command exits with an error. Several reloads in a row apply in order.- Only one model is ever loaded. The old llama-server has fully exited before a new one starts, so two models never compete for GPU memory.
- A crash is noticed right away. If llama-server dies,
quillway statussays so at once, and your next rewrite restarts it. - A reload during a rewrite stops it immediately and asks you to run it again, instead of waiting for it to finish.
- Proxy settings no longer break startup. With
http_proxyorALL_PROXYset, Quillway's requests to its own local llama-server went through the proxy, and the model never became ready. They now go straight to it. Amodel.endpointserver and model downloads still use your proxy. - No warm-up request. The server still starts as soon as the daemon does. The first rewrite after a start takes about a second longer.
The model's words, as written
Quillway used to clean up the model's output, removing things like preambles, quotes and <think> blocks. In a 250-rewrite test with the default model, that cleanup never found anything to remove, so it's gone. You now get the model's text with surrounding whitespace trimmed. quillway rewrite no longer copies your input's trailing newline, and --raw was removed.
Ctrl+R retries at the same temperature instead of raising it each time. The tok/s figure uses the server's own token count.
Popup fixes
- Your typed instruction comes back when a run fails, and when you press Esc during a rewrite, so you can adjust it and send it again.
- Holding ↵ acts once. A fast rewrite is no longer copied and closed by the key's auto-repeat.
- Ctrl+digit no longer leaves a stray digit in the instruction box when there's no such preset or nothing to rewrite.
- Text piped with
--stdinis labelled "stdin" in the footer.
Command line
quillway models installneeds a model id, e.g.quillway models install qwen3.5-4b. Installing a model you already have says so instead of downloading it again.models installandmodels useexit with an error if the running daemon can't switch to the model.models removesays when it only removed an unfinished download.- Commands don't hang on a stuck daemon.
toggle,show,hide,statusandquitgive up after 5 seconds, andreloadafter 150 seconds. - Piping into
headand the like works. For example,quillway models list | head -1no longer crashes when the reader stops early. quillway rewriterefuses stdin over 1 MiB, the same limit as the clipboard and--stdin.quillway doctorchecks more.- The daemon's model server must be ready or starting, and
llama-server --versionmust work. - It reads the clipboard once to check access.
- A clipboard app that never answers times out after 2 seconds instead of hanging.
- The daemon's model server must be ready or starting, and
- The control socket is checked before use. The CLI and daemon refuse a socket owned by another user, and the daemon never deletes a file that isn't a socket.
Downloads
- A download stops if the server sends more data than the model should have.
- A failed final write is reported as an error, instead of a truncated model being installed.
- A partial file that no longer matches the model is discarded with a clear message.
- An interrupted download resumes where it left off when you run the install again.
Stricter config checks
Mistakes in config.toml are now reported instead of quietly adjusted or ignored:
ui.widthmust be 300–4096 andui.opacity0.2–1.0.- A preset's
temperaturemust be 0–2, andmodel.contextat least 1024. model.endpointmust be anhttp://orhttps://URL, and needsmodel.endpoint_model.model.extra_argscan't set the flags Quillway sets itself: model, host, port, context size,--parallel, API key and--no-jinja. Usemodel.contextfor the context size.- A corrupt
state.tomlis an error, rather than silently falling back to the default model.
Upgrading
Most setups need no changes. Run quillway doctor after upgrading; it reports any config value the new checks reject.
| Before | Now |
|---|---|
quillway rewrite --raw |
Removed; output is always the model's text, trimmed |
quillway models install with no id installed the default |
Give an id: quillway models install qwen3.5-4b |
models install / models use exited 0 when the daemon couldn't switch |
They exit with an error |
| Ctrl+R raised the temperature | Same temperature |
Out-of-range ui.opacity was clamped |
It's an error |
extra_args could repeat --port, --ctx-size, … |
Refused; use model.context |
With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball, quillway-v0.1.2-<arch>-linux.tar.gz, replace the binary and restart quillway daemon.
As always, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.1
Quillway 0.1.1
This release lets you edit the result yourself, makes the keys more predictable, and fixes a few things that could lose your work or leave a model server running. A few keys have changed, so please skim Upgrading below.
Edit the result yourself
Sometimes the rewrite is nearly right and you only want to change a word. Press Tab while reviewing to put the cursor in the result and edit it, just like the text box before the first rewrite. Press Tab again to go back to the refine box. Your edits become an "Edited" draft, so Ctrl+Z brings back the model's version if you change your mind. While you edit, the result is shown as plain text instead of a diff.
Keys that stay out of your way
- Presets are now Ctrl+1–9. A digit on its own is just a digit, so an instruction like "3 sentences max" no longer starts the Friendly preset. The chips show
^1,^2, … to match. - Ctrl+D toggles the diff, since Tab now edits. Once you choose, your choice holds for the next drafts instead of resetting with every preset.
- Ctrl+C is ordinary copy. It copies your selection in a text box and no longer copies the whole result and closes the popup. ↵ on an empty refine box copies the result.
- The Ctrl shortcuts only work from the instruction box. In a text box, Ctrl and a key never type a character.
- Shortcuts work on non-Latin layouts such as Cyrillic or Greek, and on AZERTY's digit row.
- ↵ closes the popup straight away. The short "✓ Copied" pause is gone, so you can paste sooner.
Fixes
- Holding Esc during a rewrite no longer closes the popup and discards your drafts. The layer-shell library reports key auto-repeat as fresh presses. Each held shortcut now acts once.
- llama-server no longer keeps running after the daemon stops. Pressing Ctrl+C on
quillway daemon, or stopping it shortly after it started, could leave the model server loaded in the background, holding several GB of memory. It's now always stopped with the daemon. - Clicking between the boxes keeps the keyboard where you expect. Tab and the shortcuts follow the box you clicked, and a click on empty space no longer leaves nothing focused.
- The cursor starts at the end of the text when you move into a text box.
- An emptied draft isn't copied over your clipboard; you get an error instead. Old errors clear once you edit or undo.
- Copied text over 1 MiB is refused with an error instead of being silently cut off.
- The control socket is private to your user, even when it falls back to
/tmpbecauseXDG_RUNTIME_DIRisn't set. quillway models removeon the active model now tells the running daemon, so the popup doesn't keep offering a model that's gone.
Upgrading
Your config doesn't need any changes. Only the keys have moved:
| Before | Now |
|---|---|
1–9 runs a preset |
Ctrl+1–9 |
| Tab toggles the diff | Ctrl+D (Tab now edits the result) |
| Ctrl+C copies the result and closes | ↵ on an empty refine box (Ctrl+C is ordinary copy) |
With home-manager, update the flake input and switch; the service restarts with the new version. With the tarball, replace the binary and restart quillway daemon.
Thanks to everyone who's tried Quillway so far. As before, if something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor helps a lot.
v0.1.0
Quillway 0.1.0
This is the first release of Quillway, a small rewrite popup for Wayland that keeps your writing on your own machine.
The idea is simple: copy some text, press a shortcut, and pick what you want: proofread it, make it friendlier, shorten it, turn it into bullet points, or just type an instruction like "make this sound less formal". A local model streams the rewrite in as it's written, and pressing ↵ copies the result so you can paste it wherever you were. Nothing leaves your computer.
What you get
- A popup that stays out of the way. It opens over whatever you're doing and starts with the text you just copied, or an empty box to type or paste into if you haven't copied anything recently. It closes when you're done.
- Seven presets out of the box: Proofread, Rewrite, Friendly, Professional, Concise, Summary and Key points. Press
1–9to run one, or define your own in the config. - Iterate instead of starting over. Refine a draft ("warmer", "shorter"), retry for a different take, undo, or flip to a word-by-word diff against your original.
- Local models, set up for you. Quillway runs llama.cpp in the background and downloads a small writing model on first use. The default, Qwen3.5 4B, is a 2.7 GB download and streams at about 29 tokens a second on an Intel integrated GPU. Every model is pinned to an exact version and checked against its hash. If you'd rather use Ollama, LM Studio or another OpenAI-compatible server, point Quillway at it.
- A command line for everything else:
quillway rewrite -p proofread < notes.txtfor scripts,quillway doctorto check your setup, andquillway modelsto manage models.
Getting it
- Nix / home-manager: add the flake and enable
services.quillway. llama.cpp comes with it. See the README. - Other distros: download the tarball for your architecture (x86_64 or aarch64) below and verify it with its
.sha256file. It needs glibc 2.35 or newer, a Wayland session, andllama-serverfrom llama.cpp on yourPATH.
Then bind quillway toggle to a key in your compositor, and run quillway models install (or press ↵ on the popup's install card).
Please know before you try it
This is a first release, and I'd rather be upfront about where it stands:
- It's been used day to day only on niri, with an Intel GPU, and it also runs on Sway. Hyprland, river, KDE Plasma and COSMIC should work, since they support the same layer-shell protocol, but I haven't tried them yet. GNOME won't work, because it doesn't support layer-shell.
- Input methods (fcitx5 and similar) haven't been tested yet. If you type in a language that needs one, I'd especially love to hear how it goes.
- Quillway only copies; it never types into your apps. Pasting is up to you. That's deliberate: simulating keystrokes breaks in terminals and in editors like Vim.
- Small models are good at tidying text, but they're not perfect. Read the result before you send it.
If something doesn't work on your setup, an issue with your compositor, GPU and the output of quillway doctor would help a lot.
Quillway is dual-licensed under MIT or Apache-2.0, at your option. Thanks for trying it!