Add an opt-in display-row mode with matching gutter backgrounds and stable colors through scrolling and history eviction. Preserve existing behavior by defaulting the new local setting to false, and update translations, documentation, and regression tests.
- Updated `Cargo.toml` to reflect new versions for `ironrdp-cliprdr`, `ironrdp-pdu`, and `ironrdp-svc`, ensuring compatibility with recent changes.
- Implemented a test to verify that the clipboard backend supports file capabilities across all legacy clipboard modes.
- Normalized clipboard settings to always enable text and file redirection, improving user experience and consistency across sessions.
- Adjusted related documentation to clarify the new clipboard behavior and its implications for users.
The built-in Dracula used purple-tinted surfaces (#251b33) instead of the
official Dracula Classic ones. Switch it to the specification's surfaces
(#282a36, #21222c, #343746, #44475a) and add Dracula Light from the official
Alucard Classic palette (cream background).
Both themes now take the bundled JSON as their single color source through
palette_from_theme, like the WindTerm themes, so the hard-coded Dracula
palette is removed. The theme id and every color the existing tests pin
(primary, hover, on-primary, focus ring, link, accent) are unchanged, so
saved settings keep working.
The light theme keeps ANSI black dark so black text stays visible on the
light background, unlike the specification's inverted mapping.
- Introduced an `orchestrate` job to determine which CI jobs to run based on changed paths in pull requests.
- Updated Rust workflow to conditionally execute jobs like linting, testing, and plugin SDK based on the selection logic.
- Added a new script `select_rust_jobs.py` to handle job selection logic without requiring a Rust installation.
- Enhanced documentation to explain the new CI execution model and its implications for contributors.
- Added support for registering and unregistering URL protocols on Windows, allowing external applications to invoke NyaTerm.
- Introduced a new module for managing URL protocol registration, including functions for creating, setting, and deleting registry keys.
- Updated the main application logic to handle incoming protocol requests and execute corresponding actions.
- Enhanced the activation request parsing to accommodate new connection types and behaviors.
- Added tests to validate the URL protocol registration and handling functionality.
This update significantly improves the integration of NyaTerm with external applications, enhancing user experience and connectivity options.
- Added new modules for cloud synchronization, including `sync_schema`, `encryption`, and `ai`.
- Implemented encryption for credential values to enhance security.
- Introduced AI configuration policies and structures for managing AI-related data.
- Enhanced `CloudSyncRemote` trait with methods for writing and listing sync files.
- Updated `Cargo.toml` and `Cargo.lock` to include new dependencies and workspace members.
- Added tests for new functionalities to ensure reliability and correctness.
Source-build packagers (nixpkgs and similar) can declare that they own the
update channel by setting `NYATERM_PACKAGE_MANAGER` at build time. The value is
baked into the binary through `option_env!` in `nyaterm_core::packaging`; with
the variable unset, an ordinary build keeps the in-app updater exactly as it is
today. rustc records the variable in its dep-info, so Cargo rebuilds on change
and no build script is needed.
When the variable is set the application:
- skips the startup silent update check;
- hides the in-app update entry in the title-bar Help menu and the tray;
- reports the package manager name in the About dialog support information.
This restores, for the Cargo/GPUI workspace, the capability the 2.0 rewrite
dropped from the Tauri-era implementation (#826).
The update policy is an explicit argument to the Help menu and tray snapshot
builders, so a single build's tests cover both the ordinary and the externally
managed menu instead of only the one selected by the environment.
Verified on Linux:
- `cargo fmt --all -- --check`
- `cargo clippy -p nyaterm-desktop --all-targets` (no findings in the changed
files; the workspace-wide `-D warnings` failures are pre-existing lints from a
newer toolchain in untouched files)
- `cargo test -p nyaterm-core --lib`
- targeted `nyaterm-desktop` tests for the Help menu, tray structure and i18n
catalog parity, run both with and without `NYATERM_PACKAGE_MANAGER=nix`
No persistence, credential, backup or cloud-sync format changes.
- Introduced `CloudSyncCheckCache` for efficient management of synchronization state and conflict resolution.
- Added methods for caching validated snapshots and handling cloud sync conflicts.
- Enhanced the `check_snapshot_with_remote_cached` function to utilize the cache for improved performance.
- Implemented metadata caching to optimize read operations and reduce unnecessary remote calls.
- Updated tests to validate the new caching behavior and ensure correct conflict handling.
- Added the `httpdate` package as a dependency for improved date handling in HTTP requests.
- Introduced new modules for conflict resolution in cloud synchronization, including detailed conflict previews and resolution requests.
- Enhanced error handling in cloud sync operations to classify and manage various error types effectively.
- Updated the portable snapshot structure to include device names for better identification during sync operations.
- Improved debug output to redact sensitive information in HTTP requests and responses.
- Added localization strings for new sync features in English, French, and Japanese.
- Introduced a new `heads` module to manage device heads and their synchronization states, improving cloud sync reliability.
- Added functionality to handle concurrent snapshot publications, ensuring both branches are retained until explicitly resolved.
- Enhanced the `CloudLocalStore` trait with `apply_sync_snapshot_checked` to validate content before applying snapshots, preventing conflicts.
- Updated the `CloudSyncState` and `RemoteSyncPointer` structures to include synchronization clocks, enabling better tracking of snapshot revisions.
- Implemented tests for concurrent head management and regression scenarios, ensuring robust handling of cloud sync operations.
Merge migration/gpui at 2a27ce375 and retain its is_session rule in the shared input guard. Cover file manager tabs with actual TCP regression tests and document that cancellation leaves already sent text in the remote terminal.
- Introduced two new built-in themes: WindTerm Dark and WindTerm Light, based on WindTerm's dige-black and dige-white palettes, respectively.
- Updated the themes' color configurations to adapt to NyaTerm's UI and terminal settings.
- Enhanced theme management tests to ensure proper functionality and validation of the new themes.
- Updated documentation to include details about the new themes and their usage.
Validated with comprehensive tests and documentation updates to ensure consistency and accuracy in theme representation.
Remove the legacy macOS IME setting, runtime gates, and related UI text.
Always register native terminal input and render IME preedit. Preserve
the legacy configuration field and its stored value for compatibility.
Validation on Windows: 38 filtered desktop tests and the legacy settings
round-trip test passed. Workspace check, Clippy, and formatting passed
in an isolated worktree containing only this change. Full tests in the
main worktree were blocked by unrelated file-manager changes.
Manual Windows Shift input-method switching remains unverified.
Quick command scripts now interpret \r, \n, \t and \\ when they are
sent, and \p pauses for one second before sending whatever follows it.
Unknown escape sequences (for example \d, or Windows paths such as
C:/Users/...) are passed through unchanged, and the storage format is
untouched since the escapes are only expanded at send time.
Staging only kicks in when a pause is present: a script without \p keeps
using the existing single-write path byte for byte. A multi-chunk script
locks its target sessions at click time (the active session plus synced
input peers, or every live session for "send to all") and writes each
chunk from a spawned task, so moving focus during a pause cannot retarget
the remaining chunks. A chunk that fails for one session leaves the other
sessions untouched.
The quick command editor now shows the escape rules under the script box
and the guide gains a matching section in both locales.
Refs #887
- Introduced `PasswordUpdate` enum to manage password operations (Keep, Replace, Remove) explicitly.
- Added new localization strings for password management in English, French, Japanese, Korean, Simplified Chinese, and Traditional Chinese.
- Updated connection editor logic to validate account and password states, ensuring better user feedback during password changes.
- Enhanced tests to cover new password update scenarios and localization validations.
Validated on Windows with workspace checks, tests, formatting, and all-target clippy.
- Added a new `management.rs` module for theme management, including structures for `ThemeSettings`, `ThemeMutation`, and `ThemeCommit`.
- Implemented functionality to apply, save, and delete themes, allowing for granular control over UI and terminal themes.
- Enhanced the `ThemeDesignerState` to manage theme drafts and user interactions more effectively.
- Updated tests to validate theme application and mutation behaviors, ensuring correct functionality across different scenarios.
Validated on Windows with workspace checks, tests, formatting, and all-target clippy.
- Introduced a new `themes` module to manage custom themes, including a `ThemeCatalog` for storing and validating themes.
- Added support for CSS color parsing with the `csscolorparser` dependency, enabling advanced color handling in themes.
- Implemented a theme designer interface for users to create, edit, and manage custom themes, with options to import and export themes in JSON format.
- Enhanced the UI to reflect theme changes immediately, ensuring a seamless user experience when switching themes.
- Updated localization files to include new strings related to theme management features in multiple languages.
- Added tests to verify theme validation, import/export functionality, and color parsing accuracy.
- Added functionality to reorder tabs when moved after another tab, improving user experience in tab organization.
- Updated menu item states to disable certain actions based on session conditions, ensuring better user feedback.
- Refactored the rendering of open tabs menu to support group-specific tab management, enhancing usability in multi-session environments.
- Introduced tests for workspace group functionalities, ensuring robust behavior during tab interactions and layout adjustments.
- Moved agent tool definitions and schemas into a new harness module, improving organization and maintainability.
- Updated agent tool functions to utilize a shared registry for tool schemas, enhancing flexibility and reducing redundancy.
- Introduced new fields in the AiRequestOptions and AiToolCall structs to support ephemeral context and thought signatures, improving the tracking of agent actions.
- Enhanced the handling of tool calls in various AI provider request bodies, ensuring better integration with the new context management features.
- Improved risk assessment logic to incorporate new agent approval decisions, streamlining command execution policies.
- Replaced all instances of `gpui-component` with `gpui-kit` across various files to reflect the new naming convention.
- Updated Cargo.toml and documentation to ensure consistency in dependency management and integration boundaries.
- Adjusted comments and code references to align with the new structure, enhancing clarity and maintainability.
- Updated the `CONTRIBUTING.md` to include additional test commands for release asset verification and package metadata generation.
- Revised `README.md` and `README.zh-CN.md` to clarify the installation process for Windows portable editions and added details on migrating from Tauri to GPUI.
- Introduced new workflows for publishing to AUR, Gitee, and Homebrew, ensuring streamlined release processes across platforms.
- Added a new `actionlint.yaml` for workflow syntax validation, improving CI/CD reliability.
- Enhanced documentation to reflect changes in artifact versioning and release management, ensuring clarity for contributors and users.
The layout guide claimed NyaTerm remembers child-window position, size and modal
relationships. The Tauri implementation did, through a `stateKey` and
`load_child_window_state`; the GPUI port dropped it and this change does not add
it back, so the guide now says what actually happens: where a child window opens,
which ones block the main window and why, which one stays on top, and the
keyboard. Both languages.
`WindowRuntimeStore` was deleted in 15994ef6 along with the global runtime tick
it drove, but `AGENTS.md`, both architecture pages and the `entities` module doc
still listed it as one of the Entity stores.
The root .gitignore carried a bare `data/` rule in the Rust/native app
block, intended for the application's runtime data directory at the
repository root. Without a leading slash the pattern matches at any
depth, so it also swallowed docs-site/src/data/, and changelogData.ts
was never committed. The docs site built locally and failed in CI with
"Can't resolve '../data/changelogData'".
Anchor the rule to /data/ so it keeps its intended meaning without
reaching into subdirectories, and track the changelog data. The file is
hand-authored source with no generator.
Tested: pnpm --dir docs-site build (zh-CN and en locales) on Linux.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Documentation site job failed on its first run. `pnpm/action-setup` with
`version: 11` resolved to pnpm 11.22.0, which imports `node:sqlite` and so
needs Node.js >= 22.13, but the job pinned Node 20 and crashed with
ERR_UNKNOWN_BUILTIN_MODULE before installing anything. It passed locally only
because this machine runs Node 26.
- Move the job to Node 22. Node 20 reached end of life in April 2026, so
raising the floor was due regardless of pnpm.
- Pin pnpm to 11.15.1, the version that produced the lockfile, instead of the
floating 11 range. A range means the next 11.x release can move the Node
floor again without any change in this repository, which is exactly what
happened here.
- Add `packageManager` to docs-site/package.json so a local pnpm cannot
silently diverge from CI, and correct the setup guide, which told
contributors Node 18+ was enough and would have walked them into the same
crash.
Verified by reproducing the CI environment locally: a clean
`pnpm --dir docs-site install --frozen-lockfile` plus
`pnpm --dir docs-site build` and the parity script, all under Node 22.23.2 with
pnpm 11.15.1, and re-checked on the Node 26 toolchain used for local work.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The docs site was not in any CI path filter, so nothing built it and nothing
compared the two locales. That is how the English pages drifted several
sections behind Chinese and how seven internal screenshot-planning notes stayed
published.
- Add scripts/ci/check_docs_translations.py, covering what a Docusaurus build
does not: a page existing in only one locale, a heading-count mismatch
between the two copies, a page no sidebar references, and authoring
leftovers (screenshot-planning notes, /img/docs/ paths, scripts/demo-*.sh
references, stray TODO markers). Verified it fails on each of those by
reintroducing them.
- Add a Documentation site job that runs the script and then builds every
locale, and add docs-site/** to the workflow path filters.
- Fix docs-site/pnpm-workspace.yaml, whose allowBuilds entries still held the
placeholder text "set this to true or false". That made every `pnpm install`
in the site fail with ERR_PNPM_IGNORED_BUILDS, which means the
`pnpm --dir docs-site build` command our own contributing guide tells people
to run did not work. Deny the four build scripts explicitly; none is needed
to build the site.
- Correct the homepage, which still advertised only SSH, local shell, Telnet,
and serial: the workspace card, the docs card, and the page description now
name RDP, VNC, and the AI assistant. The three retargeted translate() keys
are updated in i18n/en/code.json so English does not fall back to Chinese.
- Document the new script in the setup and contributing guides, replacing the
note that said no translation-completeness check exists.
Verified with `python3 scripts/ci/check_docs_translations.py`,
`pnpm --dir docs-site install --frozen-lockfile`, and
`pnpm --dir docs-site build`, and by confirming the new homepage strings render
in both locales.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The migrated prose leaned on a small set of constructions and repeated them
until they stopped carrying information. Across ~3.7k lines the source had 78
uses of "适合", 63 of "如果你", and 34 contrastive "而不是" clauses, most of
them attached to bullet lists that restated the feature name.
What changed:
- Replaced the "适合场景 / 适合:" tail hanging off nearly every section with
either a plain sentence or nothing. "适合" is now 0, "如果你" is 0, and the
18 remaining "而不是" clauses each rule out an assumption a reader would
actually make (a rejected password is not truncated; a font name is not a
bundled file; a decoder panic must not exit silently).
- Removed the closing editorial lines that asserted significance without adding
information ("这也是 NyaTerm 和普通多标签终端差异较大的地方"), and the
meta-commentary where the docs explained their own conventions.
- Dropped the relative time anchors that were already going stale: "新的 SFTP
后端", "较新的工作区", "现在可以", "Newer Agent workflows".
- Deleted the "如果你准备录制文档素材" passage, which told the reader how to
stage screenshots for the docs rather than how to use the recorder.
- Removed seven `:::tip Screenshot suggestion` blocks that shipped only in the
English pages. They were internal authoring notes and pointed at a
/img/docs/ tree and scripts/demo-*.sh files that do not exist in this repo.
- Dropped "推荐的工作流组合", four permutations of features documented
elsewhere, and gave the synchronized input group one home instead of the
three partial copies it had across two pages.
- Rewrote the cloud-sync conflict choices to lead with what is lost, since
"适合:你确认云端版本才是应该保留的版本" buried the fact that local
unsynced changes are discarded.
Also closes the remaining English gaps found while doing this: selection and
bulk operations, content-fingerprint upload, two FAQ entries, and two
quick-start steps existed only in Chinese. Chinese and English now carry the
same heading count on every page.
Verified with `pnpm --dir docs-site build` (both locales) and by re-resolving
all 22 cross-page anchors against the generated heading ids.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The page layout still reflected the Tauri-era docs, where RDP and VNC were a
table row and terminal.md absorbed whatever did not have a home.
Sidebar:
- Drop sidebar_position from all 46 pages. sidebars.ts enumerates every entry
explicitly, so the values never affected ordering, and four of them collided
(guide had two 2s, three 5s, two 6s, two 8s) while implying an order that did
not match the real one.
- Reorder the guide by workflow: session types, per-protocol configuration,
workspace, terminal, monitoring, files, commands, AI, network, auth,
security, appearance, sync, shortcuts.
New pages:
- guide/rdp.md and guide/vnc.md. RDP and VNC are two of the six session types
and had no page of their own. Both document the real config fields, the
validation ranges, the certificate/security policies, and the error kinds,
and both note the helper-process requirement.
- guide/remote-monitoring.md, extracted from terminal.md, covering all five
panels.
Deduplication:
- terminal.md drops from 345 to 253 lines. Its AI, provider, translation, and
risk-tier sections restated ai-assistant.md and translation.md; they are now
the terminal-specific entry points plus a link. The risk tier table moves to
ai-assistant.md, which owns the setting that gates it.
- session-types.md keeps the comparison table and links out for RDP/VNC detail
instead of carrying a second copy of it.
- The migration format list appeared verbatim in four pages. ssh-connection.md
is now the single source; installation.md, quick-start.md, and faq.md link to
it.
- installation.md drops from 112 to 63 lines: its workspace tour, settings
checklist, and "suggested first run" were quick-start.md again.
Verified with `pnpm --dir docs-site build` (both locales) and by resolving
every cross-page anchor against the generated heading ids, since
onBrokenAnchors is set to ignore.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The docs-site pages were migrated from the Tauri build and patched for GPUI
keywords, which left a set of statements that contradict the current code.
Verified each against the implementation and fixed:
- Process Manager and Docker Manager are on by default, not off
(ui_show_process_manager / ui_show_docker_manager default to true).
- There are five SSH monitoring panels, not four. Ascend NPU monitoring was
undocumented; add it and record every panel's real default and interval.
- The AI risk table misfiled its own examples. Bare chmod/chown are medium and
only -R raises them to high; critical is mkfs/wipefs/dd-to-device/fork
bomb/shutdown/rm -rf /. Also replace the invented "level to behavior" mapping
with the real model: effective risk is max(model, local rules), gated by the
three command execution policies and the smart auto-execute ceiling.
- The Command Palette does not contain application actions. QuickSwitchItem
only carries sessions, pending sessions, and saved connections, and the
"session quick switcher" is that same overlay, not a second feature.
- JetBrains Mono / Noto Sans SC Variable / Inter are default font *names*
resolved from system fonts, not bundled files. Nothing under assets/ or
gpui-component's asset crate embeds a font.
- There are two high-contrast themes (Nya HC, Nya HC White).
- Shortcuts are configurable today via Settings -> Keybindings; regroup the
page to match the six in-app categories, add Shift+Insert, and correct
Ctrl+Shift+P, which opens the bottom quick commands panel.
- setup.md omitted that the RDP/VNC helpers must be built or both protocols
fail with HelperMissing, and called the patched dependencies "vendored" when
they are pinned fork revisions. Document the fork/patch workflow.
- architecture.md was missing nyaterm-remote-desktop and both helper crates,
along with the helper-process isolation boundary they exist for.
- Document Vulkan/X11-or-Wayland as a Linux runtime requirement.
- Add the undocumented settings: minimum contrast (WCAG steps), low latency
mode, zebra stripes, multi-line paste review, OSC 52 clipboard writes,
Option-as-Meta, and the scrollback/keep-alive ranges.
Also fills the English mirror gaps this touched: command risk assessment,
command cards, and provider/model sections were absent from the English
terminal page entirely.
Verified with `pnpm --dir docs-site build` (both locales) and by checking the
generated heading anchors the new cross-links point at.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Updated quick start guide to include new session types: RDP and VNC.
- Added support for trzsz file transfer protocol in file transfer documentation.
- Corrected keyboard shortcuts for clearing the screen and tab navigation.
- Improved security documentation regarding known hosts and credential management.
- Enhanced sync and backup documentation with details on GitHub Gist and cloud storage integration.
- Clarified terminal features and output handling in the terminal guide.
- Expanded introduction to include new session types and migration options.
- Added a new pnpm workspace configuration file for build settings.
- Updated changelog to reflect historical context of project evolution.
- Updated backend documentation to clarify crate boundaries and session management.
- Revised frontend documentation to enhance clarity on GPUI desktop development and state management.
- Improved contributing guidelines with clearer workflow and commit conventions.
- Enhanced development setup instructions for better clarity on prerequisites and platform-specific dependencies.
- Updated installation and terminal feature documentation for accuracy and completeness.
- Deleted `check-icon-references.sh` script which verified icon references in the UI.
- Removed `icons.manifest` file that served as a vendor manifest for bundled icon assets.
- Eliminated `package-windows.ps1` script used for packaging the Windows application.
- Removed `sync-icons.sh` script responsible for syncing icon assets from upstream sources.
- Added new entries in CHANGELOG.md for version 1.1.12, detailing enhancements to jump host configuration and cycle prevention.
- Updated README.md and its Chinese counterpart to include new AI Assistant features, such as command generation, error analysis, and multi-step workflows.
- Enhanced documentation for terminal features, file transfer capabilities, and user settings to reflect recent changes and improvements.
- Introduced a new guide for the AI Assistant, detailing its working modes, command cards, and risk control mechanisms.
- Eliminated the ligatures customization option from the appearance settings in both the UI and backend.
- Updated documentation to reflect the removal of ligatures from the terminal and themes sections.
- Replaced local image paths with direct URLs for WeChat and Alipay sponsorship QR codes in both Chinese and English documentation.
- Enhanced the visual presentation of sponsorship options by wrapping images in paragraph tags for better formatting.
- Replaced HTML image tags with Markdown syntax for WeChat and Alipay sponsorship QR codes in both Chinese and English documentation.
- Improved consistency in documentation formatting across different languages.
- Introduced a new "Sponsor" section in both English and Chinese README files to encourage community support for NyaTerm.
- Created dedicated sponsorship documentation with payment options and alternative support methods.
- Updated sidebars to include the new sponsorship page for better visibility.
- Added payment QR codes for WeChat and Alipay to facilitate contributions.
- Included steps to set the GitHub OAuth App device flow Client ID for local builds using GitHub Gist.
- Provided examples for both bash and Windows PowerShell environments to facilitate user setup.