Skip to content

Releases: OldJobobo/splinterm

Splinterm 0.1.0

Choose a tag to compare

@OldJobobo OldJobobo released this 05 Sep 23:45
7bba5a9

Splinterm 0.1.0

Splinterm's first stable release is for x86_64 Omarchy/Arch Linux with native
Wayland under Hyprland. It carries the RC3 terminal and daemon implementation
forward unchanged; this release updates version metadata, documentation, and
publication tooling rather than adding product features.

What ships

  • Daemon-owned terminal sessions that survive closing a graphical Window,
    multiplexed Splints and Dojos, saved Lairs, and explicit restore.
  • Scrollback and search, terminal images, native Wayland input, and configurable
    terminal lifetime and presets.
  • Live Omarchy theme and default-font following. Invalid font generations retain
    the last valid renderer, while explicit font choices remain authoritative.
  • Bounded JSON/NDJSON automation, remote graphical access, and an optional
    policy-scoped MCP adapter. Terminal output never grants automation authority.
  • Source-built and prebuilt Arch packages, desktop integration, and a systemd
    user service.

Stabilization included from RC3

  • Unchanged Fontconfig sources no longer trigger repeated staging when an
    incompatible bold or italic face falls back to the regular face.
  • FIFO policy files are rejected without waiting for a writer.
  • Revoking another automation connection preserves partially received requests.
  • Abnormal connection exits immediately remove their topology subscriptions.
  • Relay cancellation interrupts blocked writes and reclaims queues. Remote EOF
    still delivers buffered bytes in order to slow consumers, within channel bounds.

The release also retains the RC1/RC2 font-lifetime fixes, current Gum colors for
new Splints, bounded Sixel previews for Yazi, and legacy generated-Dojo name
normalization.

Install

Use yay -S splinterm-bin for the prebuilt package or yay -S splinterm to build
from source. The optional MCP packages are splinterm-mcp-bin and splinterm-mcp.
AUR distribution follows verification of the GitHub release assets. Packages and
source are also available on this release page.

Upgrade boundary

Splinterm 0.1 does not support live daemon upgrade handoff. Stopping or
replacing the running daemon ends its child processes; saved topology is not a
checkpoint of running applications. Save your work and upgrade from Foot or
another terminal that is not owned by splinterd:

systemctl --user stop splinterd.service
# Upgrade the splinterm package here.
systemctl --user daemon-reload
systemctl --user start splinterd.service

Then reopen Splinterm Windows. Package installation does not silently restart
the user service. See the upgrade and rollback documentation.

Scope and limitations

Stable 0.1.0 does not add support for other distributions, compositors,
architectures, or package formats, and does not promise live daemon replacement
or a support lifetime. Splinterm is security-conscious, not absolutely secure;
automation remains subject to explicit policy, consent, revocation, and resource
bounds. Future 0.x releases may change interfaces with documented migration.

Documentation · Source and issues

Splinterm 0.1.0-rc.3

Splinterm 0.1.0-rc.3 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 05 Sep 02:38
2855721

Splinterm 0.1.0 RC3 — Stabilization

RC3 retains the RC2 feature set and fixes bounded loading, font observation, and
connection cleanup. This is a prerelease for continued testing before 0.1.0
stable.

RC3 fixes

  • Unchanged Fontconfig sources no longer trigger repeated staging when an
    incompatible bold or italic face falls back to the regular face. Source and
    renderer fingerprints remain separate, preserving RC2's resolution-race fix.
  • Policy files that are FIFOs are rejected without waiting for a writer.
  • Revoking another automation connection no longer discards a partially received
    request header or body.
  • Abnormal connection exits remove their topology subscriptions immediately,
    without waiting for another topology mutation.
  • Relay close and session cancellation interrupt blocked writes and reclaim
    per-channel queues. Remote EOF still delivers already-received bytes in order
    to slow consumers; pending drains remain charged against channel admission.

Upgrades retain the documented 0.1 daemon-lifetime boundary: replacing/restarting
an incompatible daemon ends its child processes. Use the external-terminal
upgrade and rollback workflow in packaging. No live-session
handoff or new compatibility guarantee is introduced by RC3.


Splinterm 0.1.0 RC2 — Font Reload Closure

This is the second release candidate for Splinterm 0.1.0. It retains the complete
RC1 feature line and closes two live-font correctness and resource findings found
during RC1 review.

