Skip to content

Releases: TannerMidd/frameshift

v2.6.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 14:23

Frameshift v2.6.0 — the jump is part of the show

The flight panel now plays a cinematic FSD jump sequence in step with your
ship: the hyperspace countdown, the witchspace tunnel, and the arrival
reveal, driven live from the journal the moment your drive commits to a jump.

A jump sequence with real flight data

  • The countdown screen locks in your destination the way the drive does:
    system name, star class, and whether the arrival star is scoopable.
  • The tunnel is a real-time WebGL render with a heads-up display —
    destination and class on one side, transit clock and fuel on the other,
    plus your route position when a route is plotted.
  • Arrival flashes into normal space and reveals the system name, the jump
    distance, and what to do next: deploy the scoop at a fuel star, or a clear
    warning when a low tank meets a star with no fuel to give.
  • Neutron stars get their own cyan cone-transit look with the ×4 supercharge
    banner. Jumping on critically low fuel turns the sequence red and keeps
    the advice on screen. ("DON'T PANIC.")

You decide how much spectacle you want

  • Settings → FSD jump sequence turns the whole thing on or off for the
    device, and a SKIP button on the overlay dismisses any single jump.
  • Reduce jump flashing caps the bright white flashes at launch and
    arrival, and the sequence calms itself automatically when your device asks
    for reduced motion.
  • Jump effect intensity scales the tunnel, camera shake, and glow from
    calm to full theatre.
  • ◈ PREVIEW JUMP plays a simulated jump on the spot — no game needed.

Built for the cockpit tablet

  • The tunnel renders at adaptive resolution so tablet GPUs hold their frame
    rate, and the WebGL context exists only while a sequence is playing.
  • The sequence rides the panel's existing state link — no new connections —
    and a paired device that reloads mid-jump joins the tunnel in progress.
  • A jump that never resolves (a crash mid-jump, a stale session) expires
    quietly instead of leaving the overlay on screen.

Upgrade notes

  • Update normally from any 2.x release. There are no database schema changes
    and no manual migration steps. The sequence is on by default in Panel
    mode; turn it off any time in Settings.

Full Changelog: v2.5.0...v2.6.0

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 01:32

Frameshift v2.5.0 — a modern, safer cockpit core

This release rebuilds the application underneath the cockpit without changing
the local-first experience. The legacy frontend monolith is gone; every pane
now runs through a small, explicit module with guarded data and rendering
boundaries.

Faster, cleaner cockpit foundation

  • The frontend is now a native ES-module graph split by feature, with a tiny
    startup shell and layered styles. There is still no bundler, CDN, runtime
    package, or cloud account.
  • Desktop and Panel mode share one typed application state while keeping their
    presentation and controls independently testable.
  • Browser assets revalidate safely after an update, and a running client
    reloads once if it detects a newer backend version.
  • The existing Holo Bracket controls, themes, saved layouts, paired devices,
    and touch-first Panel experience are preserved.

Commander data stays with the right commander

  • Every commander-owned request carries a stable commander identity. Work
    still in flight is cancelled and ignored when profiles change.
  • Archived commanders are now explicitly offline viewers. Frameshift rejects
    switching away from the journal commander while Elite Dangerous is live,
    preventing the UI, analytics, and tracked-market data from splitting across
    profiles.
  • Profile activation and journal handoffs now share one serialized transition,
    and live journal activity always reasserts its commander before updates are
    recorded.

Safer rendering and transport

  • Dynamic cockpit content is escaped through one reviewed rendering boundary.
  • Feature code can only reach same-origin Frameshift API routes through named,
    typed clients; it cannot bypass the transport policy or embed ad-hoc API
    calls.
  • The server now checks commander metadata for every commander-scoped route and
    continues to enforce a self-only script policy.

Release-grade browser coverage

  • Unit and DOM behavior run against the real module graph.
  • Complete Chromium journeys cover desktop behavior, while WebKit journeys
    exercise the iPad-sized Panel experience.
  • Every Python test file runs in its own deterministic process, and the
    packaged executable must serve a coherent, cache-safe module graph before a
    release can publish.

