Skip to content

Releases: highercomve/Oriel

v0.18.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 16:47

Oriel 0.18.1

Added

  • Tray: .template_png icons. A monochrome PNG (the mark in black on
    transparency) shown as an NSImage template on macOS, so the menu bar
    recolours it for light and dark mode itself; Linux and Windows draw the
    pixels like .png.

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 08:53

Oriel 0.18.0

The native renderer (-Dnative_ui) runs full apps that were written for a
web view: dialogs, disclosures, the session history, file and camera
inputs, date pickers, popovers, Intl, and the drawing such an app's CSS
asks for, drawn to match the web view build on Linux and Android.

Added

  • <dialog>: show(), showModal() (the top layer over every
    z-index, with its ::backdrop; :modal; the page outside inert, Tab
    kept inside), close() and requestClose(), returnValue, cancel on
    Escape and the platform's back, close after it, the focus back where it
    was, method=dialog forms.
  • <details> and <summary>: closed, only the summary shows, with its
    disclosure triangle; a click, Enter or open toggles it and fires
    toggle.
  • The Popover API: popover, showPopover(), hidePopover(),
    togglePopover(), popovertarget buttons, :popover-open,
    beforetoggle and toggle; auto popovers close on Escape, a press
    outside or another auto popover.
  • The session history: history.pushState, replaceState, state,
    back, forward, go, popstate and hashchange; the platform's
    back closes a modal dialog, then walks the history.
  • <input type=file>: the platform's file dialog (accept narrows it on
    the desktops), or with capture on a phone the camera; the pick is
    files[0] (read lazily, as a dropped file), then input and change;
    cancel when there's none. New page commands nui:pick_file and
    nui:picked_file (src/modules/dialog/page.zig).
  • <input type=date>: the platform's date picker on every platform (a
    GtkCalendar popover, the Date and Time Picker control, an
    NSDatePicker popover, a UIDatePicker, DatePickerDialog), the value
    YYYY-MM-DD, the date shown in the user's format.
  • Intl: NumberFormat, DateTimeFormat, Collator, PluralRules and
    the toLocale*String and localeCompare methods over them (English,
    Spanish, Portuguese, French, German and Italian data, matching ICU's
    output for the common options); navigator.language is the user's on
    Linux and Android.
  • new Image() and <img>: naturalWidth/naturalHeight from the file's
    header, complete, decode(), load and error.
  • conic-gradient() backgrounds (pie and donut charts); background-image
    gradients with background-size, background-position and
    no-repeat; :empty in style sheets; an appearance: none checkbox's
    ::before and ::after (a switch's knob); form.elements,
    requestSubmit(submitter) and submit events' submitter;
    datalist.options; env() (the safe-area insets are 0).
  • grid-column places grid items (1 / -1, span N, a start line), as
    browsers auto-place them row by row; absolutely positioned children take
    no cell.
  • ::placeholder (and ::-webkit-input-placeholder) colors a field's
    placeholder; without one it's the platform browser's (WebKit's
    darkgray, Chrome's #757575).
  • Every CSS named color (darkgray, crimson, rebeccapurple…), not a
    dozen.
  • alert, confirm and prompt answer as a browser with its dialogs
    suppressed (they would block the UI thread) and log a warning.
  • Events the runtime fires are isTrusted; a promise rejected with no
    handler is logged.

Fixed

  • The page starts after the app's setup on the desktops, as a web
    view's page does, so its first commands see what setup made (a tray).
  • A block-level button centres its content only in its height (its
    text-align places the text); justify-content and gaps apply to flex
    and grid boxes only. The UA sheet centres a button's text.
  • A select with appearance: none hides the platform's arrow when the
    page draws its own beside it; GTK's drop-down takes new options.
  • Stylesheet and script links with a query (styles.css?v=8) load.
  • SVG icons follow the page's CSS fill, stroke and stroke-width on
    the <svg>; an inline ::before/::after text stays on its line.
  • Android: fields inside a modal dialog show; a border on only some sides
    of a rotated box no longer draws hairlines on the others.
  • A focused control that gets disabled or leaves the page loses the focus
    (the focus fixup rule), so its focus ring goes.
  • matches(), closest() and querySelector() know :focus,
    :focus-visible, :hover and :active.
  • A modal dialog with margin: auto, a set width and an auto height is
    centred, as tall as its content's room up to its max-height.
  • Grid fr columns stay equal beside padded cells (a partial last row
    of repeat(auto-fit, …)), and an auto-fit grid's column count follows
    its laid-out width.
  • inline-flex and inline-grid lay their children out as flex and
    grid do.
  • Line heights are in WebKit's 1/64 px units, so text sits on the same
    pixel rows as the web view's; SVG elements have
    getBoundingClientRect().
  • GTK: text fields and selects take the page's font-weight, style and
    family, and place their text where WebKit does; focus() keeps a field's
    selection (Tab still selects its text); a field under a modal's backdrop
    shows its text, dimmed; a date shows its year in full; text fields use
    WebKitGTK's 1px padding and select widths leave room for the arrow only
    when it's drawn; gtk-interface-color-scheme (GTK 4.20, the desktop's
    light or dark) sets prefers-color-scheme, and a change of it applies
    at once.
  • Android: a date shows its year in full, as Chrome does; a one-line
    field shows its text from the start until it's focused, and again once
    left; a field under a modal's backdrop stays drawn there, dimmed.
  • A transparent box (opacity: 0, a faded-out toast) no longer hides the
    fields under it (Android cut a select's label to a sliver; GTK and
    Windows hid the field).
  • desktop-entry-release / desktop-entry install what the packages put
    next to the executable (libggml-cuda.so, libggml-vulkan.so,
    contents.files), so an app installed that way finds its GPU backends.
  • Phones: when the keyboard comes up, the focused field scrolls into what's
    left of the page, as Chrome and Safari bring it into view.

v0.17.3

Choose a tag to compare

@github-actions github-actions released this 17 Oct 13:03

Oriel 0.17.3

Fixed

  • Android: apps opened from the launcher icon now appear in Recents. The
    launcher activity passed its own exclusion from Recents on to the app's
    window; windows also clear it from tasks created by earlier versions.

v0.17.2

Choose a tag to compare

@github-actions github-actions released this 16 Oct 14:20

Oriel 0.17.2

Fixed

  • Windows: a failed allocation while reading the launch arguments freed
    them twice.
  • Linux: the custom media scheme's empty responses (errors, 416) no
    longer read from a stack buffer after the handler returned.
  • Linux tray: a menu child is no longer leaked when its parent's list
    runs out of memory.
  • Windows: the custom media scheme answers 500 when it runs out of memory
    building its headers, instead of leaving the page waiting.
  • System monitor (macOS): the process list no longer reads past its
    buffer when the buffer couldn't be allocated.

Changed

  • Assertions (Power of 10, rule 5) where outside data enters: IPC, the
    updater, the native DOM and the system monitor's samplers. The system
    monitor's release builds are ReleaseSafe.

v0.17.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:29

Oriel 0.17.1

Added

  • System monitor example: the version in the header and Check for
    updates
    next to Settings, with oriel.updater. Each release attaches a
    signed system-monitor-latest.json; a copy updates from its own entry
    (its renderer, an executable, the AppImage or the macOS .app), and a
    deb/rpm copy says a new version is out. The monitor now has Oriel's
    version instead of 0.1.0.

Changed

  • System monitor example: the Oriel renderer is the default
    (-Drenderer=oriel), and the release packages (AppImage, deb, rpm,
    Windows installer and zip, macOS .app) use it.

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 18:55

Oriel 0.17.0

Oriel tells voices apart: oriel.speakers, speaker embeddings and
offline diarization, the module behind GhostPen's meetings (who said
what, and named voices remembered across meetings).

