RemotiveCLI
0.20.1 - 2026-06-17
Bug fixes
- Improve error messages when instance file is missing
Features
- Bump RemotiveStudio to 1.20.0
0.20.0 - 2026-06-17
Bug fixes
-
studio: Verify macOS signature + notarization before install
The macOS install path skipped integrity verification entirely, relying on the no-quarantine extraction trick to run an unsigned/ad-hoc app. Now that the desktop app is Developer ID signed + notarized, verify it instead:
- _verify_macos_bundle runs codesign --verify --deep --strict and spctl --assess --type execute on the mounted .app; either failing aborts the install via _SignatureVerificationError.
- _stage_dmg verifies before copytree, so a tampered/improperly-signed download never reaches /Applications.
- macOS now records signature_verification success/failure (was "skipped"), matching the Linux Ed25519 path.
0.19.0 - 2026-06-16
Bug fixes
- Make index_yaml_to_data non-blocking
Features
-
topology: Add host-gateway mapping for docker runs
-
trace: Add --trace troubleshooting mode
Add a --trace flag that logs the underlying operations the CLI performs for troubleshooting. Supports decorator-based tracing, honest mkdir logging, and tracing of container commands, with secrets redacted from logged container commands.
0.18.0 - 2026-06-12
- The completion cache moves from the legacy location to $XDG_CACHE_HOME/remotive/. Users with shell completions installed may need to regenerate them on first run.
Features
-
topology: Use $id URL for workspace schema
The workspace marker (
remotive.yaml) now references its schema through aschemakey carrying the canonical versioned URL from the schema's$id:replacing the
remotive-topology-workspace:0.1identifier. Generated markers start with a yaml-language-server modeline so editors validate and complete them out of the box, and no longer include an emptydescriptionby default.Schemas are published to releases.remotivelabs.com at their
$idURL, versioned by the schema's own version instead of the CLI release version. -
XDG dirs and topology workspace commands
- BREAKING: The completion cache moves from the legacy location to $XDG_CACHE_HOME/remotive/. Users with shell completions installed may need to regenerate them on first run.
Honors the XDG Base Directory Specification for all CLI state. Configuration, cache, state, and data files now live under $XDG_CONFIG_HOME, $XDG_CACHE_HOME, $XDG_STATE_HOME, and $XDG_DATA_HOME (each sub-keyed by
remotive/); each kind can be overridden via REMOTIVE_CONFIG_DIR, REMOTIVE_CACHE_DIR, REMOTIVE_STATE_DIR, REMOTIVE_DATA_DIR. Existing state files at the legacy location are copied forward on first run with permissions clamped to 0600.Adds a workspace surface that materializes and inspects a
remotive.yaml-marked project root:remotive topology workspace init remotive topology workspace current
The marker file is described by a JSON Schema at
schemas/remotive-topology-workspace.schema.json. Legacy workspaces that only have the.remotive/directory get the marker backfilled on first touch (seesettings/migration/migrate_legacy_workspace_marker.py).Adds binary-dispatched topology lifecycle commands:
remotive topology build [--no-workspace] remotive topology clean remotive topology prune [--all]
buildwrites outputs under<workspace>/.remotive/build/by default; pass a positional<output_path>(must lie inside the workspace, unless--no-workspaceis set) to override.prune --allclears every workspace's topology cache root (reclaims orphans from moved or renamed workspaces).The Studio runtime API resolves the active instance YAML inside a workspace sandbox:
<workspace>/.remotive/instances/(canonical), falling back to<workspace>/.remotive/cache/instances/for workspaces written by older binaries. Symlink escapes from the workspace are refused; the endpoint returns a workspace-relative POSIX string.Container subprocess invocation uses identity-mapped bind-mounts — host and container share the same paths for the workspace, config, and cache — and pins those paths via REMOTIVE_<KIND>_DIR env vars inside the container. Supported on WSL2, macOS, and Linux.
0.17.2 - 2026-06-08
Features
-
studio: Harden desktop install — version validation, interactive-only installs, audit log
- Validate --desktop-version (strict ASCII semver, max 32 chars) via Typer callback, and fail closed on a malformed remotely-resolved "latest" so no unvalidated string reaches asset names, release URLs, or paths.
- Installs are interactive-only: without a TTY nothing is ever downloaded or installed — an existing install launches as-is (no update check), a missing install is an error. Removes --desktop-force-install.
- Append a JSON-line audit entry (0o600, in the install state dir) for every install action: action, version source, version, signature verification result, outcome (completed/failed/aborted/declined/refused), user.
Implements OPLANE_REQ-00085620, OPLANE_REQ-00085622, OPLANE_REQ-00085627.
0.17.1 - 2026-06-08
Bug fixes
- Add no-cache header to studio SPA files
Features
- Added endpoint to check broker/topology health(up/down)
0.16.1 - 2026-06-03
Bug fixes
-
Improved checks to determine if a graphical environment is available on linux
-
Allows to retry the pkce code max 3 times to allow for copy-paste issues
-
User Input Validation for PKCE Verification Code in Token Exchange OPLANE_REQ-00080722
Also printing server response in error instead of guessing.
-
Trust XDG_SESSION_TYPE=x11/wayland as a graphical session fast-path
Skips the xdpyinfo probe when logind reports an unambiguous graphical session. Unset/tty values still fall through to the DISPLAY check and probe, so WSL/containers/non-systemd keep their current behavior.
Follow-up to #291.
-
Always show hint about --no-browser even if we think that a browser window was opened.
0.16.0 - 2026-06-01
Bug fixes
-
cli: Set cache dir for custom topology CLI cmd
Make sure to explicitly set cache dir using REMOTIVE_CACHE_DIR env var when calling topology CLI through remotive CLI with a custom command argument. This forces the cache to be populated in the legacy directory ./remotive/cache
Features
-
Adding --with-metrics flag
Requires support for this in remotive-topology
0.15.1 - 2026-05-22
Bug fixes
-
studio: Repair desktop embedded mode on direct launch (not with cli)
macOS GUI apps launched from Spotlight don't inherit the user's shell env, so REMOTIVE_STUDIO_DESKTOP_ENABLED was missing when the Electron app re-spawned the CLI — embedded mode fell back to HTTP and both the CLI and Electron opened a browser window. Drop the toggle check from _embedded_mode_enabled(); REMOTIVE_CLI_RUN_EMBEDDED alone is enough, since only the Electron spawn path sets it.
Also reject --desktop with click's standard "No such option" error when the feature toggle is off, via an option callback.
0.15.0 - 2026-05-21
Features
-
studio: Install RemotiveStudio Desktop on demand and launch with --desktop
Adds a --desktop flag to
remotive studiothat installs the RemotiveStudio Desktop Electron app (if missing) and spawns it detached, forwarding the workspace path and --broker-url. The desktop app then re-invokes the CLI with REMOTIVE_CLI_RUN_EMBEDDED=1, which serves the SPA over HTTPS using the local cert and emits a JSON {event:"ready", url, version} handshake on stdout for the Electron side to connect on.Installer (studio/app_install.py):
- Linux (x86_64, arm64) and macOS (arm64); native Windows rejected, WSL2 treated as Linux.
- Downloads from releases.beamylabs.com, then on Linux verifies an Ed25519 signature over a SHA-256 sidecar using a public key bundled in the CLI. The key's fingerprint is pinned in source so a swap of just the .pem cannot redirect trust; rotating the signing key requires a CLI release that updates both. The sidecar must name this artifact (guards against replaying a signed hash from a different file) and the digest is checked with hmac.compare_digest.
- macOS: the Linux signing pipeline doesn't cover DMGs yet. The DMG is downloaded over HTTPS, mounted via hdiutil, and copy-installed via shutil.copytree — none of which set com.apple.quarantine, so Gatekeeper never engages and the ad-hoc-signed bundle runs. A user-downloaded DMG opened from Finder would still hit Gatekeeper; the "unsigned but works" property only holds because the CLI is the install path. Real Developer ID signing + notarization is a follow-up if/when the DMG becomes a public-download artifact.
- Install is atomic: stage to a sibling dir, backup-rename the target, rename staging into place, rmtree the backup. A failed download leaves the existing install untouched.
- Linux post-install writes a .desktop entry + icon and refreshes a bin symlink at ~/.local/bin/remotive-studio-desktop — but only if that path is unset or already points into our managed dir. A real user file at that path is never clobbered.
- If the install is current but the .desktop entry, icon, or bin symlink is missing, post-install re-runs to restore them without redownloading.
- Concurrent installers serialize on an flock around the state dir to avoid racing on the atomic-swap rename.
Studio HTTPS serving (studio/start.py):
- Embedded mode listens on https://localhost:<port> using the server-key/full-chain from settings.cert_paths, validated through file_io.validate_restrictive_file before being handed to uvicorn.
- Browser mode is unchanged HTTP.
- Stale-launch detection: with stdio fully detached we have no IPC signal, so we sleep 1.5s and check if Electron is still alive. Heuristic — a slow-crashing launch escapes detection.
Studio API (studio/api/topology_runtime.py):
- Passes the per-broker verify (from broker.lib.helper. resolve_https_localhost_verify) through app state into the grafana probe so https://localhost brokers backed by the self-signed CA validate.
Studio mount (studio_mount.py):
- REMOTIVE_STUDIO_SPA_PATH dev-override: serve a built SPA from a chosen directory instead of the packaged UI, for iterating on the SPA without rebuilding the CLI.
-
studio: Gate desktop app behind REMOTIVE_STUDIO_DESKTOP_ENABLED
Adds a preview-feature toggle for the RemotiveStudio Desktop launcher. The desktop install + spawn path is not ready for GA, so until the toggle is flipped on:
- --desktop is hidden from
remotive studio --help. The Typer option'shidden=is evaluated against the env var at command registration, so the flag only surfaces once the env var is set in the user's environment. - A runtime check rejects --desktop with a clear error if a user discovers and passes the (still-accepted-but-hidden) flag without the env var set. Click accepts hidden options on the command line, so visibility alone isn't enough — the runtime check is what actually gates the feature.
- Embedded mode (REMOTIVE_CLI_RUN_EMBEDDED=1, set by the Electron app when it re-invokes the CLI to serve the SPA over HTTPS) is also gated on the same toggle. Without this, a stray REMOTIVE_CLI_RUN_EMBEDDED in the environment could opt a CLI run into HTTPS embedded mode while the feature is supposed to be off.
The toggle accepts the same truthy values as other CLI feature flags ("true", "1", "yes", "on"). Removing the toggle later is a one-line revert per file.
- --desktop is hidden from
-
tls: Provision local TLS certs and gRPC trust for HTTPS localhost
Generates a self-signed CA + server cert lazily via trustme on first settings access (stored under ~/.config/remotive/certs/ with 0700/0600 on POSIX), then exposes them via Settings.cert_paths. The CA, server cert, and server key are consumed by any localhost HTTPS server we run — the local broker on https://localhost:50443 and the Studio backend serving the SPA over HTTPS in embedded mode.
Wires gRPC to trust both system roots and the local CA in the same process: ensure_grpc_trust_bundle() runs once at CLI bootstrap and writes a combined certifi + local-CA bundle, pointing GRPC_DEFAULT_SSL_ROOTS_FILE_PATH at it. gRPC C-core caches that file on first SSL credential creation, so the bundle has to be in place before any TLS channel is built — handling it once at startup rules out the "did we remember to call configure before opening this channel?" hazard. Operator-supplied GRPC_DEFAULT_SSL_ROOTS_FILE_PATH is honored.
For requests, resolve_https_localhost_verify(url) returns the local CA path for https://localhost endpoints (and True elsewhere) so cloud / corporate-proxy setups remain untouched and REQUESTS_CA_BUNDLE keeps working.
Also adds validate_restrictive_file() — refuses to load a cert/key unless it's a 0600 regular file owned by us, sitting under a 0700 parent dir owned by us. Used before handing key material to a TLS stack. lstat on both the file and the parent guards against symlink swaps.
Bumps remotivelabs-broker to ~=0.13.8 and adds trustme + certifi as runtime deps.
0.14.1 - 2026-05-21
Bug fixes
-
search: Silence luqum PLY LALR warnings on import (luqum #115)
-
studio: Serialize gRPC and subprocess to avoid fork race
The studio FastAPI process had two thread-pool sides racing on fork(): gRPC AIO calls in /runtime/* ran on the event loop while sync subprocess.run() in /files/, /environment, /search/ ran on anyio threadpool workers. When fork() landed while a gRPC RPC was in flight, gRPC C-core's pre-fork handler bailed out ("fork_posix.cc:71 Other threads are currently calling into gRPC, skipping fork() handlers") and the parent could deadlock.
Convert every studio handler that shells out to async def, route the subprocess through asyncio.create_subprocess_exec, and gate both the gRPC RPCs and the fork itself with a process-wide asyncio.Lock on app.state. Lock is held only across the fork instruction (not the full subprocess lifetime) so concurrency is preserved elsewhere.
The sync run_topology path is kept for the Typer CLI; only the studio server takes the new run_topology_async path.
-
studio: Sanitize subprocess errors and add timeouts
Async subprocess calls in the studio API leaked unstructured stderr, stdout, and exception strings into HTTP 500 responses (file paths, stack traces, command args) and had no timeout, so a wedged child could pin a server slot indefinitely. Add a 120s default timeout on run_subprocess_async (600s for the docker pull), kill the child and raise TimeoutExpired on overrun, decode with errors="replace", and log failures server-side. Studio handlers now map TimeoutExpired to HTTP 504 and return generic messages for unparseable stderr — the JSON-structured stderr contract from the topology CLI still forwards as 400.
Closes OPLANE_REQ-00064396.
Refactor
-
studio: Collapse sync topology runner into async wrapper
The fork-race fix introduced parallel sync and async paths through
run_in_container.py(spinner, container runner, top-level dispatcher). Drop the sync versions and route the Typer CLI throughasyncio.run(run_topology_async(..., timeout=None))so there is one implementation. Also trim the verbose lock comments at the studio call sites — the lock's docstring at its definition carries the rationale.
0.14.0 - 2026-05-18
Bug fixes
- Removed old "remotive tui" function
Features
-
mock-broker: In-process gRPC mock broker for TUI workflows
Replaces
search/mock_indexwith a real gRPC server implementing the Network/Restbus/System services. Synthesises namespaces, frames, and distribution streams so the TUI can be exercised end-to-end without a live broker.python -m remotivelabs.cli.mock_broker(orpoe mock-broker) to run it standalone.- Wired into the dev deps (
pytest-xdist,pytest-flakefinder,ipython) and excluded from the wheel viasource-exclude. pytestnow runs with-n autofor parallelism.
-
search: Lucene grammar + unified AST
The TUI gains Lucene query syntax.
name:foo OR -unit:degC, regex/RPM\d+/, ranges, and parens.REST and MCP keep their existing wire contract (
field:value,f1,f2:valuecomma-prefix multi- field,operator=or,substring=true) and we don't pass this to Lucene yet. We adapt a bit to the new things in the AST, this made searching for numbers work, e.g. cycle time as well as getting suggestions for senders/receivers. -
tui: Rebuild the broker explorer end-to-end
Reshapes
remotive broker --uion top of the existing signal browse / live values view:- New capabilities — restbus publish + plan modals, an in-app help
screen, a command palette, and Lucene-syntax search
(
name:foo OR -unit:degC, regex, ranges). - Restructured input — one search bar drives all navigation; marks let you pick signals across multiple queries and feed them into the live view, restbus modal, or publish modal.
- Restructured layout — sidebar, tree, detail, and live view are now independent widgets sharing a single App-owned broker connection, so reconnects, namespace activity, and subscription lifetimes are handled centrally instead of per pane.
- New capabilities — restbus publish + plan modals, an in-app help
screen, a command palette, and Lucene-syntax search
(
Refactor
-
search: Drive SQLite schema from Column dataclass
Adding a searchable/tokenized column is now one line in columns.py instead of edits across schema.py, index.py, and the FTS triggers. Drops the dead in-memory migration loop in the same swing.
0.12.0 - 2026-05-15
Bug fixes
-
Read instance files under two locations, one contains the hash(workspace) id
This is due to a bug in topology-cli that writes it under this location. Lets consider how and when we solve this. Related to cache dir etc due to bazel compatibility
Features
- Added grafana_enabled to runtime environment response
- Bumped to latest topology, topology schema and studio
0.11.4 - 2026-05-08
Bug fixes
-
topology: Force REMOTIVE_CACHE_DIR inside the bind-mounted workspace
The topology binary's recent cache work moved its on-disk cache from
<workspace>/.remotive/cacheto$HOME/.cache/remotive/<workspace-hash>. That works fine when the binary runs natively, but inside the docker container we spawn here$HOMEisn't bind-mounted to the host, so cache writes are discarded on container exit and every build is cold.Force
REMOTIVE_CACHE_DIR=<container_workspace>/.remotive/cacheexplicitly after the genericREMOTIVE_*forwarding loop so the in-container value wins (last-ewins per docker's semantics, even if a host-sideREMOTIVE_CACHE_DIRwas forwarded). The cache lands under the bind-mount and persists to the host, matching the pre-binary-change layout from a user's perspective.Transitional — once the topology binary is bundled directly with the CLI and no longer needs the container hop, this can be dropped.
Adds focused unit tests for
_build_run_command(none existed); they inspect the constructed argv without launching docker. -
Skip time-based JWT checks in feature authorize
Disable exp/nbf/iat verification in the feature-authorize JWT decode so users with skewed clocks aren't locked out. Signature remains the load-bearing security check.
Also joins a single sentence that was split across two list items in the FeatureNotAuthorizedError details.
-
Improve error messages on api/studio/v1/runtime/environment
Features
- Add new endpoint to return environemnt info about the topology runtime
Refactor
- release: Package release flows as remotive_release plugin
0.11.3 - 2026-05-04
Bug fixes
-
Open studio in browser in the same way as login
Verified to work on all platforms
-
Relabel podman bind mounts with :z for SELinux hosts
Without the :z suffix, the topology container cannot access the mounted config and workspace directories on SELinux-enforcing systems, surfacing as a missing-user-consent error.
This was reported by our friends at https://www.machineware.de/
0.11.2 - 2026-05-04
Bug fixes
- In studio file API, allow more file extenstions for video. images and text
- Properly fixed mount and interactive mode when running topology with podman
0.11.1 - 2026-05-04
Bug fixes
- Propagate all envs starting with REMOTIVE_ to docker/podman container running topology
0.11.0 - 2026-04-30
Features
- Using latest remotive-topology 0.23.0
0.10.18 - 2026-04-30
Bug fixes
- New remotive-studio with warning message if hw accelleration is not enabled, required for scichart
Features
-
broker: Add --ui flag for the signal explorer
- remotive broker --ui launches the interactive TUI explorer
- REMOTIVE_MOCK_DB enables mock index mode for offline demos
- Drop the EXPLORE_ENABLED-gated broker explore subcommand
-
grpc: Add payload_size to frame index data
- Expose frame payload size (bits to bytes) in gRPC frame-to-dict mapping
- Enables payload length validation in TUI publish flow
-
search: Add mock signal index for offline/demo mode
- New mock_index package generates a deterministic set of automotive CAN and SOME/IP frames matching the gRPC dict shape, so it can be passed straight into index_signals() without a live broker
- Faker-based provider with domain-aware signal naming
- Excluded from sdist/wheel — demo/dev-only
- Adds faker as a dev dependency
-
tui: Add mark/unmark for signals and frames
- Add ability to mark individual signals, frames, or entire namespaces with m keybinding, clear all marks with M
- Marked items shown with bold asterisk prefix in tree
- Marking a frame also marks all its child signals
- Marks feed into subscribe and publish actions
-
tui: Add signal and frame publish
- Add publish action (p keybinding) for single signal/frame or batch of marked items
- PublishSingleModal for entering a value, PublishValuesModal for batch
- Support hex payload publish for frames with size validation
- Add extract_signal_hints and _format_signal_hints for publish UI hints
-
tui: Add frame state subscription windows
- Add SubscriptionWindow with per-frame signal state display
- Subscribe to marked signals/frames or all signals in a frame
- Expandable signal history with adjustable depth (+/- keys)
- SignalLine widget with click-to-expand interaction
- Seed subscriptions with current cached values on start
-
tui: Mark all frames and signals within a namespace in one action
Press "m" on a namespace node to mark every child frame and signal beneath it (or on the root to toggle all namespaces at once). The namespace label gains a "*" marker whenever any descendant is marked, and clears when the last one is unmarked.
-
tui: Sidebar, unified live view, clickable filter fields, and debounced search
- Collapsible left sidebar with clickable handle (Ctrl+B)
- Unified LiveView widget for the right pane, internally switching between a single-signal chart and a multi-signal frame-state view; app-level "q" closes and cancels the active subscription
- Detail-panel fields become clickable: left-click appends an AND-include filter, right-click opens FilterActionModal with include/exclude and, for numeric fields, comparison operators (>, >=, <, <=) plus an OR-combine toggle
- Query.parse tokenizes with shlex so values containing whitespace or punctuation can be searched by wrapping them in double quotes; between a single-signal chart and a multi-signal frame-state view; app-level "q" closes and cancels the active subscription
- Detail-panel fields become clickable: left-click appends an AND-include filter, right-click opens FilterActionModal with include/exclude and, for numeric fields, comparison operators (>, >=, <, <=) plus an OR-combine toggle
- Query.parse tokenizes with shlex so values containing whitespace or punctuation can be searched by wrapping them in double quotes; detail-field clicks emit quoted terms automatically
- Debounce search input 150 ms and run queries on a worker thread so typing stays responsive on large indexes; preserve expanded frames across tree rebuilds
Refactor
-
tui: Extract modules, use typed dataclasses and BrokerClient
- Split monolithic explore_app.py into formatting.py (Row/FrameRow/SignalRow dataclasses, format_detail, build_tree_data) and widgets.py (DetailPanel, LeftPane)
- Replace raw dicts with typed dataclasses throughout
- Switch from internal Broker to remotivelabs.broker.BrokerClient with async Worker pattern for subscriptions
- Make parse_scalar public in broker/typer.py for reuse
- Replace bare except blocks with logger.debug for diagnosability
0.10.17 - 2026-04-27
Bug fixes
-
Add runtime_id to studio backend /environment endpoint
-
Make reindex_topology async to avoid grpc-aio event loop churn
Calling asyncio.run() per request created and tore down a fresh event loop each time, leaving grpc-aio completion queues dangling and causing recurring BlockingIOError [Errno 35] in PollerCompletionQueue. Awaiting _fetch_async directly on the running loop avoids the leak; index write is offloaded via asyncio.to_thread.
Features
- Add a very simple healthcheck with status and runtime_id for studio backend
0.10.16 - 2026-04-21
Bug fixes
-
Remove erroneous help=help in broker sub-app definitions
Four broker sub-apps passed Python's builtin
helpobject instead of a string to create_typer(help=...). This was masked by add_typer() always overriding the help text.
Features
-
Add LazyTyperGroup and use it across all command levels
Extend TyperGroup with lazy import support: sub-apps are registered as "module.path:attr" strings and only imported when get_command() is called. create_typer() and create_typer_sorted() accept a lazy_imports dict to enable this at any level of the command tree.
Replace eager sub-app imports with lazy_imports dicts at every level: root (6 sub-apps), broker (8), cloud (9), tools (1), topology (2), cloud/recordings (1), and cloud/service-accounts (1). Sub-app modules are now only imported when the user invokes that subcommand.
-
Add cached tab-completion fast path
Introduce a lightweight entry point (main.py) that intercepts tab-completion requests before importing the full CLI. On cache hit uses only json to serve completions from a cached command tree — adding near-zero overhead on top of interpreter startup.
Handles bash, zsh, and fish by inlining the env-var parsing and output formatting. The cache stores help text for both subcommands and options, so zsh and fish show descriptions.
The cache lives at ~/.cache/remotivelabs/cli/completion_cache.json. Invalidation keys off the package directory's mtime (bumped by every pip/uv install that replaces files inside) plus a format-version constant for deliberate schema bumps. Corrupt or stale files are unlinked on read so the next slow-path run starts clean.
On cache miss, main() regenerates the cache and falls through to Typer's native completion. Any failure during regeneration is swallowed so cache-tree bugs never block the user's actual command.
0.10.15 - 2026-04-17
Bug fixes
- Change behaviour of topology search api to return all results if q is empty
0.10.13 - 2026-04-14
Bug fixes
- Studio bug fix where trace raw data field show entire value
0.10.12 - 2026-04-14
Features
- Studio 1.16.12 with lots of improvements and bugfixes
0.10.11 - 2026-04-08
Bug fixes
- Using show instance instead of show platform for getting current instance
- Do not force user to be signed in to use studio
Features
-
Open browser default when starting studio
- Validating that user is signed-in with activated account and default organization
0.10.10 - 2026-04-07
Bug fixes
- Improved messages during signin
Features
-
Load current runtime instance.yaml file
This enables client to show what is currently running
0.10.9 - 2026-04-02
Bug fixes
-
On file read/write error we try to show a good informational message and a hint on what went wrong
This required move of all read/write operation so file_io.py. There is an issue with loading settings during import that we must solve for real moving forward, it will brake.
-
Studio 1.16.11 with some fixes related to signals indexing
0.10.7 - 2026-04-01
Features
- Updated to studio 1.16.10
0.10.6 - 2026-03-26
Bug fixes
- Improved readability of named-values and column resize in studio
0.10.5 - 2026-03-25
Bug fixes
-
Let archive entrypoint handle bazel runfiles
The updated shell entrypoint can now handle multiple run environments; a direct invocation, a bazel runfiles env and inside test_sh scripts.
-
Fields according to remotivedb, skipped camelcase support and some minor issues.
-
Invoking mode=status now properly takes filters and query into account when returning doc count
-
Fixed so status returns the same row count as search
Features
-
Beta.1 of studio with signal-database search
-
Package CLI as tar archive
Package CLI bundled with Python as a tar archive and publish it to release.remotivelabs.com. The main use-case is Bazel integration.
Also improve Makefile a bit, to better cache built artefacts.
-
First version of studion with signal-database viewer
0.10.2 - 2026-03-20
Bug fixes
-
Studio-1.16.3 - Fixed Frame distribution to see frame name, id as hex.
- Only one frame distribution panel can be added
0.10.1 - 2026-03-18
Bug fixes
- Moved signals explore to broker from topology
Features
-
broker: Add signals publish command
- Publish one or more signals to the broker in a single call
- Supports scalar and multi-value (comma-separated) inputs; signals of different lengths are zipped to the longest
-
broker: Add restbus subcommand
- New restbus subcommand with add, start, stop, update, remove, and reset commands to drive periodic frame transmission on a broker
- Register restbus in the broker app
-
Add is_studio attribute to TopologyContext & use it to set REMOTIVE_STUDIO flag in topology cli calls
-
Bumped studio to 1.16.2
Refactor
-
broker: Extract shared click param types for signal and frame specs
- Add SubscribableSignalType, SignalSpec/Type, FrameSpec/Type, and get_auth to typer.py
- Replace duplicated manual namespace:signal string splitting in export, scripting, and recordings_playback with the new shared types
0.10.0 - 2026-03-17
Bug fixes
-
Docker registry support via options
- Removed default docker.io for podman
- Added --container-registry
0.9.4 - 2026-03-16
Bug fixes
-
Removed frame_name and frame_description
-
Renamed bus_type to channel_type
- Code for more fields added but commented out due to unreleased remotivelabs-broker lib
-
Moved indexing of signal database to its own endpoint
Features
-
Openapi support
- Also fixed an indexing bug in the middle of the work
- Search docs updated with correct info on tokenization on dots (.)
-
Bumped to studio 1.16.1
0.9.3 - 2026-03-16
Bug fixes
- Added missing import
0.9.2 - 2026-03-16
Bug fixes
-
The old drectory was named typer, whch clashes with the third-party package that the project depends on.
This is to prevent issues in upcoming commits
-
Oplane req: Path Traversal Protection for YAML File Indexing Endpoints
-
Refactored to move search lib to separate lib, keep routes in studio
Features
-
Using sqlite inmemory and exposes a rest api for search, suggest and index grpc signals
-
Support for indexing and searching frames and signals from "remotive topology convert".
Exposed over rest, indexed in sqlite
-
List, search, see details and subscribe to signals interactively
-
Added docs for search api
-
Use remotive topology 0.21
0.9.1 - 2026-03-09
Bug fixes
- Convert all channels
0.9.0 - 2026-03-06
Bug fixes
- Removed RUNS_IN_DOCKER flag since that is not used anymore
Features
- Removed feature toggle on studio
0.8.5 - 2026-03-05
Bug fixes
- Xml is assumed to be Fibex signal database
- Spinner failed with rich.errors.LiveError: Only one live display may be active at once
Features
-
Allow auto assigned port with --port "auto"
The main goal if this is to use this feature from vscode extension to make it simple to use multiple workspaces at the same time.
0.8.4 - 2026-03-02
Features
- Fixed port 57123 + pre start check too see if studio or another process already is running
0.8.3 - 2026-02-27
Bug fixes
-
Added missing REMOTIVE_TOPOLOGY_WORKING_DIRECTORY in docker
-
Showing spinner when pull takes >= 2 seconds showing "Checking for updates..."
- Pull is only done every 30 minutes since even an empty pull may take a few seconds
Features
- Release with bundled studio-alpha.9
0.8.1 - 2026-02-26
Features
-
Add /versions endpoint to studio backend to expose cli, topology and broker versions
-
Release with bundled studio-alpha.8
First "real" release with studio bundled
0.7.4 - 2026-02-04
Features
-
Support for upload file
This simply overwrites if existing file exists.
-
Always show warning when running as root + show save path to config dir after signing.
This might not be perfect but its a good start to make things clear and easier to understand.
-
Added 'remotive topology subscription status | start-trial'
- Status should be used to get all info about the current subscription, which account and organization
0.7.2 - 2026-01-28
Bug fixes
-
Protopie connect crashes if --api-key is not provided when running without https
Refactored protopie bridge code completely
0.6.3 - 2026-01-21
Bug fixes
- Python webbrowser fails on wsl so prevent this on all linux systems.
0.6.2 - 2026-01-21
Bug fixes
-
Removed docker only check that prevented podman from working if docker was not installed.
- Fixed mount path and workdir in windows to work as when mounting an alias.
- Running with --rm so no dangling containers are left
-
Changed to more generic upgrade message and excluded pipx and docker
Features
- Changed response pages to look more professional and easier to read.
0.6.1 - 2026-01-20
Bug fixes
- Properly handle callback when user did not accept terms
0.5.0 - 2026-01-05
Bug fixes
- Apt/yum packages now properly supports install, upgrade, remove, purge(deb)
- Always include device_id in API calls if available
- Avoid caching http headers
- No longer automatically migrates old .remotive config
0.5.0-a4 - 2025-12-17
Features
- Initialize RemotiveTopology workspace
0.5.0-a3 - 2025-12-15
Features
- Separated rpm and deb build scripts
0.5.0-a2 - 2025-12-12
Bug fixes
- Use correct posix error codes
Features
- Support for building deb and rpm for amd64 and arm64 and push to artifact-registry
0.4.3 - 2025-12-09
Bug fixes
-
Exit playbackstatus stream with exit 0
-
Topology command is not supported in docker
-
Catch Exception when trying to open a webbrowser, at least on wsl an error is raised
Although we cannot know if the error is related its a good guess.
Also changed to print a hint instead of printing error.
Features
- Set topology workspace to current directory when running topology commands
Refactor
- Topology context to dataclass
- Optionally capture topology cli output
- Reuse topology typer defintions
- Reuse brokerUrl and apiKey option definition
0.5.0a1 - 2025-12-02
Features
- Support for specifying docker or podman when running topology cli commands.
0.5.0a0 - 2025-12-02
Features
- Support for invoking remotive-topology cli commands from remotive-cli
0.4.2 - 2025-12-01
Bug fixes
-
Removed asyncer dep to keep dependencies simpler and fewer
- Use asyncio.run() instead
- Removes asyncer, anyio and sniffio
0.4.1 - 2025-12-01
Bug fixes
- Broken dependencies fixed
0.4.0 - 2025-11-20
Documentation
- Corrected playback v2 docs
- Generated changleog
Features
-
Support both stream and oneoff when getting playback status
-
Replace poetry with uv and enable playback
Drop Python 3.9 support, but add validation for python 3.14.
Bump remotivelabs-broker to 0.11.0 to get playback functionality
Update CI and release pipelines. Release pipeline now tag git after a successful release, so no need to tag before release.
git-changelog is now handled as a poe task, see DEV.md
Add py.typed file
-
Playback v2 release, dropping old playback.
Breaking change for playback
0.3.6b1 - 2025-10-15
Features
-
Support for topology-playback open, play, pause, seek, repeat, list-files, close
Feature toggled in this commit
0.3.5 - 2025-09-24
Bug fixes
- Default broker url missing for frame-distribution cmd
- Align access token env var name to be same as in topology-cli
0.3.4 - 2025-08-28
Features
-
Improved topology start-trial to make it easier to understand what is happening
Include a confirm so that the user understands that its for an organization and include this in potential issues
0.3.3 - 2025-08-21
Bug fixes
- Fixed regression to suggest to activate if existing accounts exists
0.3.2 - 2025-08-20
Bug fixes
- Use soft wrap to avoid inserting newlines in output
0.3.1 - 2025-08-14
Bug fixes
- Subscribe did not work after bumping protobuf libs.
0.2.3 - 2025-08-01
Features
- Add platform info to user-agent and version
0.2.2 - 2025-07-31
Features
-
Check for new version on pypi and print hint on upgrade
Keep state in app-state.json to prevent checking and printing for each command.
0.2.1 - 2025-07-30
Bug fixes
- Changed format of user-agent to have / as separator instead of space
0.2.0 - 2025-07-29
Bug fixes
-
Print migration status to stderr instead of stdout
Prevents issues when also printing json and want to handle the result.
Features
-
Returning broker info json after mount
This will make scripting simpler since the broker info is available regardless if mounted on a personal or specific broker.
-
Topology start-trial from CLI
0.1.1 - 2025-06-25
Bug fixes
- Prompt user for default organization after login
0.1.0 - 2025-06-24
Bug fixes
-
Removed "remotive config"
Some tests moved to auth module
-
Do not prompt for organization when user specified which token to activate.
This is due to potential headless issue with this.
-
Only look for known file prefixes when loading tokens
-
Do prompt for orgs when using a service account
-
Validates valid json in token files when listing and filter out failing.
-
Improved login flow to either choose activate or login again.
- Also support for handling callback from cloud when user does not exists
-
Renamed organisation to organizations
Some minor fixes
-
Never prompt for organization when service account
-
Fixed bug where URLs printed to terminal did not work properly when spanning more than one line
-
Two personal tokens was created when browser could not be opened and fallback is with code
Features
-
Login and activate are now using personal-tokens automatically, no short-lived tokens are used.
This change is breaking and old versions will stop working with a 426 from the cloud to force update.
-
config.yaml contains each available account + the current active also contains default organization for each account
-
logout and "tokens create" are removed.
General improvements and fixes.
-
-
Support for REMOTIVE_CLOUD_ACCESS_TOKEN env variable
Also improved error message when 401
0.0.42 - 2025-04-28
Bug fixes
-
Fixed bug when listing organisation.
Using correct cloud rest endpoint.
0.0.41 - 2025-04-02
Bug fixes
- Play only enabled recording files when using mount and playback commands
0.0.40 - 2025-01-03
Features
- Added docker to release process
- When no argument is given show help
0.0.39 - 2024-12-20
Features
-
Add default argument for --url to localhost
Default --url to http://localhost:50051
0.0.38 - 2024-12-12
Features
- Added option to subscribe to changed values only for protopie in CLI
0.0.37 - 2024-12-11
Bug fixes
- None type error when not including --script or --signal
Features
- Added simple text based frame distribution output to cli
0.0.36 - 2024-12-10
Features
- Shows signaldatabase metadata for specified file
0.0.35 - 2024-12-09
Bug fixes
-
Addad python max version
-
Fixed proper error message when local file does not exist
-
Shortlived token file was stored as personal file and could not be overwritten.
Token received at login are not kept as original file, only as current active token.
Refactor
- Encapsulate all settings in one object
0.0.34 - 2024-12-05
Features
- Removed max version of python support
0.0.33 - 2024-12-04
Bug fixes
- Updated test to match changes to API
Features
- Added more metadata to signals list and also adding simple prefix and suffix filtering on signal names
Refactor
- Separate auth logic from typer commands
0.0.32 - 2024-10-31
Bug fixes
- Bug in upload signaldatabase where we did not expect and object
Features
- Add custom uri cli type
0.0.31 - 2024-10-01
Features
- Support for overwrite or not on Storage + added progress for upload
0.0.30 - 2024-09-26
Bug fixes
- Filter out non running or failed "uploads"
Features
- Support for new import as recording feature in cloud storage
0.0.29 - 2024-09-19
Bug fixes
-
Saving token to missing config dir
In some cases, if the cli config directory (~/.config/.remotive) is missing, the CLI fails to configure credentials. This fix is a start of encapsuling all configuration handling to the settings module. There is more work to be done though.
0.0.28 - 2024-09-13
Bug fixes
- Updated for new changes in storage api
0.0.27 - 2024-08-14
Bug fixes
- Force --directory to be a directory
- Change cloud auth tokens describe <file> instead of --file <file> to make it more proper
- Changed revoke to take name or file as argument instead of option
- Added docs for signal database commands
- Changed create and delete project to have project as argument instead of option
- Added separate organisations group with list command
- Make from/to project more clearer and removed usage of environment variable for project since this was not obvious
- Renamed download and delete broker config commands to make it clearer
Features
- Add senders, receivers and cycletime to frame under list signals
0.0.26 - 2024-07-26
Features
- Linting with mypy, pylint and ruff
0.0.25 - 2024-07-08
Features
- Support for ls,cp,rm against remotive cloud storage
0.0.24 - 2024-06-14
Bug fixes
- Removed accidental stdout
0.0.23 - 2024-06-14
Bug fixes
- Properly read protopie config file on --config
0.0.21 - 2024-05-22
Bug fixes
- Fix windows permission issue on playback
0.0.20 - 2024-05-15
Bug fixes
- Fixed subscribe issue with protopie connect
0.0.19 - 2024-04-24
Bug fixes
- Upload of signal database failed uploading files in other directory
0.0.18 - 2024-04-24
Bug fixes
- Improve lua scriting sample
0.0.17 - 2024-04-08
Features
- Support for licensing a broker with CLI
- Support for subscribing to signals from a recording without knowing url etc
0.0.16 - 2024-04-04
Bug fixes
- Fixed export to influx line protocol that was broken after subscription api changes
0.0.15 - 2024-03-25
Bug fixes
- Fixed bug where we did not properly check --show-progress option on play
Features
- Support keep repeating a recording by using --repeat
0.0.14 - 2024-03-22
Features
- Moving recording playback commands to "recording playback" sub-command
0.0.13 - 2024-03-21
Features
- Showing playback status of a recording beeing played
Refactor
- Updated release documentation to only create one commit
0.0.12 - 2024-03-18
Bug fixes
- Added default value "None" for protopie connect path
Features
- Added missing support for uploading signal database to project
0.0.11 - 2024-03-13
Bug fixes
-
Remove listen and print on messages
This was not intentional behaviour, only started to see this messages now for some reason.
0.0.10 - 2024-03-12
Features
- Support for timer frequency when generating LUA script
0.0.9 - 2024-03-12
Features
-
Improved protopie bridge to work with --signal ns:signal_name and not only --config
Simple expression to modify signal names is also supported
0.0.8 - 2024-02-28
Bug fixes
-
Consistently use REMOTIVE_CLOUD_RECORDING_SESSION envvar
-
Cleanup of progress indicators in recordings to make it easier to understand
Added test scenario for recordings for sanity tests
-
Update poetry.lock since it is out of sync with .toml
-
Made test_run_recordings executable
-
Fixed regression where do_GET had been renamed to do_get causing login callback to fail
Features
-
Replacing subscribe and new-script commands with long signal name including namespace in signal
--namespace is removed and replace by --signal ns:signal
0.0.7 - 2024-02-21
Features
- Introduced better progress when uploading recordings
0.0.6 - 2024-02-21
Bug fixes
-
Fixed bug that forced namespace and signal to be chosed although --script was used
Moving namespace and signal checks where its used
0.0.5 - 2024-02-16
Bug fixes
-
Fixed download recording file bug
-
Fixed create .remotivelabs directory if not exists
-
Removed print() that made jq fail
-
Some minor cleanup and renaming
-
Properly fixed upload and reload-configuration
-
Added protocol and port to result when listing brokers
-
Removing empty file that remains after download has failed
-
Fixed bug in upload()
-
Fixed wrong instructions when activating token
-
Removed unused imports
-
Renamed timestamp_nanos to timestamp_us + some improved error handling
-
Removed unused broker instance
-
Checking both None and empty string for api-key
-
Skipping plotting non numeric values
-
Minor fixes after review
-
Validated that we get 200 when uploading to signed url
Also verifying that the file we want to upload exists
-
Using typer native support for Path arguments/options for validating file
-
Removed misplaced print()
-
Subscribing to multiple namespaces now works as expected
Validating requested signals with signals in broker.
-
Minor improvement with custom type for subsribable signal
-
Fixed bug where an extra line had slipped in preventing keys from beeing properly created
-
Minor fixes after review
-
Bugfix when starting personal broker + checking that recording exists on mount
-
Removed python-can + tools for now
-
Removed module tools to prevent import of can
-
Properly checking errorMessage for all playback commands
Refactored into a single function
-
Added support for reading auth token from disk with protopie
-
Added description to protopie config option
-
Minor improvements of protopie terminal messages
-
Fixed bug where pkg_resource is not working in python 3.12
-
Verify that at least one namespace and signal is used when subscribing
-
Validate that specified namespaces exists (#29)
-
Properly check the status of the recording on the broker before attempting to play
-
Separating progress since other output was swallowed by running progress instances
-
Fixed bug where candumps could not be uploaded
Features
-
Support for login with webbrowser
-
Support for personal access keys
-
Support for deleting projects
-
Support for listing user organisations
-
Support for list, download and delete signal database
-
Support for broker logs history and tail
-
Added support for download of file from broker
-
Added support for uploading custom configurations to cloud
-
Added broker lifecycle start/stop/pause, refresh-config, upload/download/delete, record/stop-record
-
Added --all-namespaces when doing diagnose
-
Support for running with docker added
-
Added seek with target seconds into recording
-
Added support for activating a token directly on creation
-
Support for exporting signal values as influx line protocol
-
Added first version of new-script
-
Working on mulitple plots, one for each signal
-
Support for tui exploration app with based on trogon
-
Support for uploading raw candump
-
Support for sample recordings (import, list) + copy recording to project
-
Support for converting between different Can formats
-
Start, Stop, Pause, Seek works with cloud brokers by only using recording_session-id
It also supports personal brokers.
-
Support for acting as a ProtoPie connect bridge
-
Cantools for converting between log, asc, blf