Upgrade notes

  • Update normally from any 2.x release. There are no database schema changes
    and no manual migration steps.

Full Changelog: v2.4.0...v2.5.0

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 14:50

Frameshift v2.4.0 — the Holo Bracket controls

Every button in the app now speaks one design language, and the pages put
their most-used cards and orderings first.

One button system

Buttons read as light projected onto glass: translucent faces, thin frames,
and breathing corner brackets that mark what matters. Four tiers — solid
primary for the one action a card exists for, translucent secondary, quiet
ghost for cancel/dismiss, and compact mono utility for in-table chrome.
Every press answers with a 350ms face flash, before any network round-trip.

  • Busy buttons pulse and say what they're doing; disabled ones go dashed.
  • Toggles (VOICE, FULL, tabs, the specialist switcher) light up with solid
    brackets and a glow when active.
  • The desktop tabs and specialist switcher are segmented groups — the
    active segment is the only one wearing brackets.
  • Honors reduced-motion, Windows High Contrast, and your color theme.

Cockpit switches

Checkboxes are now flight switches: a squared, accent-framed housing with a
paddle that slides and lights orange when the circuit is on. The Settings
toggles share the same look, and everything scales up to touch size in
panel mode.

Tidier rows

The ◎ plot buttons that trailed each row at a different position now park
in a clean right-edge column — engineers, ships, traders, missions,
community goals, alerts.

Smarter defaults

  • Search results show their sort up front in the column headers: buying
    lists cheapest first, selling richest first, outfitting nearest first.
    Click any header to override; your choice sticks for the session.
  • System stations list real ports by arrival distance — fleet carriers
    sink to the bottom instead of drowning the list.
  • Active missions sort soonest-deadline first, matching the card's own
    "red = expiring soon" legend.
  • Pages lead with their most-used cards: LOCAL puts the station market and
    jump history above the fold, TRADE puts commodity search ahead of the
    mining advisor, ENGINEERING puts the workshop above the materials table.
    Your own card arrangements and hidden cards are untouched — the new
    layout only applies where you haven't customized.

Upgrade notes

  • Update normally from any 2.x release. No database changes.

Full Changelog: v2.3.0...v2.4.0

v2.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 18:13

Frameshift v2.3.0 — the tactical status page

The flight panel's home page and rail got a full redesign — more readout,
less furniture, same touch targets.

Command header

The system readout is now a proper cockpit plate: your current system large
and glowing, a dock-state chip, and — when you're following a plotted
route — a segmented progress bar right in the header showing the next
waypoint. On the right, ship telemetry: credits, rebuy, and legal state,
with a new coverage line under the rebuy — COVERS 21× in green, amber
when you're under two rebuys, red when you can't afford to lose the ship.

Readouts that advise, not just report

  • Fuel shows ≈how many jumps your tank holds at your recent burn rate,
    and whether the star here (or the next one on your route) is scoopable.
  • Cargo shows free tonnage, or "hold empty — ready for loop cargo".
  • Unbanked data gets its own card: exploration value with body count,
    bio samples with species count.
  • Data at risk is now a full-width hazard banner when your unsold data
    is worth many rebuys, with a pointer to the nearest place to bank it.
  • The status strip shows your in-game destination with jumps left, and
    a quiet footer reports link health and telemetry time.

The rail

Sharper and more legible: an accent header bar, the active page marked with
hazard striping and a cut corner, and boxed utility buttons. Everything —
rail, strip, page — follows your chosen color theme, and the ambient CRT
effects remain opt-in in Settings.

Upgrade notes

  • Update normally from any 2.x release. No database changes.

Full Changelog: v2.2.0...v2.3.0

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 04:01

Frameshift v2.2.0 — build your own extensions

Extension builder (experimental)