Added

  • oriel.speakers (.speakers = true, needs .llama or .whisper;
    Linux, Windows, macOS): speaker embeddings and offline diarization on
    voice-detect.cpp (MIT), compiled against the shared ggml build.
    Encoder loads a GGUF encoder from catalog (WeSpeaker ResNet34 by
    default, ECAPA-TDNN) and embeds 16 kHz speech; diarize embeds 3 s
    windows every 1.5 s over the speech regions, clusters them
    (average-linkage, cosine; or a known speaker count) and returns speaker
    turns with one centroid per speaker; cluster does the clustering on
    embeddings an app made itself; match finds a known voice for a
    centroid. Progress and cancellation for long recordings. On LibriSpeech
    voices WeSpeaker put one man's halves at cosine 0.73, two women at 0.22,
    a man and a woman at 0.08 (the ECAPA GGUF: 0.80, 0.70, 0.45, hence the
    default); on three one-minute conversations it found 3, 4 and 1 speakers
    for 3, 3 and 1. See docs/speakers.md.

v0.16.1

Choose a tag to compare

@github-actions github-actions released this 15 Oct 12:16

Oriel 0.16.1

Added

  • System monitor example: an Applications list, the default in all
    three renderers. Each desktop app shows its combined CPU, summed resident
    memory, threads and process count; Show processes opens its members
    as a parent/child tree, and All processes lists everything, as
    before. Apps are recognized from desktop entries (Linux), .app bundles
    (macOS) and window owners (Windows), with process ancestry. Its CI runs
    the model tests and builds the Oriel renderer on Windows and macOS.

