What works today and what's next¶
Noctiluca grows in phases, each unlocked by what people use a browser in a terminal for. The phases and their tests are in the design note. This page says what the 0.0.22 and 0.0.23 releases have, and what comes next.
Coming in 0.0.24 (Noctiluca 0.0.3)¶
Merged for the next release so far (with the rest of 0.0.24's items in the plan):
| Works | Notes |
|---|---|
| Scripts and coding agents | --control and --read-only; noctiluca ls and noctiluca action (open, snapshot with control ids, click, type, key, scroll, find, back, forward); Ctrl+G sends a picked element to the clipboard or an agent's pane. Unix only for now. See Scripts and coding agents |
| The pixel view | Alt+X or --pixels: Chrome's pixels in Kitty graphics, sent as tiles only where they change, within the byte budget; clicks, the wheel and keys go to the page. See the pixel view |
Known limits: the control socket has no Windows named pipe yet; click
takes an id or an accessible name, not a CSS selector; nothing records an
agent's actions beyond the status bar; and the pixel view draws through
Kitty only, at the usual 8 by 16 pixel cell (a terminal with larger cells
scales the tiles up), and scrolling in it costs nearly a whole frame.
In 0.0.23 (Noctiluca 0.0.2): pictures, video and live logs¶
| Works | Notes |
|---|---|
| Pictures in the projection | From the page's own files, where the page puts them, in Kitty, Sixel, iTerm2 or half blocks; small pictures in their line of text; an Image: caption under one with none |
| Animated GIFs | Moving within a byte budget, stepping down when it is short; Kitty plays them itself; F4 freezes them |
| Video | Its poster with a play mark, then its frames in its region while it plays on screen; play, pause, seek and mute; the media state in the status bar |
| Live logs | A chat or log follows its newest entries, read without reading the page again, and holds still when scrolled up |
| Terminal adaptations | Named generic rules, each switched off with [adapt] or --adapt; a for the faithful projection, ? for the about page |
| Long pages | Only the rows near the view are built; lazy images and endless feeds load as you scroll |
Known limits in 0.0.23¶
- One tab.
- No fixed or sticky layer and no paint order in the projection.
- An inline SVG drawing, a canvas and a frame show as their alt text.
- The byte budget starts as a guess (4 MB a second, 256 kB over
SSH), then follows the rate your terminal takes output at once measured
(lowered to it, and on this machine raised to it, up to 32 MB a
second), unless
[media] bandwidthsets it. A site'sfpsis read but not applied.
Checking on real sites¶
The tests run on the crate's own pages. Before a release, someone also opens five kinds of real site by hand, in Kitty or WezTerm and in a terminal with half blocks only, and notes what they see. Each row says what to look at; the limits below the table are expected, not bugs. Noctiluca on real sites shows one such check, recorded.
| Site | What to look at |
|---|---|
| A news site's front page and one article | Pictures where the page puts them, captions, headings and reading order; reader mode (r) on the article; scrolling down a long front page loads more |
| A video site's watch page | The poster with its play mark, then frames while it plays; play, pause, seek and mute; the media state in the status bar; the comments below |
| A live stream with chat | The video, and the chat followed as a live log: new lines appear, small badges and emotes in their line, and it holds still when scrolled up ({, }) |
| A docs site | Code blocks, tables and nested lists; the sidebar's links through hints (f); find in page (/); back and forward |
| A forum thread and its reply form | Quotes and avatars; the reply box takes a draft and asks before it sends; a search field and a select; nothing is sent by the check itself |
Expected limits on real sites:
- Logged-out walls. "Confirm you're not a bot", a sign-in wall or a cookie wall can stop a page. Noctiluca never tries to get past them; note the wall and move on.
- DRM never plays. A protected video shows its poster and nothing else, and always will.
- An inline SVG drawing, a canvas and a frame show as their alt text.
- Logs and chats that a page fills in with a canvas, or in a frame, are not followed.
In 0.0.22 (Noctiluca 0.0.1): the reader phase¶
| Works | Notes |
|---|---|
| Reading pages | Headings, paragraphs, nested lists, quotes, code and tables, in reading order, with hidden text left out |
| Two views | The projection (Chrome's layout in cells, the default) and reader mode (r); a raster view for debugging |
| Going places | The address bar, keywords, search, link hints, back and forward, reload, bookmarks, find in page |
| First forms | Fields with a draft and a guarded commit, password fields never read, check boxes, radios, switches, selects, sliders, buttons |
| Keys | Two presets, rebinding by action id, per-site keys bound from inside the app, the live F1 overlay |
| Still images | As pictures in reader mode only (Kitty, Sixel, iTerm2, or half blocks); the projection shows a placeholder with the alt text |
| Sound | With --audio, played where Chrome runs; play, pause, mute and volume for each video and audio |
| Scripts and CI | --dump text, ax or json, --no-js |
| Safety | Chrome's sandbox always on, page text cleaned, downloads refused, a temporary profile, removed on the way out, unless you keep one |
Each item is tested: the model, layout, config and app tests run on Chrome's saved snapshots of the crate's test pages, and the live tests run the same pages through a real Chrome in CI.
Known limits¶
- One tab. The tab actions are listed and say "One tab for now".
- The projection is rough: no fixed or sticky layer, no paint order.
- No pictures in the projection, no animated GIFs (a still frame in reader mode), and no video frames (a video's sound plays). All three came in 0.0.23.
--fpsandfpsare read but change nothing yet (they cap moving pictures since 0.0.23).- Downloads are refused, with no switch to allow them.
- A binding cannot start from a link hint or the focused element; the
Ctrl+Kpicker lists the same elements.
Planned¶
Later, without a date yet:
- Forms and tables. Every widget through the guarded commit, with conflicts caught; wide and long tables that scroll with their headers kept; signing in to a form.
- Layout. Sticky headers that stay pinned, a raster view from Chrome's screencast, a canvas as a region inside projected text.
- Tabs, once rs-rich-embed drives several pages.
- Automation, further. Recorded scripts that replay a session's agent actions, CSS selectors as targets, and a log of what an agent did.
Never¶
DRM playback, extensions, getting past bot checks, CAPTCHAs or sign-in walls, changing browser policy, or sending messages for you.