RC2 is intended for normal daily use and soak testing on the documented target:
x86_64 Omarchy/Arch Linux with native Wayland under Hyprland. Any later code
change requires another release candidate before the final v0.1.0 release.

Release validation authority

Splinterm-owned semantic, renderer, contract, package, and guarded graphical
tests are now release authority. The pinned Foot 1.27.0 harness remains an exact
optional historical differential; its host availability or provenance drift no
longer blocks candidate construction or promotion. Existing Foot-derived
fixtures and zero-tolerance evidence remain unchanged.

The RC2 implementation at maintenance commit d26cee9 passed guarded packaged
live-font replacement and invalid-candidate rollback acceptance. This policy
change does not modify shipped Rust code.

Live-font closure fixes

  • A staged generation that differs from its preceding probe now becomes the
    watcher authority, so a later return to the probed generation is not skipped.
  • Cached FreeType faces now retain shared immutable font mappings instead of
    copying the complete font file for every generation, face, and raster size.
  • Font-generation identity and lifetime tests resolve the host's generic
    monospace family instead of requiring JetBrains Mono to be installed.

Live Omarchy font following

When main.font is unset, a valid change to Fontconfig's effective monospace
family now replaces one complete immutable renderer generation without
restarting the Window, daemon, shell, or applications. Explicit font patterns
remain authoritative, and an invalid live generation retains the last valid
family.

Font changes preserve configured size and sizing policy, padding, DPI, runtime
zoom, topology, focus, history, modal and IME state, and controller authority.
Observer panes never acquire control solely to resize after a font change, and
deferred font-driven resizes retry after transient command-queue backpressure.
Fontconfig named instances in variable fonts are preserved through shaping,
metrics, and rasterization. Ambient Fontconfig checks run at a bounded ten-second
cadence.

Yazi uses bounded Sixel previews

When Sixel is enabled, Splinterm now advertises primary device attribute 4.
Yazi therefore selects its Sixel image path instead of the incompatible legacy
per-cell Kitty placement path. The capability remains conditional, and the
existing image-content and 256-placement bounds are unchanged.

Legacy Dojo names normalize on restore

Loading schema-v2, schema-v3, or schema-v4 metadata now replaces only the exact
historical generated forms terminal, terminal-<timestamp>, and
terminal-<timestamp>-<pid> with collision-free Dojo N names. Numeric fields
may be zero-padded, matching names emitted by older builds. Explicit names in
current schema metadata are preserved.

New Splints follow the current Gum palette

splinterd is persistent, so environment variables inherited when the daemon
started can outlive an Omarchy theme change. Before RC1, a newly created shell
could therefore receive stale Gum colors even though Splinterm's graphical
palette already reflected the active theme.

For every new Splint, the daemon now reads the active rendered palette from:

${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/current/theme/gum_env.lua

It refreshes only Omarchy's bounded Gum environment namespace:

  • GUM_*;
  • FOREGROUND and BACKGROUND; and
  • BORDER_FOREGROUND and BORDER_BACKGROUND.

A complete valid palette replaces current managed values and removes obsolete
managed GUM_* entries. Unrelated environment variables remain untouched.
Existing PTYs keep the environment with which they were created; only later
Splints see a later valid theme.

Missing, malformed, oversized, symlinked, or non-regular palette state fails
closed. In those cases the new PTY preserves the daemon's inherited environment
rather than receiving a partial palette.

Stabilized Beta 3 baseline

RC1 retains the Beta 3 workload and interface corrections:

  • terminal workloads inherit the systemd user manager's task policy while
    splinterd.service keeps its independent TasksMax=2048 guard;
  • the New Dojo control sits after the final visible tab;
  • inactive tabs use semantic dividers; and
  • the strict historical unnamed initial Dojo form is presented as Dojo 1
    without mutating daemon-owned topology.

Persistent topology, explicit restore, scrollback and search, terminal images,
remote graphical access, JSON/NDJSON automation, MCP, configurable terminal
lifetime, presets, and the documented native Wayland path remain part of the
0.1 baseline.

Upgrade boundary

Splinterm 0.1 does not support live daemon upgrade handoff. Upgrading RC1 to
RC2 therefore ends active Dojos. Run the upgrade from Foot or another terminal
that is not owned by splinterd:

systemctl --user stop splinterd.service
# upgrade the splinterm package here
systemctl --user daemon-reload
systemctl --user start splinterd.service

Then reopen Splinterm Windows. Package installation does not silently reload or
restart the user service.

RC2 soak focus

During the release-candidate soak, please pay particular attention to:

  • repeated valid, invalid, and rapidly superseded Omarchy font changes;
  • stable file-descriptor and memory use across repeated font and scale changes;
  • repeated Omarchy theme changes followed by newly created Splints;
  • existing PTYs retaining their original environment;
  • clean installation and Beta 3 upgrade/rollback;
  • saved-Lair restore and ordinary long-running terminal workloads;
  • trusted graphical-client identity and desktop launching; and
  • optional MCP package behavior when installed.

RC2 remains a prerelease. If stabilization requires any code change, the next
public build will be RC3 rather than the final v0.1.0 release.

Splinterm 0.1.0-rc.2

Splinterm 0.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 04 Sep 19:22
b7f735e

Splinterm 0.1.0 RC2 — Font Reload Closure

This is the second release candidate for Splinterm 0.1.0. It retains the complete
RC1 feature line and closes two live-font correctness and resource findings found
during RC1 review.

RC2 is intended for normal daily use and soak testing on the documented target:
x86_64 Omarchy/Arch Linux with native Wayland under Hyprland. Any later code
change requires another release candidate before the final v0.1.0 release.

Release validation authority

Splinterm-owned semantic, renderer, contract, package, and guarded graphical
tests are now release authority. The pinned Foot 1.27.0 harness remains an exact
optional historical differential; its host availability or provenance drift no
longer blocks candidate construction or promotion. Existing Foot-derived
fixtures and zero-tolerance evidence remain unchanged.

The RC2 implementation at maintenance commit d26cee9 passed guarded packaged
live-font replacement and invalid-candidate rollback acceptance. This policy
change does not modify shipped Rust code.

Live-font closure fixes

  • A staged generation that differs from its preceding probe now becomes the
    watcher authority, so a later return to the probed generation is not skipped.
  • Cached FreeType faces now retain shared immutable font mappings instead of
    copying the complete font file for every generation, face, and raster size.
  • Font-generation identity and lifetime tests resolve the host's generic
    monospace family instead of requiring JetBrains Mono to be installed.

Live Omarchy font following

When main.font is unset, a valid change to Fontconfig's effective monospace
family now replaces one complete immutable renderer generation without
restarting the Window, daemon, shell, or applications. Explicit font patterns
remain authoritative, and an invalid live generation retains the last valid
family.

Font changes preserve configured size and sizing policy, padding, DPI, runtime
zoom, topology, focus, history, modal and IME state, and controller authority.
Observer panes never acquire control solely to resize after a font change, and
deferred font-driven resizes retry after transient command-queue backpressure.
Fontconfig named instances in variable fonts are preserved through shaping,
metrics, and rasterization. Ambient Fontconfig checks run at a bounded ten-second
cadence.

Yazi uses bounded Sixel previews

When Sixel is enabled, Splinterm now advertises primary device attribute 4.
Yazi therefore selects its Sixel image path instead of the incompatible legacy
per-cell Kitty placement path. The capability remains conditional, and the
existing image-content and 256-placement bounds are unchanged.

Legacy Dojo names normalize on restore

Loading schema-v2, schema-v3, or schema-v4 metadata now replaces only the exact
historical generated forms terminal, terminal-<timestamp>, and
terminal-<timestamp>-<pid> with collision-free Dojo N names. Numeric fields
may be zero-padded, matching names emitted by older builds. Explicit names in
current schema metadata are preserved.

New Splints follow the current Gum palette

splinterd is persistent, so environment variables inherited when the daemon
started can outlive an Omarchy theme change. Before RC1, a newly created shell
could therefore receive stale Gum colors even though Splinterm's graphical
palette already reflected the active theme.

For every new Splint, the daemon now reads the active rendered palette from:

${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/current/theme/gum_env.lua

It refreshes only Omarchy's bounded Gum environment namespace:

  • GUM_*;
  • FOREGROUND and BACKGROUND; and
  • BORDER_FOREGROUND and BORDER_BACKGROUND.

A complete valid palette replaces current managed values and removes obsolete
managed GUM_* entries. Unrelated environment variables remain untouched.
Existing PTYs keep the environment with which they were created; only later
Splints see a later valid theme.

Missing, malformed, oversized, symlinked, or non-regular palette state fails
closed. In those cases the new PTY preserves the daemon's inherited environment
rather than receiving a partial palette.

Stabilized Beta 3 baseline

RC1 retains the Beta 3 workload and interface corrections:

  • terminal workloads inherit the systemd user manager's task policy while
    splinterd.service keeps its independent TasksMax=2048 guard;
  • the New Dojo control sits after the final visible tab;
  • inactive tabs use semantic dividers; and
  • the strict historical unnamed initial Dojo form is presented as Dojo 1
    without mutating daemon-owned topology.

Persistent topology, explicit restore, scrollback and search, terminal images,
remote graphical access, JSON/NDJSON automation, MCP, configurable terminal
lifetime, presets, and the documented native Wayland path remain part of the
0.1 baseline.

Upgrade boundary

Splinterm 0.1 does not support live daemon upgrade handoff. Upgrading RC1 to
RC2 therefore ends active Dojos. Run the upgrade from Foot or another terminal
that is not owned by splinterd:

systemctl --user stop splinterd.service
# upgrade the splinterm package here
systemctl --user daemon-reload
systemctl --user start splinterd.service

Then reopen Splinterm Windows. Package installation does not silently reload or
restart the user service.

RC2 soak focus

During the release-candidate soak, please pay particular attention to:

  • repeated valid, invalid, and rapidly superseded Omarchy font changes;
  • stable file-descriptor and memory use across repeated font and scale changes;
  • repeated Omarchy theme changes followed by newly created Splints;
  • existing PTYs retaining their original environment;
  • clean installation and Beta 3 upgrade/rollback;
  • saved-Lair restore and ordinary long-running terminal workloads;
  • trusted graphical-client identity and desktop launching; and
  • optional MCP package behavior when installed.

RC2 remains a prerelease. If stabilization requires any code change, the next
public build will be RC3 rather than the final v0.1.0 release.

Splinterm 0.1.0-rc.1

Splinterm 0.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 03 Sep 23:12
5fe4879

Splinterm 0.1.0 RC1 — Stable Ground

This is the first release candidate for Splinterm 0.1.0. It freezes the 0.1
feature line for stabilization and carries the complete public Beta 3 baseline
plus bounded fixes for Omarchy environment refresh, live font following, Yazi
image previews, and legacy Dojo restore names.

RC1 is intended for normal daily use and soak testing on the documented target:
x86_64 Omarchy/Arch Linux with native Wayland under Hyprland. A code change after
RC1 requires another release candidate before the final v0.1.0 release.

Live Omarchy font following

When main.font is unset, a valid change to Fontconfig's effective monospace
family now replaces one complete immutable renderer generation without
restarting the Window, daemon, shell, or applications. Explicit font patterns
remain authoritative, and an invalid live generation retains the last valid
family.

Font changes preserve configured size and sizing policy, padding, DPI, runtime
zoom, topology, focus, history, modal and IME state, and controller authority.
Observer panes never acquire control solely to resize after a font change, and
deferred font-driven resizes retry after transient command-queue backpressure.
Fontconfig named instances in variable fonts are preserved through shaping,
metrics, and rasterization. Ambient Fontconfig checks run at a bounded ten-second
cadence.

Yazi uses bounded Sixel previews

When Sixel is enabled, Splinterm now advertises primary device attribute 4.
Yazi therefore selects its Sixel image path instead of the incompatible legacy
per-cell Kitty placement path. The capability remains conditional, and the
existing image-content and 256-placement bounds are unchanged.

Legacy Dojo names normalize on restore

Loading schema-v2, schema-v3, or schema-v4 metadata now replaces only the exact
historical generated forms terminal, terminal-<timestamp>, and
terminal-<timestamp>-<pid> with collision-free Dojo N names. Numeric fields
may be zero-padded, matching names emitted by older builds. Explicit names in
current schema metadata are preserved.

New Splints follow the current Gum palette

splinterd is persistent, so environment variables inherited when the daemon
started can outlive an Omarchy theme change. Before RC1, a newly created shell
could therefore receive stale Gum colors even though Splinterm's graphical
palette already reflected the active theme.

For every new Splint, the daemon now reads the active rendered palette from:

${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/current/theme/gum_env.lua

It refreshes only Omarchy's bounded Gum environment namespace:

  • GUM_*;
  • FOREGROUND and BACKGROUND; and
  • BORDER_FOREGROUND and BORDER_BACKGROUND.

A complete valid palette replaces current managed values and removes obsolete
managed GUM_* entries. Unrelated environment variables remain untouched.
Existing PTYs keep the environment with which they were created; only later
Splints see a later valid theme.

Missing, malformed, oversized, symlinked, or non-regular palette state fails
closed. In those cases the new PTY preserves the daemon's inherited environment
rather than receiving a partial palette.

Stabilized Beta 3 baseline

RC1 retains the Beta 3 workload and interface corrections:

  • terminal workloads inherit the systemd user manager's task policy while
    splinterd.service keeps its independent TasksMax=2048 guard;
  • the New Dojo control sits after the final visible tab;
  • inactive tabs use semantic dividers; and
  • the strict historical unnamed initial Dojo form is presented as Dojo 1
    without mutating daemon-owned topology.

Persistent topology, explicit restore, scrollback and search, terminal images,
remote graphical access, JSON/NDJSON automation, MCP, configurable terminal
lifetime, presets, and the documented native Wayland path remain part of the
0.1 baseline.

Upgrade boundary

Splinterm 0.1 does not support live daemon upgrade handoff. Upgrading Beta 3 to
RC1 therefore ends active Dojos. Run the upgrade from Foot or another terminal
that is not owned by splinterd:

systemctl --user stop splinterd.service
# upgrade the splinterm package here
systemctl --user daemon-reload
systemctl --user start splinterd.service

Then reopen Splinterm Windows. Package installation does not silently reload or
restart the user service.

RC1 soak focus

During the release-candidate soak, please pay particular attention to:

  • repeated Omarchy theme changes followed by newly created Splints;
  • existing PTYs retaining their original environment;
  • clean installation and Beta 3 upgrade/rollback;
  • saved-Lair restore and ordinary long-running terminal workloads;
  • trusted graphical-client identity and desktop launching; and
  • optional MCP package behavior when installed.

RC1 remains a prerelease. If stabilization requires any code change, the next
public build will be RC2 rather than the final v0.1.0 release.

Splinterm 0.1.0-beta3

Splinterm 0.1.0-beta3 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 28 Aug 12:26
f7e695d

Splinterm 0.1.0 Beta 3 — Room to Work

Beta 3 removes task ceilings that were too small for ordinary applications,
polishes the Dojo tab strip, and gives legacy unnamed Dojos a stable readable
label.

Workloads inherit the user manager's task policy

Beta 2 introduced the correct nested systemd hierarchy but shipped provisional
fixed ceilings of 512 tasks per Splint, 1024 per Dojo, and 2048 across all
terminal workloads. Because Linux counts both processes and threads, ordinary
Chromium, Node, editor, build, and coding-agent workloads can reach those limits.
Rejected task creation may then appear as an application failure even though the
workload is not runaway.

Beta 3 keeps the containment hierarchy and exact pre-exec PTY placement:

splinterd.service
app-splinterm.slice
└── app-splinterm-dojo<ID>.slice
    └── splinterm-splint<ID>-<incarnation>.scope

The corrected policy is:

  • splinterd.service retains TasksMax=2048 for the small control plane;
  • the aggregate workload slice does not set TasksMax;
  • transient Dojo slices do not set TasksMax; and
  • transient Splint scopes do not set TasksMax.

Terminal workloads therefore inherit the systemd user manager's
DefaultTasksMax, subject to any stricter administrator or ancestor policy.
EffectiveTasksMax is the authoritative runtime value. The existing
MemoryHigh pressure boundaries remain 75% aggregate, 50% per Dojo, and 25%
per Splint; Beta 3 still sets no MemoryMax.

Clearer Dojo tabs

The New Dojo + control now sits immediately after the final visible tab instead
of being pinned to the far-right edge of the Window. When the strip is full, the
existing bounded active-tab visibility and hit targets remain unchanged.

Inactive tabs now use the theme's semantic pane-border color for a narrow exact
divider. The active tab retains its exact theme-provided body, contrasting
foreground, and accent underline.

Older persisted unnamed Lairs may still carry historical generated identities
such as terminal-1787899189-4132. Reopening one from the Dojo picker now
presents its initial tab as Dojo 1. This is a presentation-only compatibility
rule: explicit Dojo names remain unchanged and daemon-owned topology is not
renamed.

Upgrade boundary

The corrected task policy applies when the daemon and transient workload
hierarchy are recreated. Existing Beta 2 scopes retain their old explicit limits
until then.

Splinterm 0.1 does not support live daemon upgrade handoff. Upgrading Beta 2 to
Beta 3 therefore ends active Dojos. From Foot or another terminal not owned by
splinterd, use this lifecycle around the package upgrade:

systemctl --user stop splinterd.service
# upgrade the splinterm package here
systemctl --user daemon-reload
systemctl --user start splinterd.service

Then reopen Splinterm Windows. Package installation does not silently reload or
restart the user service.

Compatibility

  • Persistent topology, restore, history, remote, automation, MCP, preset, and
    terminal protocol contracts are unchanged.
  • Exact cgroup placement and workload cleanup remain mandatory in packaged mode.
  • Explicit Dojo names remain authoritative; only the strict historical pair of
    initial Dojo terminal under Lair terminal-<epoch-seconds>-<pid> is
    presented as unnamed.
  • Beta 2 tags and packages remain immutable.
  • Beta 3 continues to target x86_64 Omarchy/Arch Linux with native Wayland.

Splinterm 0.1.0-beta2

Splinterm 0.1.0-beta2 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 24 Aug 04:52
f0c5dd1

Splinterm 0.1.0 Beta 2 — Persistence With an Exit

Splinterm remains persistent by default. Beta 2 adds a deliberate alternative:
an ordinary unnamed graphical terminal can belong to its Window and disappear
when that Window closes. The moment you organize that terminal into a named or
multi-tab workspace, Splinterm can make the complete Lair durable automatically.

Beta 2 also includes the startup font-family correction for newly opened
Windows. Selecting CaskaydiaMono, another Omarchy terminal family, or an
explicit Fontconfig family no longer leaves bold and italic resolution tied to
JetBrains Mono.

This release also separates terminal workloads from the daemon's resource
failure boundary. Packaged Splints now run inside nested systemd user units:
the aggregate Splinterm workload slice contains one slice per Dojo and one scope
per Splint. The daemon keeps its own independent task and memory-pressure guard.

Configurable terminal lifetime

The new settings are:

[multiplexer]
persistent-by-default=yes
persist-on-tab-organization=yes

Both default to yes, preserving Beta 1 behavior for existing configurations.

Set persistent-by-default=no when normal terminals should behave like
Window-owned terminals rather than detached multiplexer sessions. It applies to:

  • the commandless desktop/XDG launch used by Omarchy's terminal icon and
    SUPER+ENTER;
  • bare splinterm launch;
  • New in the Recent Dojos picker; and
  • in-Window New Terminal.

Closing the owning Window terminates the processes and removes the complete
unpromoted Lair. It is not saved, restored, placed in Recent Dojos, or selected
by reopen.

Explicit durable intent still wins. Named Lairs, splinterm new NAME,
splinterm launch --name NAME, native command-bearing launches, presets,
restore/relaunch, remote creation, automation, and MCP creation remain
persistent. Generated collision-resistant Lair names and the initial Dojo 1
label are implementation identities, not explicit naming.

Organize first, keep it afterward

With persist-on-tab-organization=yes, either of these actions atomically
promotes a Window-owned Lair to persistent:

  • creating another Dojo tab; or
  • explicitly naming or renaming a Dojo tab.

Promotion includes every Dojo, Splint, and running process in the Lair. It is
permanent for that Lair. Once promoted, closing the Window detaches normally and
the Lair can appear in Recent Dojos.

Set the option to no when even organized or multi-tab terminals should remain
Window-owned. In that mode, all tabs in the transient Lair are removed together
when its Window closes.

Promotion is an owner-only topology transaction. Lifetime, tab creation or
rename, persistence, lease removal, revision advancement, and publication
commit together. A stale revision, wrong owner, invalid name, runtime admission
failure, or persistence failure leaves the original transient Lair unchanged.

Command-bearing splinterm-xdg-terminal-exec -- COMMAND... retains its existing
client-bound contract regardless of these settings.

Startup font-family correction

New clients now resolve regular, bold, italic, and bold-italic from the family
selected by the configured regular Fontconfig pattern. The application default
is now:

[main]
font=monospace:style=Regular

That follows the active Omarchy Fontconfig terminal-family selection. An
explicit main.font remains authoritative.

A styled face is accepted only when it belongs to the selected regular family,
represents the requested weight and slant, and has compatible terminal-cell
metrics. When no compatible style exists, Splinterm warns and deliberately
reuses the regular face instead of refusing to open a Window.

New clients also resolve Fontconfig's ordered outline fallback set once during
renderer initialization. Symbols missing from the primary, CJK, and emoji faces
now use the first installed fallback face that covers the complete cell instead
of immediately rendering the replacement character. Fallback files are lazily
mapped through a 24-entry evictable cache alongside the existing bounded glyph
and raster-face caches.

This corrects startup for families such as CaskaydiaMono and for regular-only
families. Already-open Windows still retain immutable renderer resources; live
font-family replacement remains planned for the 0.2 line.

Workload isolation and daemon protection

The packaged daemon starts only after it proves that the user systemd manager
can create, verify, and remove the transient units required for workload
placement. Each terminal command remains blocked in the PTY helper until its
process has been moved into and verified inside the exact Splint scope.
Placement failure prevents the target command from executing.

The packaged boundaries are:

  • splinterd.service: TasksMax=2048, MemoryHigh=75%;
  • aggregate app-splinterm.slice: TasksMax=2048, MemoryHigh=75%;
  • each Dojo slice: TasksMax=1024, MemoryHigh=50%; and
  • each Splint scope: TasksMax=512, MemoryHigh=25%.

MemoryHigh applies reclaim pressure rather than terminating the unit at a hard
byte ceiling. Beta 2 deliberately sets no MemoryMax; a hard-memory limit
requires measured follow-up evidence. These boundaries limit a runaway terminal
workload's impact on the daemon and neighboring Dojos, but they do not claim to
fix unrelated client-side panics.

Upgrading from Beta 1 still restarts the 0.1 daemon and ends its active Dojos.
Perform the upgrade from Foot or another terminal not owned by splinterd, then
reopen Splinterm windows after the package replacement.

Compatibility and boundaries

  • Existing configuration omission remains persistent.
  • Persistent topology, restore, history, remote, automation, MCP, and preset
    contracts are unchanged.
  • Transient authority is restricted to the trusted local graphical owner.
  • Terminal output cannot select lifetime, trigger promotion, or retain a Lair.
  • Beta 1 tags and packages remain immutable.
  • Beta 2 still targets x86_64 Omarchy/Arch Linux with native Wayland.

Validation boundary

The Beta 2 implementation passed serialized workspace, package,
release-tooling, portable Foot-provenance, documentation, independent review,
real-systemd workload-placement, local installation, and guarded staged-package
graphical boundaries before publication.

Splinterm 0.1.0-beta1

Splinterm 0.1.0-beta1 Pre-release
Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 17 Aug 07:25
8d95e75

Splinterm 0.1.0 Beta 1 — The Foundation Holds

Splinterm has reached public beta.

That is more than a version-label change. The alpha releases proved that the
core idea could work: a native terminal whose shells, layouts, and state belong
to a persistent daemon instead of a window. Beta 1 is the point where that idea
has become a coherent product we are comfortable asking people to use, test,
and build workflows around.

Close a window attached to a persistent Splinterm session and your work keeps
running. Come back through the session picker (the Dojo picker) or
splinterm reopen, and it is still there. Tabs and panes are views into
persistent sessions rather than fragile containers for them. Command-hosting
XDG launches are deliberately transient and end with their owner window. The
same topology is available to people, remote clients, scripts, and the optional
MCP adapter—without giving automation the authority of a human at the keyboard.

What is ready in Beta 1

  • Persistent terminal sessions. Shells and processes in persistent sessions
    survive graphical client disconnects, with explicit restore behavior when a
    process has exited. Command-hosting XDG launches remain intentionally
    transient.
  • A native Wayland workflow. Splinterm provides windows, panes, window-local
    Dojo tabs, search, copy mode, clipboard integration, IME support, and
    multi-client control on the validated Omarchy/Arch Linux target.
  • First-class Omarchy integration. Splinterm follows the active Omarchy
    palette, can reload valid theme changes without restarting your shell, and
    offers an explicit, reversible default-terminal integration.
  • One terminal world for humans and tools. The human CLI, structured
    JSON/NDJSON clients, SSH relay, native remote client, and optional MCP adapter
    all work with the same persistent sessions.
  • Bounded automation. Machine access uses explicit policy, scopes, resource
    limits, controller ownership, consent, and revocation. Terminal output remains
    untrusted data; it cannot grant itself authority.
  • Real packages. Immutable GitHub release assets and both prebuilt and
    source-built AUR packages are now public and versioned.

What changed for Beta 1

Large terminals no longer hit the old grid ceiling

Splinterm now supports terminal grids up to 480×128, replacing the earlier
240×80 ceiling. Maximized terminals on validated 1440p and non-graphically
verified 4K profiles can use their available cell area instead of silently
stopping at an inherited protocol limit. Negotiated limits, oversized terminal
transactions, renderer state, and publication memory all remain bounded.

Heavy output is steadier and more predictable

Terminal updates now travel through sparse publication frames that own the rows
and metadata that actually changed rather than repeatedly retaining complete
terminal checkpoints. This reduces unnecessary retained state and large
cross-batch materialization while preserving exact ordering, resynchronization,
exit delivery, and hard memory ceilings.

In practical terms: sustained and bursty terminal output has a much healthier
path through the daemon and graphical client, without weakening correctness to
win a benchmark.

Active tabs are readable without corrupting selection colors

On native Omarchy themes, the active tab now derives its background from
standard theme roles and chooses a high-contrast foreground independently from
terminal selection colors. Theme authors do not need Splinterm-specific keys,
terminal text selection keeps its intended palette, and valid live theme
changes remain atomic.

Wide-grid and automation edge cases were hardened

The session picker now accepts the full Beta 1 grid envelope, constrained
endpoints retain their negotiated dimensions, and a control-subscription
ordering race found by repeated CI was fixed before release. Release review also
caught user-facing package metadata defects, so the candidate was corrected and
rebuilt before promotion.

That matters. Beta does not mean “finished.” It means the release boundary is
strong enough to catch problems before users inherit them.

Install

Splinterm Beta 1 currently targets x86_64 Omarchy/Arch Linux on native
Wayland
. The recommended prebuilt packages are:

yay -S splinterm-bin
# Optional policy-scoped MCP adapter:
yay -S splinterm-mcp-bin

Source-built packages are available as splinterm and splinterm-mcp. See the
installation guide for trusted-client
identity, upgrades, integration, and troubleshooting.

What “beta” means here

The persistent-session model, terminal core, native presentation, multiplexing,
packaging, and bounded automation workflows are implemented and validated for
the documented target. This is the first Splinterm release intended for serious
public evaluation rather than early architectural proof.

It is still beta software. Interfaces may change. The supported environment is
narrow. Broader compositor, distribution, architecture, and package support is
not promised yet, and stable compatibility or support windows have not been
announced. The renderer is currently CPU-composed Wayland shared memory, remote
image transfer is not supported, and full Kitty graphics compatibility is not
claimed.

Those boundaries are deliberate. Splinterm would rather make a small promise it
can defend than a large one it cannot.

From here

Beta 1 gives Splinterm a solid public floor: persistent by design, native where
it matters, useful to humans, accessible to tools, and explicit about authority.
The next phase is refinement—better everyday ergonomics, broader compatibility,
and a careful path toward stable interfaces—without sacrificing the ownership
and safety model that made Splinterm worth building in the first place.

Thank you to everyone willing to install it, stress it, report what feels wrong,
and help shape what comes next.

Splinterm 0.1.0-alpha3.3

Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 15 Aug 03:00
0c42767

Splinterm 0.1.0-alpha3.3

Changes

  • Prepare Alpha3.3 release (#14) (0c42767)
  • Number default Dojo names (#10) (d7368ff)
  • Record Alpha3.2 publication (#13) (ee553be)

Splinterm 0.1.0-alpha3.2

Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 14 Aug 23:23
647b0ea

Splinterm 0.1.0-alpha3.2

Changes

  • Prepare Alpha3.2 release (#12) (647b0ea)
  • Fix Backspace command queue crash (#11) (a88a407)
  • Plan the 0.2 product program (#9) (04cfcd1)
  • Adopt branch-first agent workflow (#8) (1ff2f14)
  • Repair Alpha3.1 lock provenance (99a09bf)
  • Record Alpha3.1 publication (2faf60d)

Splinterm 0.1.0-alpha3.1

Pre-release

Choose a tag to compare

@OldJobobo OldJobobo released this 14 Aug 16:14

Splinterm 0.1.0-alpha3.1

Changes

  • Apply theme alpha to selected Dojo tabs (f776022)
  • Respect alpha in Dojo tab strip (6f5d34a)
  • Fix transient Dojo tab attachment (bd7cd29)
  • Prepare Alpha3.1 release (bf2dd3b)
  • Hotfix Alpha3 tab presentation (bde8923)
  • Make installer safety test hermetic (53af572)
  • Retire rolling edge channel (666c449)
  • Refresh Alpha3 lockfile provenance (9a0c092)
  • Record Alpha3 publication (22002a7)
  • Use protected token for release publication (a1e1e4f)
  • Flatten downloaded promotion candidate (c7a074b)