CLI tool
pop-os/cosmic-term avatar
pop-os/cosmic-term

cosmic-term: GPU-Accelerated Terminal Emulator for the COSMIC Desktop

COSMIC terminal emulator. cosmic-term provides bidirectional rendering and ligatures with a custom renderer based on cosmic-text.

595 stars207 forksRustGPL-3.0

At a glance

What is it?
cosmic-term is the official terminal emulator for System76's COSMIC desktop environment. It pairs the alacritty_terminal backend with a custom GPU renderer built on cosmic-text, delivering bidirectional text rendering and font ligatures. The application is written in Rust and targets Wayland on Linux.
Who is it for?
cosmic-term is the right choice for users building on the COSMIC desktop who want first-party integration and bidirectional text support. Developers who need a stable terminal for general Linux use outside of COSMIC should compare it against other options, noting that cosmic-term requires Rust 1.93 or later and pulls in the libcosmic and cosmic-text stacks as git dependencies rather than stable crate releases.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What cosmic-term Is and Who It Is For

cosmic-term is the terminal emulator component of System76's COSMIC desktop environment. It is authored by Jeremy Soller, System76's principal engineer, and released under the GPL-3.0-only licence. The project is written in Rust and uses version 1.93 as its minimum supported Rust version.

The terminal is built for users of the COSMIC desktop on Linux, particularly on System76 hardware and on distributions that ship the COSMIC desktop. It is not designed as a drop-in replacement for standalone terminals on other desktop environments, though it will compile and run on any system that satisfies the dependency chain.

The distinguishing features are bidirectional text rendering and font ligatures, both handled by the cosmic-text library that System76 develops alongside COSMIC. Most popular terminal emulators handle only left-to-right text. cosmic-term can render scripts that run right to left, which makes it the correct choice for users who work in Arabic, Hebrew, or other bidirectional scripts within the COSMIC environment.

The Rendering Stack: alacritty_terminal, cosmic-text, wgpu, and Fallbacks

cosmic-term assembles three separate rendering components. The terminal state machine and escape sequence handling come from alacritty_terminal at version 0.25.1. This is the same library that the Alacritty terminal emulator uses, so cosmic-term inherits that well-tested core rather than reimplementing VT semantics.

Text shaping, bidirectional reordering, and ligature handling come from cosmic-text at version 0.19. cosmic-text is a System76-developed crate that implements the Unicode Bidirectional Algorithm and font shaping on top of the icu and related libraries. This is what separates cosmic-term from terminals that use simpler text rendering pipelines.

The wgpu feature, enabled by default, sends rendered glyphs to the GPU through glyphon and wgpu. wgpu is a cross-platform graphics abstraction that can use Vulkan, Metal, DirectX, or WebGPU as the backend. On a machine where wgpu fails to initialise, the code falls back to softbuffer and tiny-skia, which perform software rendering entirely on the CPU. That fallback is automatic and requires no configuration change. Machines without working GPU drivers or without Vulkan support will use software rendering transparently.

The password_manager feature, also enabled by default, adds integration with the system secret store through the secret-service crate. This allows storing credentials that automation scripts can retrieve via the terminal session.

Building and Installing from Source

cosmic-term uses just as its build tool. The justfile documents the standard development and release targets. A release build requires Rust 1.93 or later and the system libraries that libcosmic depends on. The build sequence for a release binary is:

bash
just build-release

This calls cargo build with the --release flag. The resulting binary is placed in the target/release/ directory. To install the binary together with the .desktop entry and icon files to the system prefix, run:

bash
just install

The install target writes the binary to /usr/bin/cosmic-term and places desktop and metainfo files in the corresponding share/ directories. The app identifier used throughout the installation is com.system76.CosmicTerm.

During development, running the terminal with verbose logging enabled is useful for diagnosing renderer issues:

bash
env RUST_LOG=cosmic_term=debug RUST_BACKTRACE=full cargo run --release

This sets the log level to debug for the cosmic_term crate specifically and enables full Rust backtraces on panics. The justfile also defines a check target that runs clippy with pedantic warnings, which the project uses to maintain code quality.

The project pulls libcosmic and cosmic-files from their git repositories rather than published crate versions, which means a build requires network access to fetch those git dependencies at compile time.

Customising Colour Schemes

cosmic-term supports custom colour scheme imports through the graphical interface. The menu path is View, then Color schemes. Users select a file in the format cosmic-term expects, and the terminal applies it immediately.