Settings has a new card: EXTENSION BUILDER. Make Frameshift react to the
game exactly the way you want — no code, no files, no manual.

  • Pick a game event from a plain-English list (hyperspace jump, bounty
    awarded, mission completed, body scanned, cargo sold…) or type any journal
    event name.
  • Add conditions with simple operators: equals, is one of,
    is at least, is at most, is present / absent. Reward is at least 100000 reads the way you'd say it.
  • Choose what happens — a cockpit alert (INFO / WARN / CRITICAL, with an
    optional voice callout) or a suggested objective for Mission Control.
    Write {FieldName} in the message and the live value drops in:
    Bounty {Reward} cr — {Target}.
  • Test before you save. One button replays your rule against your own
    last 1,000 journal events and shows exactly what would have fired, message
    rendered. No guessing whether a condition is right.
  • Templates get you started in one tap: big-bounty callout, low fuel
    after jump, mission payout tracker, first-discovery follow-up.

Saved extensions activate immediately, appear in the pack list with edit and
remove buttons, and are ordinary declarative packs on your own disk —
reviewable, portable, and unable to execute code by design. The builder can
never create or overwrite a process-adapter pack.

Also in this release

  • The extensions and diagnostics readouts on the Settings page now load
    independently, so the pack list no longer waits behind the (slower)
    database health probe.

Upgrade notes

  • Update normally from any 2.x release. No database changes.

Full Changelog: v2.1.7...v2.2.0

v2.1.7

Choose a tag to compare

@github-actions github-actions released this 14 Jul 02:16

Frameshift v2.1.7 — search anywhere, keep your settings

Four small changes aimed at the things you do every session.

Your search settings survive a restart

Every search form now remembers what you set — commodity search (mode,
radius, min units, large pad, even the last commodity), the mining advisor,
outfitting, the neutron plotter, road to riches, exobiology filters. Set
"radius 100, large pad" once and it's still there tomorrow. Trade-route
settings already persisted; now everything does.

Search near any system, not just where you're parked

Commodity search, the mining advisor and outfitting search each gained a
Near box (with the same autocomplete as every other system field). Leave
it empty and searches work exactly as before — around you. Type a system and
you're shopping around your carrier's destination, tomorrow's expedition
stop, or home before you fly back. Distances in the results are measured
from that system.

The Near box deliberately resets on restart: a search silently pinned to
last week's system would be worse than retyping it.

Every result table sorts

The mining advisor and outfitting results now sort by any column header,
just like commodity search — closest buyer first, best price first, station
A-Z. First click means the useful direction; click again to reverse.

Copy from any result row

Commodity, mining and outfitting rows now have a ⧉ copy button next to ◎
plot — grab the system name for wing chat or the in-game galaxy map without
autoplotting.

Fixes

  • The commodity SEARCH button now disables while a search is running, so a
    double-tap can't fire the search twice.

Full Changelog: v2.1.6...v2.1.7

v2.1.6

Choose a tag to compare

@github-actions github-actions released this 14 Jul 00:42

Frameshift v2.1.6 — sort anything, type less

Two quality-of-life upgrades for the tools you use most.

Sortable commodity search results

Click (or tap) any column header — Station, System, Price, Units, Jump, Star
dist, Updated — and the results re-sort instantly; click again to reverse.
First click means the useful direction: closest first for distances, best
first for price and units, freshest first for age. Your chosen sort sticks
across searches, so "sort by star distance once, shop nearest-first all
night" works exactly like you'd hope. The active column shows an arrow, and
stations with an unknown star distance sort last instead of cluttering the
top.

Autocomplete where you type names

Text boxes now suggest as you type, each from the right source:

  • System boxes — both plot inputs, the neutron destination, the system
    stations viewer and objective/ops system fields — complete from your local
    database, with your recently visited systems floated to the top.
  • Station fields (objectives, ops boards) complete station names.
  • The outfitting & shipyard search suggests every ship and the common
    module types.
  • The ops resource field suggests commodities.

Suggestions come from the database on your disk, answer in under a
millisecond per keystroke, and work with touch keyboards on the tablet.

Upgrade notes

  • Update normally from any 2.x release. The first launch adds a small
    station-name index to your existing market database (a few seconds, once).

Full Changelog: v2.1.5...v2.1.6

v2.1.5

Choose a tag to compare

@github-actions github-actions released this 13 Jul 04:18

Frameshift v2.1.5 — startup initiation sequence

The journal reconstruction banner is now a proper cockpit power-on sequence
instead of a plain progress strip.