Fixed

  • oriel.chat: a Stop that comes after its reply ended no longer stops
    the next one. Tokens can reach the page in a burst after the model
    finished, and cancel() with no reply running stops the next to start,
    so a Stop pressed during the burst left the next message empty.
    chat:token events now carry their reply's id (reply), and
    cancelReply(id) stops that reply only while it runs; the showcase's
    Stop sends it. cancel() is unchanged.
  • The showcase's chat UI test (iOS CI) no longer waits 5 minutes for a
    reply its own late Stop had cancelled: it stops only while the reply
    runs, and asks again after a reply with no tokens.
  • System monitor (Oriel renderer): picking a sort key (CPU, Memory, ...)
    no longer flips the direction; only the direction button does, as in the
    web frontend.

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 11:49

Oriel 0.16.0

Oriel apps can advertise over Bluetooth LE: oriel.bluetooth sends a
beacon nearby devices see, from Zig or the page, on every platform.

Added

  • oriel.bluetooth: Bluetooth LE advertising, a beacon nearby devices
    see (docs/bluetooth.md). The same API on every platform, with
    capabilities() saying what each stack can send; a field the device
    can't send is error.Unsupported, never dropped. Starts, failures and
    platform stops come later as the advertisement's state
    (onAdvertiseState, the page's bluetooth:advertise event). On when
    the app declares .permissions.bluetooth (or -Dbluetooth); the page
    gets oriel.bluetooth.capabilities(), advertise(ad) and stop(id).
    • Android and ChromeOS: BluetoothLeAdvertiser, every field (tested on a
      Chromebook's ARC, one advertisement at a time there).
    • Linux: BlueZ over the system bus, every field (tested on a BlueZ
      adapter).
    • macOS and iOS: CBPeripheralManager, service UUIDs and the device name
      (Apple can't advertise service data); advertise while the
      permission is undecided shows the prompt (tested on macOS 15).
    • Windows: BluetoothLEAdvertisementPublisher, service UUIDs and service
      data, no device name (not yet tested on a Windows machine).

v0.15.1

Choose a tag to compare

@github-actions github-actions released this 14 Oct 23:40

Oriel 0.15.1

Fixed

  • Breakout (Oriel renderer): dragging a finger on the board moves the
    paddle on touch screens. The board now takes the drag when a finger goes
    down on it, as the page's touchmove preventDefault does, so Android
    no longer turns the drag into a scroll and cancels the pointer.

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 20:11

Oriel 0.15.0

A page drawn by the native renderer can now be ported to the Oriel renderer
and look the same: .oriel says everything the native renderer computes, a
page exports itself as views, and zig build check-views proves it.
HollerShare is the first app ported this way. GTK windows paint only what
changed.

Added

  • .oriel views can say everything the native renderer computes from
    HTML and CSS, so an Oriel-renderer view can look exactly like the web
    page it came from: per-side borders and border colors, dashed and dotted
    borders, per-corner and elliptical radii, calc() lengths, gradients,
    transforms, outlines and focus halos, position: relative offsets and
    sticky, tables, scrollbar styling and color scheme, align-content and
    any flex direction, max-/fit-content text, keyboard hints for fields,
    SVG icons (<icon> with <path>s), and spans that are underlined,
    highlighted, boxed (inline <code>-style boxes) or links whose clicks
    reach the app as their own ids. unset="..." gives a prop no value. A
    test fails the build if a native prop is ever added that no attribute
    sets.
  • Porting a page to the Oriel renderer: ORIEL_NUI_EXPORT and
    ORIEL_NUI_EXPORT_SCRIPT write a native-renderer page as .oriel views,
    its states merged as blocks, and zig build check-views proves each
    view compiles to the props the page had (docs/design/zig-ui-experiment.md,
    "Porting a page"). Character entities (&amp;, &#10;) in markup.
  • .oriel blocks: @when (state) for the app's states
    (View.setState), combined with media conditions, up to 64 blocks per
    view, applied block by block instead of one compiled variant per
    combination; @when (focus) and @when (hover) looks for the focused
    and hovered nodes, which also style native fields' focus. Spans take
    class.
  • .oriel views update in place: View.update(tree, base, bindings) edits
    only the bound texts, tooltips and labels that changed, keeping the
    view's native controls, scroll positions and media styles. Typed
    property updates go straight to the tree (and Android's mirror) without
    JSON. zig build bench-ui-updates -Dzig_ui=true measures both.
  • Zig-renderer apps: Engine.setColorScheme pins dark or light;
    Driver.drag takes drags and drops (dropped files' paths from
    Engine.drops); events the app emits reach Driver.event as "message"
    on every platform, as they did on Windows and Android.

Improved

  • GTK: windows paint only what changed since the last frame (tiles and
    patches GTK composites), and canvases are drawn at the display's real
    fractional scale instead of being resampled every frame. An idle system
    monitor took 3.7-7.4% of a core, now 1.5%. ORIEL_NUI_FULL_REDRAW=1
    paints everything, to compare.

Fixed

  • Typed property updates keep the props a backend callback still reads
    until it returns.
  • System monitor (Oriel renderer): the process actions' copy submenu shows,
    and copying or ending a process says whether it worked.
  • A view mounted where another one was starts from its own look (it showed
    the old view's media blocks as already applied).
  • Linux: a -Dnative_ui build no longer links a WebKitGTK call for
    transparent windows.
  • iOS (native and Oriel renderers): the status bar and home indicator areas
    show the page's background, as CSS spreads the root's over the canvas,
    instead of the system's white; the status bar's text follows its
    lightness.
  • System monitor (Oriel renderer): no "0.0 GHz" on Apple Silicon, which
    doesn't tell its CPU frequency; the frequency is hidden, as in the web
    frontend, and the per-core chart drops its "0.0G".
  • Render bench: memory readings on macOS and iOS (resident size and
    physical footprint, the app's process), instead of 0 MB.
  • Breakout: zig build test-game passes with any renderer (the WebView
    build left out the canvas the physics rules use).
  • iOS simulator builds no longer print codesign's "replacing existing
    signature" as a failed command.