The repository includes a color-schemes/ directory containing templates. Those templates define the expected file format and provide starting points for custom themes. The README does not document the colour scheme file format in detail, but the templates in the repository show the structure that cosmic-term accepts.

Dracula and other third-party colour schemes are searched for by users in the related searches data. The color-schemes/ directory in the repository provides a compatible format for creating those themes, but the repository does not ship Dracula or similar themes directly. Users who want a specific theme need to convert it using the template format.

Configuration beyond colour schemes, such as font selection and key bindings, is managed through dbus-config integration, which is enabled by default in the feature flags. This means cosmic-term reads and writes its configuration through the D-Bus session bus rather than through a plain text configuration file, consistent with how other COSMIC applications manage settings.

Internationalisation and Multi-Language Support

Internationalisation in cosmic-term is handled by i18n-embed and i18n-embed-fl, which implement Fluent-based localisation. The i18n.toml file at the repository root configures the localisation system, and translation files live in the i18n/ directory.

The Fluent format allows translators to work on each language independently without modifying the application source code. Adding a new language means adding a new translation directory under i18n/ following the pattern established by existing translations.

The icu crate at version 2.1.1 is listed as a dependency with the compiled_data feature. This provides Unicode International Components for Unicode support, which underlies the bidirectional text rendering in cosmic-text. The combination of ICU data, Fluent localisation, and the Unicode Bidirectional Algorithm in cosmic-text means the terminal handles both the display of bidirectional text and the localisation of the application interface separately. An Arabic speaker, for example, would see the terminal chrome in their language if a translation is available, and would see bidirectional text rendered correctly regardless of translation status.

Limitations and Cases Where cosmic-term Is Not the Right Choice

The most significant practical limitation is the dependency on the COSMIC ecosystem. The libcosmic dependency is pulled directly from the System76 GitHub repository as a git dependency, not from a published crate on crates.io. cosmic-files follows the same pattern. This means building cosmic-term requires fetching from System76's repositories at compile time and ties the project to whatever git revision those dependencies point to. There is no stable release of libcosmic published to crates.io at the time the Cargo.toml was last updated.

The GPL-3.0-only licence is a constraint for commercial or proprietary applications. Any software that links against cosmic-term would need to comply with GPL-3.0. For users running it as an end-user application this is not an issue, but for developers who want to embed terminal functionality in a proprietary product, this licence is incompatible.

The project has no published GitHub releases. All development happens on the master branch. Teams that want reproducible builds should pin to specific git commits rather than tracking the tip of the branch.

For users outside the COSMIC desktop who want a high-performance GPU-accelerated terminal, Alacritty is the natural comparison point. Alacritty uses the same alacritty_terminal state machine but has a much simpler dependency tree and is not tied to any particular desktop environment. WezTerm and foot are other alternatives that trade different sets of features. cosmic-term's advantage over all of them is the first-party bidirectional rendering via cosmic-text.

Editorial conclusion

cosmic-term is the right choice for users building on the COSMIC desktop who want first-party integration and bidirectional text support. Developers who need a stable terminal for general Linux use outside of COSMIC should compare it against other options, noting that cosmic-term requires Rust 1.93 or later and pulls in the libcosmic and cosmic-text stacks as git dependencies rather than stable crate releases. The GPU renderer defaults to wgpu but falls back to softbuffer and tiny-skia if wgpu cannot initialise, so machines without functional Vulkan or GPU drivers will fall back to software rendering automatically.

Frequently asked questions

What colour scheme formats does cosmic-term support?

cosmic-term imports custom colour schemes from the View menu under Color schemes. The repository includes template files in the color-schemes/ directory that show the expected file format. The README does not document a specific third-party format name.

Does cosmic-term fall back to software rendering if the GPU is unavailable?

Yes. The wgpu feature is enabled by default and uses the GPU through glyphon and wgpu. If wgpu fails to initialise, cosmic-term falls back automatically to softbuffer and tiny-skia for CPU-based software rendering, with no configuration change required.

What Rust version does cosmic-term require?

cosmic-term requires Rust 1.93 or later, as specified in the rust-version field of Cargo.toml. The project pulls libcosmic and cosmic-files from their git repositories, so a build also requires network access to fetch those git dependencies.

Official sources

  1. Official README
  2. Project repository