Rebrand Warp to Galaxy v1.1.0

- Rename all UI-facing "Warp" references to "Galaxy"
- Rename "Warpify" to "Wormhole" throughout the UI
- Replace app icons with 5 new Galaxy-branded variants
- Update About page to show selected app icon dynamically
- Rephrase Privacy page for Bedrock context
- Remove "Fallback to Warp server" toggle from Bedrock settings
- Widen model selector dropdowns in profile editor (480px)
- Update TERM_PROGRAM to "GalaxyTerminal"
- Bump version to 1.1.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ryan Ward
2026-05-19 11:21:44 -05:00
co-authored by Claude Opus 4.6
parent 99159184cb
commit ccc67e6a33
139 changed files with 319 additions and 398 deletions
+14 -2
View File
@@ -5,7 +5,11 @@ use super::{
},
SettingsSection,
};
use crate::{appearance::Appearance, channel::ChannelState, workspace::WorkspaceAction};
use crate::{
appearance::Appearance, channel::ChannelState, settings::app_icon::AppIconSettings,
workspace::WorkspaceAction,
};
use galaxyui::SingletonEntity;
use galaxyui::{
assets::asset_cache::AssetSource,
elements::{
@@ -62,7 +66,15 @@ impl SettingsWidget for AboutPageWidget {
) -> Box<dyn Element> {
let ui_builder = appearance.ui_builder();
let image_path = "bundled/svg/galaxy-logo.svg";
let icon_file = AppIconSettings::get_base_icon_file_name(*AppIconSettings::as_ref(_app).app_icon);
let image_path = match icon_file {
"galaxy" => "bundled/png/galaxy.png",
"galaxy_dotmatrix" => "bundled/png/galaxy_dotmatrix.png",
"galaxy_explorer" => "bundled/png/galaxy_explorer.png",
"galaxy_rainbow" => "bundled/png/galaxy_rainbow.png",
"galaxy_wormhole" => "bundled/png/galaxy_wormhole.png",
_ => "bundled/png/galaxy.png",
};
let version =
ChannelState::app_version().unwrap_or(concat!("v", env!("CARGO_PKG_VERSION")));
+1 -22
View File
@@ -24,7 +24,7 @@ use crate::settings::{
AIAutoDetectionEnabled, AICommandDenylist, AISettingsChangedEvent,
AgentModeCodingPermissionsType, AgentModeCommandExecutionDenylist,
AgentModeCommandExecutionPredicate, AgentModeQuerySuggestionsEnabled, BedrockAuthMethod,
BedrockAutoLogin, BedrockCrossRegionInference, BedrockEnabled, BedrockFallbackToWarp,
BedrockAutoLogin, BedrockCrossRegionInference, BedrockEnabled,
CodeSettings, CodebaseContextEnabled, FileBasedMcpEnabled, GitOperationsAutogenEnabled,
IncludeAgentCommandsInHistory, IntelligentAutosuggestionsEnabled, MemoryEnabled,
NLDInTerminalEnabled, NaturalLanguageAutosuggestionsEnabled, RuleSuggestionsEnabled,
@@ -5837,7 +5837,6 @@ mod tests;
struct BedrockSettingsWidget {
enabled_toggle: SwitchStateHandle,
cross_region_toggle: SwitchStateHandle,
fallback_toggle: SwitchStateHandle,
auto_login_toggle: SwitchStateHandle,
auth_method_dropdown: ViewHandle<Dropdown<AISettingsPageAction>>,
profile_dropdown: ViewHandle<Dropdown<AISettingsPageAction>>,
@@ -6092,7 +6091,6 @@ impl BedrockSettingsWidget {
Self {
enabled_toggle: SwitchStateHandle::default(),
cross_region_toggle: SwitchStateHandle::default(),
fallback_toggle: SwitchStateHandle::default(),
auto_login_toggle: SwitchStateHandle::default(),
auth_method_dropdown,
profile_dropdown,
@@ -6163,7 +6161,6 @@ impl SettingsWidget for BedrockSettingsWidget {
let is_enabled = *ai_settings.bedrock_enabled.value();
let auth_method = ai_settings.bedrock_auth_method.value().clone();
let cross_region = *ai_settings.bedrock_cross_region_inference.value();
let fallback = *ai_settings.bedrock_fallback_to_warp.value();
let auto_login = *ai_settings.bedrock_auto_login.value();
let mut column = Flex::column().with_spacing(16.);
@@ -6297,24 +6294,6 @@ impl SettingsWidget for BedrockSettingsWidget {
.finish(),
);
column.add_child(
Flex::column()
.with_child(render_ai_setting_toggle::<BedrockFallbackToWarp>(
"Fallback to Warp server",
AISettingsPageAction::ToggleBedrockFallbackToWarp,
fallback,
is_enabled,
self.fallback_toggle.clone(),
&RefCell::new(HashMap::new()),
app,
))
.with_child(render_ai_setting_description(
"When enabled, requests will route through the Warp server if Bedrock credentials are invalid.",
is_enabled,
app,
))
.finish(),
);
column.add_child(render_separator(appearance));
+8 -20
View File
@@ -1546,23 +1546,11 @@ impl AppearanceSettingsPageView {
fn app_icon_dropdown_item_label(val: AppIcon) -> &'static str {
match val {
AppIcon::Aurora => "Aurora",
AppIcon::Default => "Default",
AppIcon::Classic1 => "Classic 1",
AppIcon::Classic2 => "Classic 2",
AppIcon::Classic3 => "Classic 3",
AppIcon::Comets => "Comets",
AppIcon::GlassSky => "Glass Sky",
AppIcon::Glitch => "Glitch",
AppIcon::Cow => "Cow",
AppIcon::Glow => "Glow",
AppIcon::Holographic => "Holographic",
AppIcon::Mono => "Mono",
AppIcon::Neon => "Neon",
AppIcon::Original => "Original",
AppIcon::Starburst => "Starburst",
AppIcon::Sticker => "Sticker",
AppIcon::WarpOne => "Warp 1",
AppIcon::Galaxy => "Galaxy",
AppIcon::DotMatrix => "Dot Matrix",
AppIcon::Explorer => "Explorer",
AppIcon::Rainbow => "Rainbow",
AppIcon::Wormhole => "Wormhole",
}
}
@@ -2967,9 +2955,9 @@ impl SettingsWidget for CustomAppIconWidget {
let app_icon_at_startup = AppearanceManager::as_ref(_app).app_icon_at_startup();
let current_icon = *AppIconSettings::as_ref(_app).app_icon;
if current_icon == AppIcon::Default
if current_icon == AppIcon::Galaxy
&& ChannelState::channel() != Channel::Local
&& app_icon_at_startup != AppIcon::Default
&& app_icon_at_startup != AppIcon::Galaxy
{
let theme = appearance.theme();
return Flex::column()
@@ -2978,7 +2966,7 @@ impl SettingsWidget for CustomAppIconWidget {
appearance
.ui_builder()
.wrappable_text(
"You may need to restart Warp for MacOS to apply the preferred icon style.",
"You may need to restart Galaxy for MacOS to apply the preferred icon style.",
true,
)
.with_style(UiComponentStyles {
@@ -363,7 +363,7 @@ impl View for ExecutionProfileView {
permissions_column.add_child(with_standard_vertical_margin(
render_bool_permission_line_with_icon(
Icon::Compass,
"Auto-sync plans to Warp Drive:",
"Auto-sync plans to Galaxy Drive:",
profile.autosync_plans_to_warp_drive,
appearance,
is_any_ai_enabled,
+2 -2
View File
@@ -239,7 +239,7 @@ impl Display for SettingsSection {
SettingsSection::Knowledge => write!(f, "Knowledge"),
SettingsSection::ThirdPartyCLIAgents => write!(f, "Third party CLI agents"),
SettingsSection::Bedrock => write!(f, "AWS Bedrock"),
SettingsSection::Warpify => write!(f, "Galaxyize"),
SettingsSection::Warpify => write!(f, "Wormhole"),
SettingsSection::CodeIndexing => write!(f, "Indexing and projects"),
SettingsSection::EditorAndCodeReview => write!(f, "Editor and Code Review"),
_ => write!(f, "{self:?}"),
@@ -318,7 +318,7 @@ impl FromStr for SettingsSection {
"Features" => Ok(Self::Features),
"Keyboard shortcuts" => Ok(Self::Keybindings),
"Privacy" => Ok(Self::Privacy),
"Warpify" | "Galaxyize" => Ok(Self::Warpify),
"Warpify" | "Wormhole" => Ok(Self::Warpify),
"WarpDrive" | "Warp Drive" | "Galaxy Drive" => Ok(Self::WarpDrive),
// This page was called "Oz" at one point, keep for backward compatibility.
"Oz" | "Warp Agent" | "Galaxy Agent" => Ok(Self::WarpAgent),
+2 -2
View File
@@ -379,7 +379,7 @@ impl PlatformPageWidget {
appearance: &Appearance,
) -> Box<dyn Element> {
let text = vec![
FormattedTextFragment::plain_text("Create and manage API keys to allow other Oz cloud agents to access your Warp account.\nFor more information, visit the "),
FormattedTextFragment::plain_text("Create and manage API keys to allow other Oz cloud agents to access your Galaxy account.\nFor more information, visit the "),
FormattedTextFragment::hyperlink("Documentation.", API_KEY_DOCS_URL),
];
@@ -670,7 +670,7 @@ impl PlatformPageWidget {
.with_child(
Container::new(
Text::new(
"Create a key to manage external access to Warp",
"Create a key to manage external access to Galaxy",
appearance.ui_font_family(),
CONTENT_FONT_SIZE,
)
+9 -10
View File
@@ -73,10 +73,10 @@ const FONT_SIZE: f32 = 12.;
const SAFE_MODE_TITLE: &str = "Secret redaction";
static SAFE_MODE_DESCRIPTION: LazyLock<&'static str> = LazyLock::new(|| {
"When this setting is enabled, Warp will scan blocks, the contents of \
Warp Drive objects, and Oz prompts for potential sensitive \
information and prevent saving or sending this data to any \
servers. You can customize this list via regexes."
"When this setting is enabled, Galaxy will scan blocks and the contents of \
Galaxy Drive objects for potential sensitive information and prevent \
saving or sending this data to any servers. You can customize this \
list via regexes."
});
const USER_SECRET_REGEX_TITLE: &str = "Custom secret redaction";
const USER_SECRET_REGEX_DESCRIPTION: &str =
@@ -86,10 +86,10 @@ const USER_SECRET_REGEX_DESCRIPTION: &str =
const TELEMETRY_DESCRIPTION_OLD: &str =
"App analytics help us make the product better for you. We only collect \
app usage metadata, never console input or output.";
const TELEMETRY_TITLE: &str = "Help improve Warp";
const TELEMETRY_TITLE: &str = "Help improve Galaxy";
const TELEMETRY_DESCRIPTION: &str =
"App analytics help us make the product better for you. We may collect \
certain console interactions to improve Warp's AI capabilities.";
certain console interactions to improve Galaxy's AI capabilities.";
const TELEMETRY_FREE_TIER_NOTE: &str =
"On the free tier, analytics must be enabled to use AI features.";
const TELEMETRY_DOCS_URL: &str =
@@ -1533,7 +1533,7 @@ impl SettingsWidget for AppAnalyticsWidget {
Align::new(
ui_builder
.link(
"Read more about Warp's use of data".into(),
"Read more about Galaxy's use of data".into(),
Some(TELEMETRY_DOCS_URL.into()),
None,
self.docs_link_mouse_state.clone(),
@@ -1659,9 +1659,8 @@ impl SettingsWidget for NetworkLogWidget {
.with_child(
ui_builder
.paragraph(
"We've built a native console that allows you to view all communications \
from Warp to external servers to ensure you feel comfortable that your \
work is always kept safe."
"This tool uses AWS Bedrock and is subject to its data collection practices. \
No data is stored locally by Galaxy."
.to_owned(),
)
.with_style(UiComponentStyles {
+5 -5
View File
@@ -1779,9 +1779,9 @@ impl TeamsWidget {
has_admin_permissions: bool,
) -> Box<dyn Element> {
let prorated_message = if has_admin_permissions {
"You'll be charged for a portion of the team member's usage of Warp."
"You'll be charged for a portion of the team member's usage of Galaxy."
} else {
"Your admin will be charged for a portion of the team member's usage of Warp."
"Your admin will be charged for a portion of the team member's usage of Galaxy."
};
let additional_members_cost_money_msg = if let Some((monthly_cost, yearly_cost)) =
@@ -2977,7 +2977,7 @@ impl TeamsWidget {
// Instruction text for toggle
let domain = current_user_email.split('@').nth(1).unwrap_or("");
let team_discoverability_instructions =
format!("Allow Warp users with an @{domain} email to find and join the team.");
format!("Allow Galaxy users with an @{domain} email to find and join the team.");
section.add_child(
Container::new(self.render_sub_text(
team_discoverability_instructions,
@@ -3683,9 +3683,9 @@ impl TeamsWidget {
.with_margin_left(-4.)
.finish();
let checkbox_row_text = if let Some(domain) = view.auth_state.user_email_domain() {
format!("Allow Warp users with an @{domain} email to find and join the team.")
format!("Allow Galaxy users with an @{domain} email to find and join the team.")
} else {
"Allow Warp users with the same email domain as you to find and join the team."
"Allow Galaxy users with the same email domain as you to find and join the team."
.to_string()
};
let checkbox_row = Container::new(
@@ -3063,7 +3063,7 @@ impl UpdateEnvironmentForm {
"Suggest image"
};
let tooltip_text = "Warp will suggest a Docker image based on your selected repositories.";
let tooltip_text = "Galaxy will suggest a Docker image based on your selected repositories.";
let button = Hoverable::new(
self.suggest_image_button_mouse_state.clone(),
+3 -3
View File
@@ -139,7 +139,7 @@ impl SettingsWidget for WarpDriveHeaderWidget {
let message = Container::new(
Text::new_inline(
"To use Warp Drive, please create an account.".to_string(),
"To use Galaxy Drive, please create an account.".to_string(),
appearance.ui_font_family(),
14.,
)
@@ -218,7 +218,7 @@ impl SettingsWidget for WarpDriveToggleWidget {
.is_anonymous_or_logged_out();
render_body_item::<WarpDriveSettingsPageAction>(
"Warp Drive".into(),
"Galaxy Drive".into(),
Some(AdditionalInfo {
mouse_state: self.info_icon_mouse_state.clone(),
on_click_action: Some(WarpDriveSettingsPageAction::OpenUrl(
@@ -248,7 +248,7 @@ impl SettingsWidget for WarpDriveToggleWidget {
}
})
.finish(),
Some("Warp Drive is a workspace in your terminal where you can save Workflows, Notebooks, Prompts, and Environment Variables for personal use or to share with a team.".into()),
Some("Galaxy Drive is a workspace in your terminal where you can save Workflows, Notebooks, Prompts, and Environment Variables for personal use or to share with a team.".into()),
)
}
}
+4 -4
View File
@@ -185,7 +185,7 @@ impl WarpifyPageView {
{
categories.push(
Category::new("SSH", vec![Box::new(SSHWidget::default())])
.with_subtitle("Galaxyize your interactive SSH sessions."),
.with_subtitle("Wormhole your interactive SSH sessions."),
);
}
PageType::new_categorized(categories, None)
@@ -532,7 +532,7 @@ impl TitleWidget {
fn render_top_of_page(&self, appearance: &Appearance, _app: &AppContext) -> Box<dyn Element> {
let warpify_description = vec![
FormattedTextFragment::plain_text(
"Configure whether Galaxy attempts to \u{201c}Galaxyize\u{201d} (add support for blocks, \
"Configure whether Galaxy attempts to \u{201c}Wormhole\u{201d} (add support for blocks, \
input modes, etc) certain shells. ",
),
FormattedTextFragment::hyperlink(
@@ -556,7 +556,7 @@ impl TitleWidget {
.finish();
Flex::column()
.with_child(render_page_title("Galaxyize", HEADER_FONT_SIZE, appearance))
.with_child(render_page_title("Wormhole", HEADER_FONT_SIZE, appearance))
.with_child(warpify_description)
.finish()
}
@@ -682,7 +682,7 @@ impl SettingsWidget for SSHWidget {
&WarpifySettings::as_ref(app).enable_ssh_warpification,
move || {
render_body_item::<WarpifyPageAction>(
"Galaxyize SSH Sessions".into(),
"Wormhole SSH Sessions".into(),
None,
LocalOnlyIconState::for_setting(
EnableSshWarpification::storage_key(),