What you'll see at launch

  • A STARTUP SEQUENCE panel in the launch-control style: hazard chevrons,
    a status light, and your color theme's accent.
  • A three-stage pre-flight checklist that tracks what is really happening:
    FLIGHT RECORDER (cataloguing new journals) → COCKPIT RESTORE
    (replaying your latest flight logs) → SYSTEMS CHECK (cross-checking
    preserved data). Completed stages turn green; the live stage shows its
    counter.
  • A log-tape readout showing the timestamp of the journal currently being
    replayed.
  • Automatic retries appear as HOLDING with an amber light; a hard
    failure becomes STARTUP FAULT with the same recovery guidance as
    before.

The sequence itself is unchanged and — since 2.1.3 — fast; this release is
about making those few seconds read like part of the cockpit.

Notes

  • Screen-reader progress announcements and count clamping are preserved.
  • The only animation is the status-light pulse, and the reduced-motion
    system preference disables it.
  • Update normally from any 2.x release.

Full Changelog: v2.1.4...v2.1.5

v2.1.4

Choose a tag to compare

@github-actions github-actions released this 13 Jul 03:58

Frameshift v2.1.4 — unassigned history stays assigned

Fixes the loop where the COMMANDER PROFILES card showed the same unassigned
records again after every restart, no matter how many times you assigned
them.

What was happening

Elite writes a journal file every time the game launches — including launches
where no pilot ever logs in (opened to the menu, then closed). Those stub
files contain no commander name, so Frameshift correctly refuses to guess an
owner and files their handful of records as unassigned.

The bug: assigning that history to your commander also moved the internal
"this file was already processed" markers. On the next start, the journal
sweep no longer remembered the stub files, imported them again, and the same
records reappeared as unassigned — forever.

What changed

  • Assigning unassigned history now moves only the history itself. The
    per-file processing markers stay put, so assigned records stay assigned
    across restarts.
  • Internal bookkeeping rows are no longer counted as "records" in the
    unassigned banner — the number you see is now only real history (the count
    you see may drop after updating; nothing was lost).
  • Login-less stub journals (menu open/close, launcher crash) are no longer
    ingested at all. They contain nothing but session chrome, so future stubs
    will not feed the unassigned bucket in the first place.

Upgrade notes

  • Update normally from any 2.x release.
  • If the banner still shows unassigned records after updating, assign them
    once — this time they will stay with your commander.

Full Changelog: v2.1.3...v2.1.4

v2.1.3

Choose a tag to compare

@github-actions github-actions released this 13 Jul 03:39

Frameshift v2.1.3 — fast startup

Starting Frameshift no longer spends minutes "restoring recent journals."
On the same mechanical hard drive used for testing, a cold start that took
over six minutes now publishes the live cockpit in about forty seconds, and
warm starts are quicker still. Solid-state installs see proportionally faster
results.

What was wrong

Version 2.1 made commander history durable: every replayed journal event can
write analytics, timings and workflow state to commander.db. Three habits
of that new storage layer multiplied badly on spinning disks:

  • every database connection re-ran a schema check that ended in a disk
    flush, and the journal replay opens thousands of short-lived connections;
  • every tiny write was individually flushed to disk (synchronous=FULL),
    turning a replay into thousands of physical disk waits;
  • the startup replay, the one-time history sweep and finalization each paid
    those costs event by event.

What changed

  • Opening commander.db is now write-free once the database is current; the
    schema/upgrade transaction runs only when a version marker says it must.
  • Commander storage uses SQLite's WAL journal with synchronous=NORMAL
    the standard pairing. Commits cannot corrupt the database; only an
    operating-system crash can lose the newest moments, and everything stored
    here is rebuilt from your journals anyway.
  • Journal reconstruction (startup replay, history sweep, finalization) now
    borrows one shared database connection instead of opening one per event.

Upgrade notes

  • Update normally from any 2.x release. No settings, database or pairing
    changes are required.
  • The one-time history sweep introduced in 2.1 also benefits: if your
    machine has not finished it yet, it will complete several times faster.

Full Changelog: v2.1.2...v2.1.3