



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-88fc7764b4deb69a.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automations_pagination","copilot_chat_clear_model_selection_for_default_change","copilot_chat_compact_tables","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_minimize_contextual","copilot_chat_model_picker_promotions","copilot_chat_models_browser_cache","copilot_chat_new_topic_nudge","copilot_chat_reduce_quota_checks","copilot_chat_vision_dotcom_chat_ga_gate","copilot_chat_vision_preview_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_ftp_hyperspace_upgrade_prompt","copilot_hide_hovercard","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_suggestion_pills","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_agents_repository_enablement","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_repo_hovercards","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_pr_chat_enhancements","copilot_prominent_upgrade_button","copilot_resource_panel","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_suite_disable_river_accordion_dither","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_stacks_rebase_conflict_instructions","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","pulls_dashboard_sidebar_layout","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app","repo_app_actions_workflows","repo_app_agents","repo_app_commits","repo_app_issues","repo_app_pull_requests","repo_app_turbo","repo_issues_sidebar_layout","repo_overview_ask_copilot","repo_pulls_dashboard_persistence","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap","react_import_map","react_import_map"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-a2b1f23b8d8509dd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-b7582d5a8be7c024.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-a9c1047247f0fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-ef80792c471f3488.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-564408e9198dff6d.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-f9b9237ca2a4fd03.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.75a0c146e67ae9dc.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-9656756f9433c425.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-f119fb256aca0abe.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-6df03a157bacbc44.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fc6fdc0a25514ccc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04-a76c47ec12c12e01.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1-43f07743b557bfbe.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-0cd0ed3d43b36dc1.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.8dead0ed901aad61.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-a1c84050bfb42d5a.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-050aafaffcbc0f54.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pa9-63a2449f68fddcc9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qk-69b7a09c43e10e06.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ko-674c1ec5588e9f0f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nsi-926ffbc13301c5b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mgq-93f58f229b2328b4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-75d8015f7c16be87.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l-60a7083fe8307476.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-2bbb73a69162e23b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/q5-fc1f2b54f1d10663.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-ec74cb1fa6c31a3f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-bbe0f39cd2abe9a0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-6accb9e40c25a6a5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-32a6db98bc57337d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-4cca625a20b72565.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/e84-4da7096eb6b55d6d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0pz-90009c6b3d9415c6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7mh-77fafa8751caee98.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/46-90fb1c98afc2cd5a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jga-3f6576d6f86d4e43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ax-0ad16095945fc6f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0dh-eb608edac481e761.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7cv-33c444fbc72b9998.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4b-c63a3f3820a90d31.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qv-bdafe2897b1bc43a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gtp-0eb27f0896440617.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-1f271792174bbadc.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.7c5f404947919942.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.bd9e6b542f167fd8.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/46.3e560835284be460.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4b.e524e9f270f17ecc.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/qv.1bac5eeb7156cd97.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.e0bd5f9cc9ae629c.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uul-06c73d3dea5f5318.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-6d91860be7455f44.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.7c5f404947919942.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.f700fa90ac5ba2b4.module.css" />


  <title>cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:7ada81a2-3381-6e5d-3aa8-9e2df84a6244">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="9DD6:2A714E:180B303:1512C79:6AA98D25" data-pjax-transient="true"/><meta name="html-safe-nonce" content="4d6268eae9d3f7663fabd94caafced9f29da792fc7f131872ac28e2fcce4f2d4" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5REQ2OjJBNzE0RToxODBCMzAzOjE1MTJDNzk6NkFBOThEMjUiLCJ2aXNpdG9yX2lkIjoiNDcyNzM2OTM0MDgzNzAwNjYyOSIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="28c85a7ea7243e8491ca5b1dae6b2c64240f0b11c6893d6231801f409b1aff9c" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:43526067" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="A utility for connecting securely to your Cloud SQL instances - cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/232d56c0348c971601a2f04011cf3e1b0421b991456193dc96e113a5ccaeb61a/GoogleCloudPlatform/cloud-sql-proxy" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy" /><meta name="twitter:description" content="A utility for connecting securely to your Cloud SQL instances - GoogleCloudPlatform/cloud-sql-proxy" />
  <meta property="og:image" content="https://opengraph.githubassets.com/232d56c0348c971601a2f04011cf3e1b0421b991456193dc96e113a5ccaeb61a/GoogleCloudPlatform/cloud-sql-proxy" /><meta property="og:image:alt" content="A utility for connecting securely to your Cloud SQL instances - GoogleCloudPlatform/cloud-sql-proxy" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy" /><meta property="og:url" content="https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md" /><meta property="og:description" content="A utility for connecting securely to your Cloud SQL instances - GoogleCloudPlatform/cloud-sql-proxy" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="dc7560b6e5dd3248e87bef58df9a5a109d04af74129b186e2013db1d02f53af2" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="fd80f4397e6b366d79cd8ab0cc06c0f64e6a731ebf6ac8fbb538416234459325" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="df0ce38352e40c4167b9d90cc0cb807a06c007d7b77f28931d359a0835d2f297" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/GoogleCloudPlatform/cloud-sql-proxy git https://github.com/GoogleCloudPlatform/cloud-sql-proxy.git">

  <meta name="octolytics-dimension-user_id" content="2810941" /><meta name="octolytics-dimension-user_login" content="GoogleCloudPlatform" /><meta name="octolytics-dimension-repository_id" content="43526067" /><meta name="octolytics-dimension-repository_nwo" content="GoogleCloudPlatform/cloud-sql-proxy" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="43526067" /><meta name="octolytics-dimension-repository_network_root_nwo" content="GoogleCloudPlatform/cloud-sql-proxy" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="36662c9d573e143ed2dce55b9b2543f5e04118be" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-18ce36cadb908e16.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.7c5f404947919942.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.e974423a6f4f1939.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-cbdcab386be8ed25.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-e41bee64286a7613.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-82c347d20a13fb90.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-0fa28f31e42d2b12.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-b81ac1a0f33fe151.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.7c5f404947919942.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.0475f8e2181c4fb1.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fcloud-sql-proxy%2Fblob%2Fmain%2FREADME.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=GoogleCloudPlatform%2Fcloud-sql-proxy","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md\",\"user_id\":null}}","auth_hydro_click_hmac":"397289c8a462534e4f786cc52f76cba8e43bb4df62da7c203d130c1ff2d3881d","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fcloud-sql-proxy%2Fblob%2Fmain%2FREADME.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="397289c8a462534e4f786cc52f76cba8e43bb4df62da7c203d130c1ff2d3881d"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fcloud-sql-proxy%2Fblob%2Fmain%2FREADME.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="397289c8a462534e4f786cc52f76cba8e43bb4df62da7c203d130c1ff2d3881d"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=GoogleCloudPlatform%2Fcloud-sql-proxy" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="397289c8a462534e4f786cc52f76cba8e43bb4df62da7c203d130c1ff2d3881d"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-a68749e9-2542-4c8d-9b4a-797daec68e81" aria-labelledby="tooltip-97910eb7-6b75-4663-9da1-ad15d19b2503" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-97910eb7-6b75-4663-9da1-ad15d19b2503" for="icon-button-a68749e9-2542-4c8d-9b4a-797daec68e81" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      
    

      <include-fragment src="/in-product-messaging/budget-threshold-banner?organization=GoogleCloudPlatform" data-nonce="v2:7ada81a2-3381-6e5d-3aa8-9e2df84a6244" data-view-component="true">
  
  <div data-show-on-forbidden-error hidden>
    <div class="Box">
  <div class="blankslate-container">
    <div data-view-component="true" class="blankslate blankslate-spacious color-bg-default rounded-2">
      

      <h3 data-view-component="true" class="blankslate-heading">        Uh oh!
</h3>
      <p data-view-component="true" class="blankslate-description">        <p class="color-fg-muted my-2 mb-2 ws-normal">There was an error while loading. <a class="Link--inTextBlock" data-turbo="false" href="" aria-label="Please reload this page">Please reload this page</a>.</p>
</p>

</div>  </div>
</div>  </div>
</include-fragment>

    








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2 tmp-mr-2">
    <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/GoogleCloudPlatform/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/GoogleCloudPlatform">
        GoogleCloudPlatform
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/GoogleCloudPlatform/cloud-sql-proxy">cloud-sql-proxy</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2FGoogleCloudPlatform%2Fcloud-sql-proxy" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9b98464f7b2a032d33a1274d467060b696f8860433360cc7ea3ed89d2f648427" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-5fbdd98e-5008-4818-a199-c29ed32302af" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2FGoogleCloudPlatform%2Fcloud-sql-proxy" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:43526067,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="c116c8d46f85219b9300b5bbd2efcd72f69647b989ad7e3a11d3a784cf9d1ca2" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="352" data-view-component="true" class="Counter">352</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2FGoogleCloudPlatform%2Fcloud-sql-proxy" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:43526067,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="576eed0af0441ec1e45864c60620607c6633abb68b2a31acce0a378a2c31757e" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="1435 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="1,435" data-view-component="true" class="Counter js-social-count">1.4k</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/GoogleCloudPlatform/cloud-sql-proxy" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /GoogleCloudPlatform/cloud-sql-proxy" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="issues-tab" href="/GoogleCloudPlatform/cloud-sql-proxy/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /GoogleCloudPlatform/cloud-sql-proxy/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-command-id="repositories:go-to-issues" data-react-nav="issues-react" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
</svg>
        <span data-content="Issues">Issues</span>
          <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="72" data-view-component="true" class="Counter">72</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/GoogleCloudPlatform/cloud-sql-proxy/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /GoogleCloudPlatform/cloud-sql-proxy/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="9" data-view-component="true" class="Counter">9</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/GoogleCloudPlatform/cloud-sql-proxy/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /GoogleCloudPlatform/cloud-sql-proxy/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/GoogleCloudPlatform/cloud-sql-proxy/security" data-tab-item="i4security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /GoogleCloudPlatform/cloud-sql-proxy/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/GoogleCloudPlatform/cloud-sql-proxy/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /GoogleCloudPlatform/cloud-sql-proxy/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-button" popovertarget="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-overlay" aria-controls="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-list" aria-haspopup="true" aria-labelledby="tooltip-b3531557-caa7-4289-a826-8bfad6d8ee5a" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-b3531557-caa7-4289-a826-8bfad6d8ee5a" for="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-overlay" anchor="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-button" id="action-menu-0a4dedb9-a389-40d2-93e4-45d9945b92dc-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-b9b9591b-5ab7-4ffd-ab57-67cc465f5402" href="/GoogleCloudPlatform/cloud-sql-proxy" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-28a1a752-79f8-4b2d-9322-2bff00f7a751" href="/GoogleCloudPlatform/cloud-sql-proxy/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened">
    <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Issues
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-01b7a803-a2ff-4656-9d11-cfd084db8e1e" href="/GoogleCloudPlatform/cloud-sql-proxy/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-eaaf9a54-a378-410d-bc2e-34800b2e0811" href="/GoogleCloudPlatform/cloud-sql-proxy/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-167db0aa-18e6-4c48-bb6f-1d7f3deccc00" href="/GoogleCloudPlatform/cloud-sql-proxy/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-514fcda3-f845-4b34-9d3e-e58c67a49562" href="/GoogleCloudPlatform/cloud-sql-proxy/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"Cloud SQL Auth Proxy","anchor":"cloud-sql-auth-proxy","htmlText":"Cloud SQL Auth Proxy"},{"level":2,"text":"Installation","anchor":"installation","htmlText":"Installation"},{"level":3,"text":"Install from Source","anchor":"install-from-source","htmlText":"Install from Source"},{"level":2,"text":"Usage","anchor":"usage","htmlText":"Usage"},{"level":3,"text":"Credentials","anchor":"credentials","htmlText":"Credentials"},{"level":3,"text":"Basic Usage","anchor":"basic-usage","htmlText":"Basic Usage"},{"level":3,"text":"Configuring Port","anchor":"configuring-port","htmlText":"Configuring Port"},{"level":3,"text":"Configuring Listening Address","anchor":"configuring-listening-address","htmlText":"Configuring Listening Address"},{"level":3,"text":"Configuring Private IP","anchor":"configuring-private-ip","htmlText":"Configuring Private IP"},{"level":3,"text":"Configuring Unix domain sockets","anchor":"configuring-unix-domain-sockets","htmlText":"Configuring Unix domain sockets"},{"level":3,"text":"Configuring IAM Database Authentication","anchor":"configuring-iam-database-authentication","htmlText":"Configuring IAM Database Authentication"},{"level":3,"text":"Configuring Service Account Impersonation","anchor":"configuring-service-account-impersonation","htmlText":"Configuring Service Account Impersonation"},{"level":3,"text":"Using Advanced Disaster Recovery and DNS domain names to identify instances","anchor":"using-advanced-disaster-recovery-and-dns-domain-names-to-identify-instances","htmlText":"Using Advanced Disaster Recovery and DNS domain names to identify instances"},{"level":4,"text":"Using Advanced Recovery Write Endpoint DNS Name","anchor":"using-advanced-recovery-write-endpoint-dns-name","htmlText":"Using Advanced Recovery Write Endpoint DNS Name"},{"level":4,"text":"Configure your DNS Records","anchor":"configure-your-dns-records","htmlText":"Configure your DNS Records"},{"level":4,"text":"Configuring the Proxy","anchor":"configuring-the-proxy","htmlText":"Configuring the Proxy"},{"level":3,"text":"Automatic fail-over using DNS domain names","anchor":"automatic-fail-over-using-dns-domain-names","htmlText":"Automatic fail-over using DNS domain names"},{"level":3,"text":"Testing Connectivity","anchor":"testing-connectivity","htmlText":"Testing Connectivity"},{"level":3,"text":"Config file","anchor":"config-file","htmlText":"Config file"},{"level":3,"text":"Config environment variables","anchor":"config-environment-variables","htmlText":"Config environment variables"},{"level":3,"text":"Configuring a Lazy Refresh","anchor":"configuring-a-lazy-refresh","htmlText":"Configuring a Lazy Refresh"},{"level":3,"text":"Additional flags","anchor":"additional-flags","htmlText":"Additional flags"},{"level":2,"text":"Container Images","anchor":"container-images","htmlText":"Container Images"},{"level":3,"text":"Working with Docker and the Proxy","anchor":"working-with-docker-and-the-proxy","htmlText":"Working with Docker and the Proxy"},{"level":2,"text":"Running as a Kubernetes Sidecar","anchor":"running-as-a-kubernetes-sidecar","htmlText":"Running as a Kubernetes Sidecar"},{"level":2,"text":"Running behind a Socks5 proxy","anchor":"running-behind-a-socks5-proxy","htmlText":"Running behind a Socks5 proxy"},{"level":2,"text":"Support for Metrics and Tracing","anchor":"support-for-metrics-and-tracing","htmlText":"Support for Metrics and Tracing"},{"level":2,"text":"Debug logging","anchor":"debug-logging","htmlText":"Debug logging"},{"level":2,"text":"Localhost Admin Server","anchor":"localhost-admin-server","htmlText":"Localhost Admin Server"},{"level":2,"text":"Frequently Asked Questions","anchor":"frequently-asked-questions","htmlText":"Frequently Asked Questions"},{"level":3,"text":"Why would I use the Proxy?","anchor":"why-would-i-use-the-proxy","htmlText":"Why would I use the Proxy?"},{"level":3,"text":"How should I use the Proxy?","anchor":"how-should-i-use-the-proxy","htmlText":"How should I use the Proxy?"},{"level":3,"text":"Why can't the Proxy connect to my private IP instance?","anchor":"why-cant-the-proxy-connect-to-my-private-ip-instance","htmlText":"Why can't the Proxy connect to my private IP instance?"},{"level":3,"text":"Should I use the Proxy for large deployments?","anchor":"should-i-use-the-proxy-for-large-deployments","htmlText":"Should I use the Proxy for large deployments?"},{"level":3,"text":"Can I share the Proxy across multiple applications?","anchor":"can-i-share-the-proxy-across-multiple-applications","htmlText":"Can I share the Proxy across multiple applications?"},{"level":3,"text":"How do I verify the shasum of a downloaded Proxy binary?","anchor":"how-do-i-verify-the-shasum-of-a-downloaded-proxy-binary","htmlText":"How do I verify the shasum of a downloaded Proxy binary?"},{"level":2,"text":"Reference Documentation","anchor":"reference-documentation","htmlText":"Reference Documentation"},{"level":2,"text":"Support policy","anchor":"support-policy","htmlText":"Support policy"},{"level":3,"text":"Major version lifecycle","anchor":"major-version-lifecycle","htmlText":"Major version lifecycle"},{"level":3,"text":"Release cadence","anchor":"release-cadence","htmlText":"Release cadence"},{"level":2,"text":"Contributing","anchor":"contributing","htmlText":"Contributing"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCloud SQL Auth Proxy\u003c/h1\u003e\u003ca id=\"user-content-cloud-sql-auth-proxy\" class=\"anchor\" aria-label=\"Permalink: Cloud SQL Auth Proxy\" href=\"#cloud-sql-auth-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml?query=event%3Apush+branch%3Amain\"\u003e\u003cimg src=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml/badge.svg?event=push\" alt=\"CI\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-warning\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-alert mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eWarning\u003c/p\u003e\u003cp dir=\"auto\"\u003e\u003cstrong\u003eGo versions 1.25.2 and 1.24.8 are NOT compatible with Cloud Auth Proxy.\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAn update to the Go version 1.25.2 and Go 1.24.8 breaks SAN verificaton. This is because Cloud SQL includes a trailing dot in the DNS name within the certificate's Subject Alternative Name (SAN), which the above Go versions reject as a malformed DNS name.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor more details, please see the related Go issue: \u003ca href=\"https://github.com/golang/go/issues/75715\" data-hovercard-type=\"issue\" data-hovercard-url=\"/golang/go/issues/75715/hovercard\"\u003ecrypto/x509: quadratic complexity when checking name constraints \u003c/a\u003e.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-important\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-report mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eImportant\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Auth Proxy does not currently support Unix domain socket\nconnections to MySQL 8.4 instances. This is due to a \u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-proxy/issues/2317\" data-hovercard-type=\"issue\" data-hovercard-url=\"/GoogleCloudPlatform/cloud-sql-proxy/issues/2317/hovercard\"\u003eknown issue\u003c/a\u003e\ninvolving the new default \u003ccode\u003ecaching_sha2_password\u003c/code\u003e authentication plugin.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Auth Proxy is a utility for ensuring secure connections to your\nCloud SQL instances. It provides IAM authorization, allowing you to control who\ncan connect to your instance through IAM permissions, and TLS 1.3 encryption,\nwithout having to manage certificates.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSee the \u003ca href=\"https://cloud.google.com/sql/docs/mysql/connect-overview\" rel=\"nofollow\"\u003eConnecting Overview\u003c/a\u003e page for more information on\nconnecting to a Cloud SQL instance, or the \u003ca href=\"https://cloud.google.com/sql/docs/mysql/sql-proxy\" rel=\"nofollow\"\u003eAbout the Proxy\u003c/a\u003e page\nfor details on how the Cloud SQL Proxy works.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Auth Proxy has support for:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/postgres/iam-authentication#auto-iam-auth\" rel=\"nofollow\"\u003eAutomatic IAM Authentication\u003c/a\u003e (Postgres and MySQL only)\u003c/li\u003e\n\u003cli\u003eMetrics (\u003ca href=\"https://cloud.google.com/monitoring\" rel=\"nofollow\"\u003eCloud Monitoring\u003c/a\u003e, \u003ca href=\"https://cloud.google.com/trace\" rel=\"nofollow\"\u003eCloud Trace\u003c/a\u003e, and \u003ca href=\"https://prometheus.io/\" rel=\"nofollow\"\u003ePrometheus\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-health-check#cloud-sql-proxy-health-checks\"\u003eHTTP Healthchecks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#configuring-service-account-impersonation\"\u003eService account impersonation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSeparate Dialer functionality released as the \u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-go-connector\"\u003eCloud SQL Go Connector\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConfiguration with \u003ca href=\"#config-environment-variables\"\u003eenvironment variables\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFully POSIX-compliant flags\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIf you're using Go, Java, Python, or Node.js, consider using the corresponding Cloud SQL\nconnector which does everything the Proxy does, but in process:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-go-connector\"\u003eCloud SQL Go connector\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory\"\u003eCloud SQL Java connector\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-python-connector\"\u003eCloud SQL Python connector\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector\"\u003eCloud SQL Node.js connector\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eFor users migrating from v1, see the \u003ca href=\"/GoogleCloudPlatform/cloud-sql-proxy/blob/main/migration-guide.md\"\u003eMigration Guide\u003c/a\u003e.\nThe \u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/5f5b09b62eb6dfcaa58ce399d0131c1544bf813f/README.md\"\u003ev1 README\u003c/a\u003e is still available.\u003c/p\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-important\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-report mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eImportant\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy does not configure the network between the VM it's running on\nand the Cloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL\ninstance, either by deploying it in a VPC that has access to your Private IP\ninstance, or by configuring Public IP.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eInstallation\u003c/h2\u003e\u003ca id=\"user-content-installation\" class=\"anchor\" aria-label=\"Permalink: Installation\" href=\"#installation\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCheck for the latest version on the \u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/releases\"\u003ereleases page\u003c/a\u003e and use the\nfollowing instructions for your OS and CPU architecture.\u003c/p\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-note\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-info mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eStarting with version \u003ccode\u003ev2.17.1\u003c/code\u003e, Windows binaries provided on the\n\u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/releases\"\u003ereleases page\u003c/a\u003e are signed with Google LLC certificates.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdetails open=\"\"\u003e\n\u003csummary\u003eLinux amd64\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.linux.amd64\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.linux.amd64\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eLinux 386\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.linux.386\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.linux.386\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eLinux arm64\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.linux.arm64\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.linux.arm64\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eLinux arm\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.linux.arm\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.linux.arm\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMac (Intel)\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.darwin.amd64\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.darwin.amd64\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMac (Apple Silicon)\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\nURL=\u0026quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u0026quot;\n\ncurl \u0026quot;$URL/cloud-sql-proxy.darwin.arm64\u0026quot; -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\nURL=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\ncurl \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003e$URL\u003c/span\u003e/cloud-sql-proxy.darwin.arm64\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e -o cloud-sql-proxy\n\nchmod +x cloud-sql-proxy\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWindows x64\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\ncurl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x64.exe -o cloud-sql-proxy.exe\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\ncurl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x64.exe -o cloud-sql-proxy.exe\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWindows x86\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# see Releases for other versions\ncurl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x86.exe -o cloud-sql-proxy.exe\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e see Releases for other versions\u003c/span\u003e\ncurl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x86.exe -o cloud-sql-proxy.exe\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eInstall from Source\u003c/h3\u003e\u003ca id=\"user-content-install-from-source\" class=\"anchor\" aria-label=\"Permalink: Install from Source\" href=\"#install-from-source\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo install from source, ensure you have the latest version of \u003ca href=\"https://go.dev/doc/install\" rel=\"nofollow\"\u003eGo installed\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThen, simply run:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"go install github.com/GoogleCloudPlatform/cloud-sql-proxy/v2@latest\"\u003e\u003cpre\u003ego install github.com/GoogleCloudPlatform/cloud-sql-proxy/v2@latest\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003ecloud-sql-proxy\u003c/code\u003e will be placed in \u003ccode\u003e$GOPATH/bin\u003c/code\u003e or \u003ccode\u003e$HOME/go/bin\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUsage\u003c/h2\u003e\u003ca id=\"user-content-usage\" class=\"anchor\" aria-label=\"Permalink: Usage\" href=\"#usage\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following examples all reference an \u003ccode\u003eINSTANCE_CONNECTION_NAME\u003c/code\u003e, which takes\nthe form: \u003ccode\u003emyproject:myregion:myinstance\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo find your Cloud SQL instance's \u003ccode\u003eINSTANCE_CONNECTION_NAME\u003c/code\u003e, visit the detail\npage of your Cloud SQL instance in the console, or use \u003ccode\u003egcloud\u003c/code\u003e with:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"gcloud sql instances describe \u0026lt;INSTANCE_NAME\u0026gt; --format='value(connectionName)'\"\u003e\u003cpre\u003egcloud sql instances describe \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e --format=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003evalue(connectionName)\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCredentials\u003c/h3\u003e\u003ca id=\"user-content-credentials\" class=\"anchor\" aria-label=\"Permalink: Credentials\" href=\"#credentials\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Proxy uses a Cloud IAM principal to authorize connections against\na Cloud SQL instance. The Proxy sources the credentials using\n\u003ca href=\"https://cloud.google.com/docs/authentication/production\" rel=\"nofollow\"\u003eApplication Default Credentials\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-note\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-info mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAny IAM principal connecting to a Cloud SQL database will need one of the\nfollowing IAM roles:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eCloud SQL Client (preferred)\u003c/li\u003e\n\u003cli\u003eCloud SQL Editor\u003c/li\u003e\n\u003cli\u003eCloud SQL Admin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eOr one may manually assign the following IAM permissions:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ecloudsql.instances.connect\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloudsql.instances.get\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eSee \u003ca href=\"https://cloud.google.com/sql/docs/mysql/roles-and-permissions\" rel=\"nofollow\"\u003eRoles and Permissions in Cloud SQL\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhen the Proxy authenticates under the Compute Engine VM's default service\naccount, the VM must have at least the \u003ccode\u003esqlservice.admin\u003c/code\u003e API scope (i.e.,\n\"\u003ca href=\"https://www.googleapis.com/auth/sqlservice.admin\" rel=\"nofollow\"\u003ehttps://www.googleapis.com/auth/sqlservice.admin\u003c/a\u003e\") and the associated project\nmust have the SQL Admin API enabled. The default service account must also have\nat least writer or editor privileges to any projects of target SQL instances.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy also supports two flags related to credentials:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e--token\u003c/code\u003e to use an OAuth2 token\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--credentials-file\u003c/code\u003e to use a service account key file\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBasic Usage\u003c/h3\u003e\u003ca id=\"user-content-basic-usage\" class=\"anchor\" aria-label=\"Permalink: Basic Usage\" href=\"#basic-usage\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo start the Proxy, use:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# starts the Proxy listening on localhost with the default database engine port\n# For example:\n#   MySQL      localhost:3306\n#   Postgres   localhost:5432\n#   SQL Server localhost:1433\n./cloud-sql-proxy \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e starts the Proxy listening on localhost with the default database engine port\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e For example:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e   MySQL      localhost:3306\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e   Postgres   localhost:5432\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e   SQL Server localhost:1433\u003c/span\u003e\n./cloud-sql-proxy \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy will automatically detect the default database engine's port and start\na corresponding listener. Production deployments should use the \u003ccode\u003e--port\u003c/code\u003e flag to\nreduce startup time.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports multiple instances:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy \u0026lt;INSTANCE_CONNECTION_NAME_1\u0026gt; \u0026lt;INSTANCE_CONNECTION_NAME_2\u0026gt;\"\u003e\u003cpre\u003e./cloud-sql-proxy \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME_\u003cspan class=\"pl-k\"\u003e1\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME_\u003cspan class=\"pl-k\"\u003e2\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring Port\u003c/h3\u003e\u003ca id=\"user-content-configuring-port\" class=\"anchor\" aria-label=\"Permalink: Configuring Port\" href=\"#configuring-port\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo override the port, use the \u003ccode\u003e--port\u003c/code\u003e flag:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on localhost:6000\n./cloud-sql-proxy --port 6000 \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on localhost:6000\u003c/span\u003e\n./cloud-sql-proxy --port 6000 \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhen specifying multiple instances, the port will increment from the flag value:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on localhost:6000 for INSTANCE_CONNECTION_1\n# and localhost:6001 for INSTANCE_CONNECTION_NAME_2.\n./cloud-sql-proxy --port 6000 \u0026lt;INSTANCE_CONNECTION_NAME_1\u0026gt; \u0026lt;INSTANCE_CONNECTION_NAME_2\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on localhost:6000 for INSTANCE_CONNECTION_1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e and localhost:6001 for INSTANCE_CONNECTION_NAME_2.\u003c/span\u003e\n./cloud-sql-proxy --port 6000 \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME_\u003cspan class=\"pl-k\"\u003e1\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME_\u003cspan class=\"pl-k\"\u003e2\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo configure ports on a per instance basis, use the \u003ccode\u003eport\u003c/code\u003e query param:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on localhost:5000 for the instance called \u0026quot;postgres\u0026quot;\n# and starts a listener on localhost:6000 for the instance called \u0026quot;mysql\u0026quot;\n./cloud-sql-proxy \\\n    'myproject:my-region:postgres?port=5000' \\\n    'myproject:my-region:mysql?port=6000'\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on localhost:5000 for the instance called \"postgres\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e and starts a listener on localhost:6000 for the instance called \"mysql\"\u003c/span\u003e\n./cloud-sql-proxy \\\n    \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003emyproject:my-region:postgres?port=5000\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \\\n    \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003emyproject:my-region:mysql?port=6000\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring Listening Address\u003c/h3\u003e\u003ca id=\"user-content-configuring-listening-address\" class=\"anchor\" aria-label=\"Permalink: Configuring Listening Address\" href=\"#configuring-listening-address\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo override the choice of \u003ccode\u003elocalhost\u003c/code\u003e, use the \u003ccode\u003e--address\u003c/code\u003e flag:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on all interfaces at port 5432\n./cloud-sql-proxy --address 0.0.0.0 \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on all interfaces at port 5432\u003c/span\u003e\n./cloud-sql-proxy --address 0.0.0.0 \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo override address on a per-instance basis, use the \u003ccode\u003eaddress\u003c/code\u003e query param:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on 0.0.0.0 for \u0026quot;postgres\u0026quot; at port 5432\n# and a listener on 10.0.0.1:3306 for \u0026quot;mysql\u0026quot;\n./cloud-sql-proxy \\\n    'myproject:my-region:postgres?address=0.0.0.0' \\\n    'myproject:my-region:mysql?address=10.0.0.1\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on 0.0.0.0 for \"postgres\" at port 5432\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e and a listener on 10.0.0.1:3306 for \"mysql\"\u003c/span\u003e\n./cloud-sql-proxy \\\n    \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003emyproject:my-region:postgres?address=0.0.0.0\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \\\n    \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003emyproject:my-region:mysql?address=10.0.0.1\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring Private IP\u003c/h3\u003e\u003ca id=\"user-content-configuring-private-ip\" class=\"anchor\" aria-label=\"Permalink: Configuring Private IP\" href=\"#configuring-private-ip\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBy default, the Proxy attempts to connect to an instance's public IP. To enable\nprivate IP, use:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener connected to the private IP of the Cloud SQL instance.\n# Note: there must be a network path present for this to work.\n./cloud-sql-proxy --private-ip \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener connected to the private IP of the Cloud SQL instance.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Note: there must be a network path present for this to work.\u003c/span\u003e\n./cloud-sql-proxy --private-ip \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-important\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-report mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eImportant\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy does not configure the network. You MUST ensure the Proxy can\nreach your Cloud SQL instance, either by deploying it in a VPC that has access\nto your Private IP instance, or by configuring Public IP.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring Unix domain sockets\u003c/h3\u003e\u003ca id=\"user-content-configuring-unix-domain-sockets\" class=\"anchor\" aria-label=\"Permalink: Configuring Unix domain sockets\" href=\"#configuring-unix-domain-sockets\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy also supports \u003ca href=\"https://en.wikipedia.org/wiki/Unix_domain_socket\" rel=\"nofollow\"\u003eUnix domain sockets\u003c/a\u003e.\nTo start the Proxy with Unix sockets, run:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Uses the directory \u0026quot;/mycooldir\u0026quot; to create a Unix socket\n# For example, the following directory would be created:\n#   /mycooldir/myproject:myregion:myinstance\n./cloud-sql-proxy --unix-socket /mycooldir \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Uses the directory \"/mycooldir\" to create a Unix socket\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e For example, the following directory would be created:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e   /mycooldir/myproject:myregion:myinstance\u003c/span\u003e\n./cloud-sql-proxy --unix-socket /mycooldir \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo configure a Unix domain socket on a per-instance basis, use the \u003ccode\u003eunix-socket\u003c/code\u003e\nquery param:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a TCP listener on localhost:5432 for \u0026quot;postgres\u0026quot;\n# and creates a Unix domain socket for \u0026quot;mysql\u0026quot;:\n#     /cloudsql/myproject:my-region:mysql\n./cloud-sql-proxy \\\n    myproject:my-region:postgres \\\n    'myproject:my-region:mysql?unix-socket=/cloudsql'\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a TCP listener on localhost:5432 for \"postgres\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e and creates a Unix domain socket for \"mysql\":\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e     /cloudsql/myproject:my-region:mysql\u003c/span\u003e\n./cloud-sql-proxy \\\n    myproject:my-region:postgres \\\n    \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003emyproject:my-region:mysql?unix-socket=/cloudsql\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-note\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-info mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports Unix domain sockets on recent versions of Windows, but\nreplaces colons with periods:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a Unix domain socket at the path:\n#    C:\\cloudsql\\myproject.my-region.mysql\n./cloud-sql-proxy --unix-socket C:\\cloudsql myproject:my-region:mysql\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a Unix domain socket at the path:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e    C:\\cloudsql\\myproject.my-region.mysql\u003c/span\u003e\n./cloud-sql-proxy --unix-socket C:\u003cspan class=\"pl-cce\"\u003e\\c\u003c/span\u003eloudsql myproject:my-region:mysql\u003c/pre\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring IAM Database Authentication\u003c/h3\u003e\u003ca id=\"user-content-configuring-iam-database-authentication\" class=\"anchor\" aria-label=\"Permalink: Configuring IAM Database Authentication\" href=\"#configuring-iam-database-authentication\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports \u003ca href=\"https://cloud.google.com/sql/docs/postgres/iam-authentication#auto-iam-auth\" rel=\"nofollow\"\u003eAutomatic IAM Database Authentication\u003c/a\u003e for MySQL\nand Postgres instances, allowing IAM principal's to authenticate and connect\nas database users.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMake sure to configure your \u003ca href=\"https://cloud.google.com/sql/docs/postgres/create-edit-iam-instances#configure-iam-db-instance\" rel=\"nofollow\"\u003eCloud SQL instance to allow IAM authentication\u003c/a\u003e\nand to \u003ca href=\"https://cloud.google.com/sql/docs/postgres/add-manage-iam-users#creating-a-database-user\" rel=\"nofollow\"\u003eadd your IAM principal as a database user\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy --auto-iam-authn \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e./cloud-sql-proxy --auto-iam-authn \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-important\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-report mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eImportant\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMake sure to run the Proxy as the same IAM principal as the database user\nyou want to log in as. Only the IAM principal that is attached to the\n\u003ca href=\"#credentials\"\u003esourced credentials\u003c/a\u003e will be able to successfully log in\nvia automatic IAM database authentication.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWhen logging in using an IAM database user, Cloud SQL truncates usernames\nbased on the engine type in order to not exceed character limits.\nPostgreSQL's username character limit is 63, while MySQL's is 32.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eCloud SQL IAM database usernames are formatted in the following way:\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003ePostgres\u003c/strong\u003e:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFor an IAM user account, this is the user's email address.\u003c/li\u003e\n\u003cli\u003eFor a service account, it is the service account's email without the\n\u003ccode\u003e.gserviceaccount.com\u003c/code\u003e domain suffix.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eMySQL\u003c/strong\u003e:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFor an IAM user account, this is the user's email address,\nwithout the \u003ccode\u003e@\u003c/code\u003e or domain name. For example, for \u003ccode\u003etest-user@gmail.com\u003c/code\u003e,\nthe database user would be \u003ccode\u003etest-user\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFor a service account, this is the service account's email address without\nthe \u003ccode\u003e@project-id.iam.gserviceaccount.com\u003c/code\u003e suffix.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring Service Account Impersonation\u003c/h3\u003e\u003ca id=\"user-content-configuring-service-account-impersonation\" class=\"anchor\" aria-label=\"Permalink: Configuring Service Account Impersonation\" href=\"#configuring-service-account-impersonation\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports \u003ca href=\"https://cloud.google.com/iam/docs/impersonating-service-accounts\" rel=\"nofollow\"\u003eservice account impersonation\u003c/a\u003e.\nThis allows the Proxy to act as a different service account, which can be useful\nfor granting access to resources that are not accessible to the default IAM\nprincipal.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo use service account impersonation, you must have the\n\u003ccode\u003eiam.serviceAccounts.getAccessToken\u003c/code\u003e permission on the IAM principal\nimpersonating another service account. You can grant this permission by assigning\nthe \u003ccode\u003eroles/iam.serviceAccountTokenCreator\u003c/code\u003e role to the IAM principal.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo impersonate a service account, use the \u003ccode\u003e--impersonate-service-account\u003c/code\u003e flag:\u003c/p\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-note\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-info mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe impersonated service account must have the \u003ccode\u003eService Usage Consumer\u003c/code\u003e and\n\u003ccode\u003eCloud SQL Client\u003c/code\u003e permissions.\nAdditionally, to use IAM Authenticated users, add the \u003ccode\u003eCloud SQL Instance User\u003c/code\u003e\npermission.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Starts a listener on localhost:5432 and impersonates the service account\n# \u0026quot;my-other-sa@my-project.iam.gserviceaccount.com\u0026quot;.\n# The Proxy will use the credentials of the principal running the Proxy to\n# generate a short-lived access token for the impersonated service account.\n./cloud-sql-proxy --impersonate-service-account \\\nmy-other-sa@my-project.iam.gserviceaccount.com \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Starts a listener on localhost:5432 and impersonates the service account\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e \"my-other-sa@my-project.iam.gserviceaccount.com\".\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e The Proxy will use the credentials of the principal running the Proxy to\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e generate a short-lived access token for the impersonated service account.\u003c/span\u003e\n./cloud-sql-proxy --impersonate-service-account \\\nmy-other-sa@my-project.iam.gserviceaccount.com \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUsing Advanced Disaster Recovery and DNS domain names to identify instances\u003c/h3\u003e\u003ca id=\"user-content-using-advanced-disaster-recovery-and-dns-domain-names-to-identify-instances\" class=\"anchor\" aria-label=\"Permalink: Using Advanced Disaster Recovery and DNS domain names to identify instances\" href=\"#using-advanced-disaster-recovery-and-dns-domain-names-to-identify-instances\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe proxy can be configured to use DNS to look up an instance.\nUse a DNS name managed by Cloud SQL \u003ca href=\"https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery\" rel=\"nofollow\"\u003eAdvanced Disaster Recovery\u003c/a\u003e,\nor a domain name that you manage.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUsing Advanced Recovery Write Endpoint DNS Name\u003c/h4\u003e\u003ca id=\"user-content-using-advanced-recovery-write-endpoint-dns-name\" class=\"anchor\" aria-label=\"Permalink: Using Advanced Recovery Write Endpoint DNS Name\" href=\"#using-advanced-recovery-write-endpoint-dns-name\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery\" rel=\"nofollow\"\u003eAdvanced Disaster Recovery\u003c/a\u003e\ncreates geographically distributed replicas of your Cloud SQL database instance. When you perform\nswitchover or failover on the database instance, the proxy will gracefully disconnect from the\nold primary instance and reconnect to the new primary instance.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFollow the instructions in \u003ca href=\"https://docs.cloud.google.com/sql/docs/mysql/connect-to-instance-using-write-endpoint\" rel=\"nofollow\"\u003eConnect using Write Endpoint\u003c/a\u003e\nto get the write endpoint DNS name for your primary instance. Then, use this write endpoint DNS\nname to configure the proxy.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfigure your DNS Records\u003c/h4\u003e\u003ca id=\"user-content-configure-your-dns-records\" class=\"anchor\" aria-label=\"Permalink: Configure your DNS Records\" href=\"#configure-your-dns-records\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe proxy may be configured to use DNS that you define as well.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAdd a DNS TXT record for the Cloud SQL instance to a \u003cstrong\u003eprivate\u003c/strong\u003e DNS server\nor a private Google Cloud DNS Zone used by your application.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNote:\u003c/strong\u003e You are strongly discouraged from adding DNS records for your\nCloud SQL instances to a public DNS server. This would allow anyone on the\ninternet to discover the Cloud SQL instance name.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor example: suppose you wanted to use the domain name\n\u003ccode\u003eprod-db.mycompany.example.com\u003c/code\u003e to connect to your database instance\n\u003ccode\u003emy-project:region:my-instance\u003c/code\u003e. You would create the following DNS record:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRecord type: \u003ccode\u003eTXT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eName: \u003ccode\u003eprod-db.mycompany.example.com\u003c/code\u003e – This is the domain name used by the application\u003c/li\u003e\n\u003cli\u003eValue: \u003ccode\u003emy-project:region:my-instance\u003c/code\u003e – This is the instance name\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring the Proxy\u003c/h4\u003e\u003ca id=\"user-content-configuring-the-proxy\" class=\"anchor\" aria-label=\"Permalink: Configuring the Proxy\" href=\"#configuring-the-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eConfigure the Proxy with your DNS domain name instead of an instance connection\nname:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy prod-db.mycompany.example.com\"\u003e\u003cpre\u003e./cloud-sql-proxy prod-db.mycompany.example.com\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAutomatic fail-over using DNS domain names\u003c/h3\u003e\u003ca id=\"user-content-automatic-fail-over-using-dns-domain-names\" class=\"anchor\" aria-label=\"Permalink: Automatic fail-over using DNS domain names\" href=\"#automatic-fail-over-using-dns-domain-names\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhen the Proxy is configured using a domain name, it will\nperiodically check if the DNS record for an instance changes. When the Proxy\ndetects that the domain name refers to a different instance, it will\nclose all open connections to the old instance. Subsequent connection attempts\nwill be directed to the new instance.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor example: suppose application is configured to connect using the\ndomain name \u003ccode\u003eprod-db.mycompany.example.com\u003c/code\u003e. Initially the corporate DNS\nzone has a TXT record with the value \u003ccode\u003emy-project:region:my-instance\u003c/code\u003e. The\napplication establishes connections to the \u003ccode\u003emy-project:region:my-instance\u003c/code\u003e\nCloud SQL instance.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThen, to reconfigure the application to use a different database\ninstance, change the value of the \u003ccode\u003eprod-db.mycompany.example.com\u003c/code\u003e DNS record\nfrom \u003ccode\u003emy-project:region:my-instance\u003c/code\u003e to \u003ccode\u003emy-project:other-region:my-instance-2\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy detects the change to this DNS record.\nNow, when the application connects to its database using the\ndomain name \u003ccode\u003eprod-db.mycompany.example.com\u003c/code\u003e, it will connect to the\n\u003ccode\u003emy-project:other-region:my-instance-2\u003c/code\u003e Cloud SQL instance.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy will automatically close all existing connections to\n\u003ccode\u003emy-project:region:my-instance\u003c/code\u003e. This will force the connection pools to\nestablish new connections. Also, it may cause database queries in progress\nto fail.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy will poll for changes to the DNS name every 30 seconds by default.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTesting Connectivity\u003c/h3\u003e\u003ca id=\"user-content-testing-connectivity\" class=\"anchor\" aria-label=\"Permalink: Testing Connectivity\" href=\"#testing-connectivity\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy includes support for a connection test on startup. This test helps\nensure the Proxy can reach the associated instance and is a quick debugging\ntool. The test will attempt to connect to the specified instance(s) and fail\nif the instance is unreachable. If the test fails, the Proxy will exit with\na non-zero exit code.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy --run-connection-test \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003e./cloud-sql-proxy --run-connection-test \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfig file\u003c/h3\u003e\u003ca id=\"user-content-config-file\" class=\"anchor\" aria-label=\"Permalink: Config file\" href=\"#config-file\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports a configuration file. Supported file types are TOML, JSON,\nand YAML. Load the file with the \u003ccode\u003e--config-file\u003c/code\u003e flag:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy --config-file /path/to/config.[toml|json|yaml]\"\u003e\u003cpre\u003e./cloud-sql-proxy --config-file /path/to/config.[toml\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003ejson\u003cspan class=\"pl-k\"\u003e|\u003c/span\u003eyaml]\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe configuration file format supports all flags. The key names should match\nthe flag names. For example:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-toml notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# use instance-connection-name-0, instance-connection-name-1, etc.\n# for multiple instances\ninstance-connection-name = \u0026quot;proj:region:inst\u0026quot;\nauto-iam-authn = true\ndebug = true\ndebug-logs = true\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e use instance-connection-name-0, instance-connection-name-1, etc.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e for multiple instances\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003einstance-connection-name\u003c/span\u003e = \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eproj:region:inst\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003eauto-iam-authn\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003edebug\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003edebug-logs\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eRun \u003ccode\u003e./cloud-sql-proxy --help\u003c/code\u003e for more details. See the full documentation\nin \u003ca href=\"/GoogleCloudPlatform/cloud-sql-proxy/blob/main/docs/cmd\"\u003edocs/cmd\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfig environment variables\u003c/h3\u003e\u003ca id=\"user-content-config-environment-variables\" class=\"anchor\" aria-label=\"Permalink: Config environment variables\" href=\"#config-environment-variables\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe proxy supports configuration through environment variables.\nEach environment variable uses \"CSQL_PROXY\" as a prefix and is\nthe uppercase version of the flag using underscores as word delimiters.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor example, the \u003ccode\u003e--auto-iam-authn\u003c/code\u003e flag may be set with the environment variable\n\u003ccode\u003eCSQL_PROXY_AUTO_IAM_AUTHN\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAn invocation of the Proxy using environment variables would look like the following:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"CSQL_PROXY_AUTO_IAM_AUTHN=true \\ \n    ./cloud-sql-proxy \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre\u003eCSQL_PROXY_AUTO_IAM_AUTHN=true \u003cspan class=\"pl-cce\"\u003e\\ \u003c/span\u003e\n    ./cloud-sql-proxy \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eINSTANCE_CONNECTION_NAME\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eRun \u003ccode\u003e./cloud-sql-proxy --help\u003c/code\u003e for more details.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfiguring a Lazy Refresh\u003c/h3\u003e\u003ca id=\"user-content-configuring-a-lazy-refresh\" class=\"anchor\" aria-label=\"Permalink: Configuring a Lazy Refresh\" href=\"#configuring-a-lazy-refresh\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003e--lazy-refresh\u003c/code\u003e flag configures the Proxy to retrieve connection info\nlazily and as-needed. Otherwise, no background refresh cycle runs. This setting\nis useful in environments where the CPU may be throttled outside of a request\ncontext, e.g., Cloud Run, Cloud Functions, etc.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAdditional flags\u003c/h3\u003e\u003ca id=\"user-content-additional-flags\" class=\"anchor\" aria-label=\"Permalink: Additional flags\" href=\"#additional-flags\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo see a full list of flags, use:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./cloud-sql-proxy --help\"\u003e\u003cpre\u003e./cloud-sql-proxy --help\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eContainer Images\u003c/h2\u003e\u003ca id=\"user-content-container-images\" class=\"anchor\" aria-label=\"Permalink: Container Images\" href=\"#container-images\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThere are containerized versions of the Proxy available from the following\n\u003ca href=\"https://cloud.google.com/artifact-registry\" rel=\"nofollow\"\u003eArtifact Registry\u003c/a\u003e repositories:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003egcr.io/cloud-sql-connectors/cloud-sql-proxy\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eus.gcr.io/cloud-sql-connectors/cloud-sql-proxy\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eeu.gcr.io/cloud-sql-connectors/cloud-sql-proxy\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003easia.gcr.io/cloud-sql-connectors/cloud-sql-proxy\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-note\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-info mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe above container images were migrated from Google Container Registry (deprecated)\nto Artifact Registry which is why they begin with the old naming pattern (\u003ccode\u003egcr.io\u003c/code\u003e)\u003c/p\u003e\n\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEach image is tagged with the associated Proxy version. The following tags are\ncurrently supported:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e$VERSION\u003c/code\u003e (default)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e$VERSION-alpine\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e$VERSION-bookworm\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003e$VERSION\u003c/code\u003e is the Proxy version without the leading \"v\" (e.g.,\n\u003ccode\u003e2.25.4\u003c/code\u003e).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eFor example, to pull a particular version, use a command like:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# $VERSION is 2.25.4\ndocker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.25.4\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e $VERSION is 2.25.4\u003c/span\u003e\ndocker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.25.4\u003c/pre\u003e\u003c/div\u003e\n\n\u003cp dir=\"auto\"\u003eWe recommend pinning to a specific version tag and using automation with a CI pipeline\nto update regularly.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe default container image uses \u003ca href=\"https://github.com/GoogleContainerTools/distroless\"\u003edistroless\u003c/a\u003e with a non-root user. If you\nneed a shell or related tools, use the Alpine or Debian-based container image\n(bookworm) listed above.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eWorking with Docker and the Proxy\u003c/h3\u003e\u003ca id=\"user-content-working-with-docker-and-the-proxy\" class=\"anchor\" aria-label=\"Permalink: Working with Docker and the Proxy\" href=\"#working-with-docker-and-the-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe containers have the proxy as an \u003ccode\u003eENTRYPOINT\u003c/code\u003e so, to use the proxy from a\ncontainer, all you need to do is specify options using the command, and expose\nthe proxy's internal port to the host. For example, you can use:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run --publish \u0026lt;host-port\u0026gt;:\u0026lt;proxy-port\u0026gt; \\\n    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\\n    --address \u0026quot;0.0.0.0\u0026quot; --port \u0026lt;proxy-port\u0026gt; \u0026lt;instance-connection-name\u0026gt;\"\u003e\u003cpre\u003edocker run --publish \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003ehost-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e:\u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eproxy-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e \\\n    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\\n    --address \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e0.0.0.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --port \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eproxy-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003einstance-connection-name\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eYou'll need the \u003ccode\u003e--address \"0.0.0.0\"\u003c/code\u003e so that the proxy doesn't only listen for\nconnections originating from \u003cem\u003ewithin\u003c/em\u003e the container.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eYou will need to authenticate using one of the methods outlined in the\n\u003ca href=\"#credentials\"\u003ecredentials\u003c/a\u003e section. If using a credentials file you must mount\nthe file and ensure that the non-root user that runs the proxy has \u003cem\u003eread access\u003c/em\u003e\nto the file. These alternatives might help:\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003eChange the group of your local file and add read permissions to the group\nwith \u003ccode\u003echgrp 65532 key.json \u0026amp;\u0026amp; chmod g+r key.json\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eIf you can't control your file's group, you can directly change the public\npermissions of your file by doing \u003ccode\u003echmod o+r key.json\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-alert markdown-alert-warning\" dir=\"auto\"\u003e\u003cp class=\"markdown-alert-title\" dir=\"auto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-alert mr-2\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eWarning\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis can be insecure because it allows any user in the host system to read\nthe credential file which they can use to authenticate to services in GCP.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor example, a full command using a JSON credentials file might look like\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run \\\n    --publish \u0026lt;host-port\u0026gt;:\u0026lt;proxy-port\u0026gt; \\\n    --mount type=bind,source=\u0026quot;$(pwd)\u0026quot;/sa.json,target=/config/sa.json \\\n    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\\n    --address 0.0.0.0 \\\n    --port \u0026lt;proxy-port\u0026gt; \\\n    --credentials-file /config/sa.json \u0026lt;instance-connection-name\u0026gt;\"\u003e\u003cpre\u003edocker run \\\n    --publish \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003ehost-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e:\u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eproxy-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e \\\n    --mount type=bind,source=\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e$(\u003c/span\u003epwd\u003cspan class=\"pl-pds\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e/sa.json,target=/config/sa.json \\\n    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\\n    --address 0.0.0.0 \\\n    --port \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003eproxy-port\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e \\\n    --credentials-file /config/sa.json \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003einstance-connection-name\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRunning as a Kubernetes Sidecar\u003c/h2\u003e\u003ca id=\"user-content-running-as-a-kubernetes-sidecar\" class=\"anchor\" aria-label=\"Permalink: Running as a Kubernetes Sidecar\" href=\"#running-as-a-kubernetes-sidecar\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSee the \u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/master/examples/k8s-sidecar#run-the-cloud-sql-proxy-as-a-sidecar\"\u003eexample here\u003c/a\u003e as well as \u003ca href=\"https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine\" rel=\"nofollow\"\u003eConnecting from Google\nKubernetes Engine\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRunning behind a Socks5 proxy\u003c/h2\u003e\u003ca id=\"user-content-running-behind-a-socks5-proxy\" class=\"anchor\" aria-label=\"Permalink: Running behind a Socks5 proxy\" href=\"#running-behind-a-socks5-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Auth Proxy includes support for sending requests through a SOCKS5\nproxy. If a SOCKS5 proxy is running on \u003ccode\u003elocalhost:8000\u003c/code\u003e, the command to start\nthe Cloud SQL Auth Proxy would look like:\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"ALL_PROXY=socks5://localhost:8000 \\\nHTTPS_PROXY=socks5://localhost:8000 \\\n    cloud-sql-proxy \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eALL_PROXY=socks5://localhost:8000 \\\nHTTPS_PROXY=socks5://localhost:8000 \\\n    cloud-sql-proxy \u0026lt;INSTANCE_CONNECTION_NAME\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003eALL_PROXY\u003c/code\u003e environment variable specifies the proxy for all TCP\ntraffic to and from a Cloud SQL instance. The \u003ccode\u003eALL_PROXY\u003c/code\u003e environment variable\nsupports \u003ccode\u003esocks5\u003c/code\u003e and \u003ccode\u003esocks5h\u003c/code\u003e protocols. To route DNS lookups through a proxy,\nuse the \u003ccode\u003esocks5h\u003c/code\u003e protocol.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003eHTTPS_PROXY\u003c/code\u003e (or \u003ccode\u003eHTTP_PROXY\u003c/code\u003e) specifies the proxy for all HTTP(S) traffic\nto the SQL Admin API. Specifying \u003ccode\u003eHTTPS_PROXY\u003c/code\u003e or \u003ccode\u003eHTTP_PROXY\u003c/code\u003e is only necessary\nwhen you want to proxy this traffic. Otherwise, it is optional. See\n\u003ca href=\"https://pkg.go.dev/net/http@go1.17.3#ProxyFromEnvironment\" rel=\"nofollow\"\u003e\u003ccode\u003ehttp.ProxyFromEnvironment\u003c/code\u003e\u003c/a\u003e\nfor possible values.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSupport for Metrics and Tracing\u003c/h2\u003e\u003ca id=\"user-content-support-for-metrics-and-tracing\" class=\"anchor\" aria-label=\"Permalink: Support for Metrics and Tracing\" href=\"#support-for-metrics-and-tracing\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy supports \u003ca href=\"https://cloud.google.com/monitoring\" rel=\"nofollow\"\u003eCloud Monitoring\u003c/a\u003e, \u003ca href=\"https://cloud.google.com/trace\" rel=\"nofollow\"\u003eCloud Trace\u003c/a\u003e, and \u003ca href=\"https://prometheus.io/\" rel=\"nofollow\"\u003ePrometheus\u003c/a\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSupported metrics include:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ecloudsqlconn/dial_latency\u003c/code\u003e: The distribution of dialer latencies (ms)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloudsqlconn/open_connections\u003c/code\u003e: The current number of open Cloud SQL\nconnections\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloudsqlconn/dial_failure_count\u003c/code\u003e: The number of failed dial attempts\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloudsqlconn/refresh_success_count\u003c/code\u003e: The number of successful certificate\nrefresh operations\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloudsqlconn/refresh_failure_count\u003c/code\u003e: The number of failed refresh\noperations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eSupported traces include:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ecloud.google.com/go/cloudsqlconn.Dial\u003c/code\u003e: The dial operation including\nrefreshing an ephemeral certificate and connecting the instance\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloud.google.com/go/cloudsqlconn/internal.InstanceInfo\u003c/code\u003e: The call to retrieve\ninstance metadata (e.g., database engine type, IP address, etc)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecloud.google.com/go/cloudsqlconn/internal.Connect\u003c/code\u003e: The connection attempt\nusing the ephemeral certificate\u003c/li\u003e\n\u003cli\u003eSQL Admin API client operations\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eTo enable Cloud Monitoring and Cloud Trace, use the \u003ccode\u003e--telemetry-project\u003c/code\u003e flag\nwith the project where you want to view metrics and traces. To configure the\nmetrics prefix used by Cloud Monitoring, use the \u003ccode\u003e--telemetry-prefix\u003c/code\u003e flag. When\nenabling telemetry, both Cloud Monitoring and Cloud Trace are enabled. To\ndisable Cloud Monitoring, use \u003ccode\u003e--disable-metrics\u003c/code\u003e. To disable Cloud Trace, use\n\u003ccode\u003e--disable-traces\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo enable Prometheus, use the \u003ccode\u003e--prometheus\u003c/code\u003e flag. This will start an HTTP\nserver on localhost with a \u003ccode\u003e/metrics\u003c/code\u003e endpoint. The Prometheus namespace may\noptionally be set with \u003ccode\u003e--prometheus-namespace\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDebug logging\u003c/h2\u003e\u003ca id=\"user-content-debug-logging\" class=\"anchor\" aria-label=\"Permalink: Debug logging\" href=\"#debug-logging\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo enable debug logging to report on internal certificate refresh operations,\nuse the \u003ccode\u003e--debug-logs\u003c/code\u003e flag. Typical use of the Proxy should not require debug\nlogs, but if you are surprised by the Proxy's behavior, debug logging should\nprovide insight into internal operations and can help when reporting issues.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLocalhost Admin Server\u003c/h2\u003e\u003ca id=\"user-content-localhost-admin-server\" class=\"anchor\" aria-label=\"Permalink: Localhost Admin Server\" href=\"#localhost-admin-server\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy includes support for an admin server on localhost. By default, the\nthe admin server is not enabled. To enable the server, pass the --debug or\n--quitquitquit flag. This will start the server on localhost at port 9091.\nTo change the port, use the --admin-port flag.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWhen --debug is set, the admin server enables Go's profiler available at\n/debug/pprof/.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSee the \u003ca href=\"https://pkg.go.dev/net/http/pprof.\" rel=\"nofollow\"\u003edocumentation on pprof\u003c/a\u003e for details on how to use the\nprofiler.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWhen --quitquitquit is set, the admin server adds an endpoint at\n/quitquitquit. The admin server exits gracefully when it receives a GET or POST\nrequest at /quitquitquit.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFrequently Asked Questions\u003c/h2\u003e\u003ca id=\"user-content-frequently-asked-questions\" class=\"anchor\" aria-label=\"Permalink: Frequently Asked Questions\" href=\"#frequently-asked-questions\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eWhy would I use the Proxy?\u003c/h3\u003e\u003ca id=\"user-content-why-would-i-use-the-proxy\" class=\"anchor\" aria-label=\"Permalink: Why would I use the Proxy?\" href=\"#why-would-i-use-the-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy is a convenient way to control access to your database using IAM\npermissions while ensuring a secure connection to your Cloud SQL instance. When\nusing the Proxy, you do not have to manage database client certificates,\nconfigured Authorized Networks, or ensure clients connect securely. The Proxy\nhandles all of this for you.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eHow should I use the Proxy?\u003c/h3\u003e\u003ca id=\"user-content-how-should-i-use-the-proxy\" class=\"anchor\" aria-label=\"Permalink: How should I use the Proxy?\" href=\"#how-should-i-use-the-proxy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy is a gateway to your Cloud SQL instance. Clients connect to the Proxy\nover an unencrypted connection and are authorized using the environment's IAM\nprincipal. The Proxy then encrypts the connection to your Cloud SQL instance.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eBecause client connections are not encrypted and authorized using the\nenvironment's IAM principal, we recommend running the Proxy on the same VM or\nKubernetes pod as your application and using the Proxy's default behavior of\nallowing connections from only the local network interface. This is the most\nsecure configuration: unencrypted traffic does not leave the VM, and only\nconnections from applications on the VM are allowed.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eHere are some common examples of how to run the Proxy in different environments:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/mysql/connect-instance-local-computer\" rel=\"nofollow\"\u003eConnect to Cloud SQL for MySQL from your local computer\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/mysql/connect-instance-kubernetes\" rel=\"nofollow\"\u003eConnect to Cloud SQL for MySQL from Google Kubernetes Engine\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eWhy can't the Proxy connect to my private IP instance?\u003c/h3\u003e\u003ca id=\"user-content-why-cant-the-proxy-connect-to-my-private-ip-instance\" class=\"anchor\" aria-label=\"Permalink: Why can't the Proxy connect to my private IP instance?\" href=\"#why-cant-the-proxy-connect-to-my-private-ip-instance\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Proxy does not configure the network between the VM it's running on and the\nCloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL\ninstance, either by deploying it in a VPC that has access to your Private IP\ninstance, or by configuring Public IP.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eShould I use the Proxy for large deployments?\u003c/h3\u003e\u003ca id=\"user-content-should-i-use-the-proxy-for-large-deployments\" class=\"anchor\" aria-label=\"Permalink: Should I use the Proxy for large deployments?\" href=\"#should-i-use-the-proxy-for-large-deployments\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWe recommend deploying the Proxy on the host machines that are running the\napplication. However, large deployments may exceed the request quota for the SQL\nAdmin API . If your Proxy reports request quota errors, we recommend deploying\nthe Proxy with a connection pooler like \u003ca href=\"https://www.pgbouncer.org/\" rel=\"nofollow\"\u003epgbouncer\u003c/a\u003e or \u003ca href=\"https://www.proxysql.com/\" rel=\"nofollow\"\u003eProxySQL\u003c/a\u003e. For\ndetails, see \u003ca href=\"https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-service\"\u003eRunning the Cloud SQL Proxy as a Service\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCan I share the Proxy across multiple applications?\u003c/h3\u003e\u003ca id=\"user-content-can-i-share-the-proxy-across-multiple-applications\" class=\"anchor\" aria-label=\"Permalink: Can I share the Proxy across multiple applications?\" href=\"#can-i-share-the-proxy-across-multiple-applications\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInstead of using a single Proxy across multiple applications, we recommend using\none Proxy instance for every application process. The Proxy uses the context's\nIAM principal and so have a 1-to-1 mapping between application and IAM principal\nis best. If multiple applications use the same Proxy instance, then it becomes\nunclear from an IAM perspective which principal is doing what.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eHow do I verify the shasum of a downloaded Proxy binary?\u003c/h3\u003e\u003ca id=\"user-content-how-do-i-verify-the-shasum-of-a-downloaded-proxy-binary\" class=\"anchor\" aria-label=\"Permalink: How do I verify the shasum of a downloaded Proxy binary?\" href=\"#how-do-i-verify-the-shasum-of-a-downloaded-proxy-binary\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAfter downloading a binary from the releases page, copy the sha256sum value\nthat corresponds with the binary you chose.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThen run this command (make sure to add the asterisk before the file name):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"echo '\u0026lt;RELEASE_PAGE_SHA_HERE\u0026gt; *\u0026lt;NAME_OF_FILE_HERE\u0026gt;' | shasum -c\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003eecho\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u0026lt;RELEASE_PAGE_SHA_HERE\u0026gt; *\u0026lt;NAME_OF_FILE_HERE\u0026gt;\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e shasum -c\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor example, after downloading the v2.1.0 release of the Linux AMD64 Proxy, you\nwould run:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ echo \u0026quot;547b24faf0dfe5e3d16bbc9f751dfa6b34dfd5e83f618f43a2988283de5208f2 *cloud-sql-proxy\u0026quot; | shasum -c\ncloud-sql-proxy: OK\"\u003e\u003cpre\u003e$ \u003cspan class=\"pl-c1\"\u003eecho\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e547b24faf0dfe5e3d16bbc9f751dfa6b34dfd5e83f618f43a2988283de5208f2 *cloud-sql-proxy\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e|\u003c/span\u003e shasum -c\ncloud-sql-proxy: OK\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you see \u003ccode\u003eOK\u003c/code\u003e, the binary is a verified match.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eReference Documentation\u003c/h2\u003e\u003ca id=\"user-content-reference-documentation\" class=\"anchor\" aria-label=\"Permalink: Reference Documentation\" href=\"#reference-documentation\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql\" rel=\"nofollow\"\u003eCloud SQL\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/mysql/sql-proxy\" rel=\"nofollow\"\u003eCloud SQL Auth Proxy Documentation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/mysql/quickstarts\" rel=\"nofollow\"\u003eCloud SQL Auth Proxy Quickstarts\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.google.com/sql/docs/mysql/samples\" rel=\"nofollow\"\u003eCloud SQL Code Samples\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pkg.go.dev/github.com/GoogleCloudPlatform/cloudsql-proxy\" rel=\"nofollow\"\u003eCloud SQL Auth Proxy Package Documentation\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSupport policy\u003c/h2\u003e\u003ca id=\"user-content-support-policy\" class=\"anchor\" aria-label=\"Permalink: Support policy\" href=\"#support-policy\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eMajor version lifecycle\u003c/h3\u003e\u003ca id=\"user-content-major-version-lifecycle\" class=\"anchor\" aria-label=\"Permalink: Major version lifecycle\" href=\"#major-version-lifecycle\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis project uses \u003ca href=\"https://semver.org/\" rel=\"nofollow\"\u003esemantic versioning\u003c/a\u003e, and uses the\nfollowing lifecycle regarding support for a major version:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eActive\u003c/strong\u003e - Active versions get all new features and security fixes (that\nwouldn’t otherwise introduce a breaking change). New major versions are\nguaranteed to be \"active\" for a minimum of 1 year.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eMaintenance\u003c/strong\u003e - Maintenance versions continue to receive security and critical\nbug fixes, but do not receive new features.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRelease cadence\u003c/h3\u003e\u003ca id=\"user-content-release-cadence\" class=\"anchor\" aria-label=\"Permalink: Release cadence\" href=\"#release-cadence\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe Cloud SQL Auth Proxy aims for a minimum monthly release cadence. If no new\nfeatures or fixes have been added, a new PATCH version with the latest\ndependencies is released.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWe support releases for 1 year from the release date.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eContributing\u003c/h2\u003e\u003ca id=\"user-content-contributing\" class=\"anchor\" aria-label=\"Permalink: Contributing\" href=\"#contributing\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eContributions are welcome. Please, see the \u003ca href=\"/GoogleCloudPlatform/cloud-sql-proxy/blob/main/CONTRIBUTING.md\"\u003eCONTRIBUTING\u003c/a\u003e document\nfor details.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003ePlease note that this project is released with a Contributor Code of Conduct.\nBy participating in this project you agree to abide by its terms. See\n\u003ca href=\"/GoogleCloudPlatform/cloud-sql-proxy/blob/main/CODE_OF_CONDUCT.md\"\u003eContributor Code of Conduct\u003c/a\u003e for more information.\u003c/p\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"Cloud SQL Auth Proxy","fully_qualified_name":"Cloud SQL Auth Proxy","kind":"section_1","ident_start":2,"ident_end":22,"extent_start":0,"extent_end":33144,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":22}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":890,"utf16_col":0}}},{"name":"Installation","fully_qualified_name":"Installation","kind":"section_2","ident_start":3213,"ident_end":3225,"extent_start":3210,"extent_end":5953,"ident_utf16":{"start":{"line_number":64,"utf16_col":3},"end":{"line_number":64,"utf16_col":15}},"extent_utf16":{"start":{"line_number":64,"utf16_col":0},"end":{"line_number":192,"utf16_col":0}}},{"name":"Install from Source","fully_qualified_name":"Install from Source","kind":"section_3","ident_start":5650,"ident_end":5669,"extent_start":5646,"extent_end":5953,"ident_utf16":{"start":{"line_number":180,"utf16_col":4},"end":{"line_number":180,"utf16_col":23}},"extent_utf16":{"start":{"line_number":180,"utf16_col":0},"end":{"line_number":192,"utf16_col":0}}},{"name":"Usage","fully_qualified_name":"Usage","kind":"section_2","ident_start":5956,"ident_end":5961,"extent_start":5953,"extent_end":19556,"ident_utf16":{"start":{"line_number":192,"utf16_col":3},"end":{"line_number":192,"utf16_col":8}},"extent_utf16":{"start":{"line_number":192,"utf16_col":0},"end":{"line_number":574,"utf16_col":0}}},{"name":"Credentials","fully_qualified_name":"Credentials","kind":"section_3","ident_start":6334,"ident_end":6345,"extent_start":6330,"extent_end":7518,"ident_utf16":{"start":{"line_number":204,"utf16_col":4},"end":{"line_number":204,"utf16_col":15}},"extent_utf16":{"start":{"line_number":204,"utf16_col":0},"end":{"line_number":237,"utf16_col":0}}},{"name":"Basic Usage","fully_qualified_name":"Basic Usage","kind":"section_3","ident_start":7522,"ident_end":7533,"extent_start":7518,"extent_end":8119,"ident_utf16":{"start":{"line_number":237,"utf16_col":4},"end":{"line_number":237,"utf16_col":15}},"extent_utf16":{"start":{"line_number":237,"utf16_col":0},"end":{"line_number":260,"utf16_col":0}}},{"name":"Configuring Port","fully_qualified_name":"Configuring Port","kind":"section_3","ident_start":8123,"ident_end":8139,"extent_start":8119,"extent_end":8940,"ident_utf16":{"start":{"line_number":260,"utf16_col":4},"end":{"line_number":260,"utf16_col":20}},"extent_utf16":{"start":{"line_number":260,"utf16_col":0},"end":{"line_number":287,"utf16_col":0}}},{"name":"Configuring Listening Address","fully_qualified_name":"Configuring Listening Address","kind":"section_3","ident_start":8944,"ident_end":8973,"extent_start":8940,"extent_end":9487,"ident_utf16":{"start":{"line_number":287,"utf16_col":4},"end":{"line_number":287,"utf16_col":33}},"extent_utf16":{"start":{"line_number":287,"utf16_col":0},"end":{"line_number":306,"utf16_col":0}}},{"name":"Configuring Private IP","fully_qualified_name":"Configuring Private IP","kind":"section_3","ident_start":9491,"ident_end":9513,"extent_start":9487,"extent_end":10057,"ident_utf16":{"start":{"line_number":306,"utf16_col":4},"end":{"line_number":306,"utf16_col":26}},"extent_utf16":{"start":{"line_number":306,"utf16_col":0},"end":{"line_number":323,"utf16_col":0}}},{"name":"Configuring Unix domain sockets","fully_qualified_name":"Configuring Unix domain sockets","kind":"section_3","ident_start":10061,"ident_end":10092,"extent_start":10057,"extent_end":11148,"ident_utf16":{"start":{"line_number":323,"utf16_col":4},"end":{"line_number":323,"utf16_col":35}},"extent_utf16":{"start":{"line_number":323,"utf16_col":0},"end":{"line_number":359,"utf16_col":0}}},{"name":"Configuring IAM Database Authentication","fully_qualified_name":"Configuring IAM Database Authentication","kind":"section_3","ident_start":11152,"ident_end":11191,"extent_start":11148,"extent_end":12701,"ident_utf16":{"start":{"line_number":359,"utf16_col":4},"end":{"line_number":359,"utf16_col":43}},"extent_utf16":{"start":{"line_number":359,"utf16_col":0},"end":{"line_number":398,"utf16_col":0}}},{"name":"Configuring Service Account Impersonation","fully_qualified_name":"Configuring Service Account Impersonation","kind":"section_3","ident_start":12705,"ident_end":12746,"extent_start":12701,"extent_end":14033,"ident_utf16":{"start":{"line_number":398,"utf16_col":4},"end":{"line_number":398,"utf16_col":45}},"extent_utf16":{"start":{"line_number":398,"utf16_col":0},"end":{"line_number":429,"utf16_col":0}}},{"name":"Using Advanced Disaster Recovery and DNS domain names to identify instances","fully_qualified_name":"Using Advanced Disaster Recovery and DNS domain names to identify instances","kind":"section_3","ident_start":14037,"ident_end":14112,"extent_start":14033,"extent_end":16038,"ident_utf16":{"start":{"line_number":429,"utf16_col":4},"end":{"line_number":429,"utf16_col":79}},"extent_utf16":{"start":{"line_number":429,"utf16_col":0},"end":{"line_number":474,"utf16_col":0}}},{"name":"Using Advanced Recovery Write Endpoint DNS Name","fully_qualified_name":"Using Advanced Recovery Write Endpoint DNS Name","kind":"section_4","ident_start":14360,"ident_end":14407,"extent_start":14355,"extent_end":15044,"ident_utf16":{"start":{"line_number":435,"utf16_col":5},"end":{"line_number":435,"utf16_col":52}},"extent_utf16":{"start":{"line_number":435,"utf16_col":0},"end":{"line_number":446,"utf16_col":0}}},{"name":"Configure your DNS Records","fully_qualified_name":"Configure your DNS Records","kind":"section_4","ident_start":15049,"ident_end":15075,"extent_start":15044,"extent_end":15864,"ident_utf16":{"start":{"line_number":446,"utf16_col":5},"end":{"line_number":446,"utf16_col":31}},"extent_utf16":{"start":{"line_number":446,"utf16_col":0},"end":{"line_number":465,"utf16_col":0}}},{"name":"Configuring the Proxy","fully_qualified_name":"Configuring the Proxy","kind":"section_4","ident_start":15869,"ident_end":15890,"extent_start":15864,"extent_end":16038,"ident_utf16":{"start":{"line_number":465,"utf16_col":5},"end":{"line_number":465,"utf16_col":26}},"extent_utf16":{"start":{"line_number":465,"utf16_col":0},"end":{"line_number":474,"utf16_col":0}}},{"name":"Automatic fail-over using DNS domain names","fully_qualified_name":"Automatic fail-over using DNS domain names","kind":"section_3","ident_start":16042,"ident_end":16084,"extent_start":16038,"extent_end":17480,"ident_utf16":{"start":{"line_number":474,"utf16_col":4},"end":{"line_number":474,"utf16_col":46}},"extent_utf16":{"start":{"line_number":474,"utf16_col":0},"end":{"line_number":504,"utf16_col":0}}},{"name":"Testing Connectivity","fully_qualified_name":"Testing Connectivity","kind":"section_3","ident_start":17484,"ident_end":17504,"extent_start":17480,"extent_end":17916,"ident_utf16":{"start":{"line_number":504,"utf16_col":4},"end":{"line_number":504,"utf16_col":24}},"extent_utf16":{"start":{"line_number":504,"utf16_col":0},"end":{"line_number":516,"utf16_col":0}}},{"name":"Config file","fully_qualified_name":"Config file","kind":"section_3","ident_start":17920,"ident_end":17931,"extent_start":17916,"extent_end":18560,"ident_utf16":{"start":{"line_number":516,"utf16_col":4},"end":{"line_number":516,"utf16_col":15}},"extent_utf16":{"start":{"line_number":516,"utf16_col":0},"end":{"line_number":540,"utf16_col":0}}},{"name":"Config environment variables","fully_qualified_name":"Config environment variables","kind":"section_3","ident_start":18564,"ident_end":18592,"extent_start":18560,"extent_end":19145,"ident_utf16":{"start":{"line_number":540,"utf16_col":4},"end":{"line_number":540,"utf16_col":32}},"extent_utf16":{"start":{"line_number":540,"utf16_col":0},"end":{"line_number":558,"utf16_col":0}}},{"name":"Configuring a Lazy Refresh","fully_qualified_name":"Configuring a Lazy Refresh","kind":"section_3","ident_start":19149,"ident_end":19175,"extent_start":19145,"extent_end":19459,"ident_utf16":{"start":{"line_number":558,"utf16_col":4},"end":{"line_number":558,"utf16_col":30}},"extent_utf16":{"start":{"line_number":558,"utf16_col":0},"end":{"line_number":565,"utf16_col":0}}},{"name":"Additional flags","fully_qualified_name":"Additional flags","kind":"section_3","ident_start":19463,"ident_end":19479,"extent_start":19459,"extent_end":19556,"ident_utf16":{"start":{"line_number":565,"utf16_col":4},"end":{"line_number":565,"utf16_col":20}},"extent_utf16":{"start":{"line_number":565,"utf16_col":0},"end":{"line_number":574,"utf16_col":0}}},{"name":"Container Images","fully_qualified_name":"Container Images","kind":"section_2","ident_start":19559,"ident_end":19575,"extent_start":19556,"extent_end":22643,"ident_utf16":{"start":{"line_number":574,"utf16_col":3},"end":{"line_number":574,"utf16_col":19}},"extent_utf16":{"start":{"line_number":574,"utf16_col":0},"end":{"line_number":659,"utf16_col":0}}},{"name":"Working with Docker and the Proxy","fully_qualified_name":"Working with Docker and the Proxy","kind":"section_3","ident_start":20964,"ident_end":20997,"extent_start":20960,"extent_end":22643,"ident_utf16":{"start":{"line_number":617,"utf16_col":4},"end":{"line_number":617,"utf16_col":37}},"extent_utf16":{"start":{"line_number":617,"utf16_col":0},"end":{"line_number":659,"utf16_col":0}}},{"name":"Running as a Kubernetes Sidecar","fully_qualified_name":"Running as a Kubernetes Sidecar","kind":"section_2","ident_start":22646,"ident_end":22677,"extent_start":22643,"extent_end":22791,"ident_utf16":{"start":{"line_number":659,"utf16_col":3},"end":{"line_number":659,"utf16_col":34}},"extent_utf16":{"start":{"line_number":659,"utf16_col":0},"end":{"line_number":664,"utf16_col":0}}},{"name":"Running behind a Socks5 proxy","fully_qualified_name":"Running behind a Socks5 proxy","kind":"section_2","ident_start":22794,"ident_end":22823,"extent_start":22791,"extent_end":23754,"ident_utf16":{"start":{"line_number":664,"utf16_col":3},"end":{"line_number":664,"utf16_col":32}},"extent_utf16":{"start":{"line_number":664,"utf16_col":0},"end":{"line_number":687,"utf16_col":0}}},{"name":"Support for Metrics and Tracing","fully_qualified_name":"Support for Metrics and Tracing","kind":"section_2","ident_start":23757,"ident_end":23788,"extent_start":23754,"extent_end":25382,"ident_utf16":{"start":{"line_number":687,"utf16_col":3},"end":{"line_number":687,"utf16_col":34}},"extent_utf16":{"start":{"line_number":687,"utf16_col":0},"end":{"line_number":723,"utf16_col":0}}},{"name":"Debug logging","fully_qualified_name":"Debug logging","kind":"section_2","ident_start":25385,"ident_end":25398,"extent_start":25382,"extent_end":25712,"ident_utf16":{"start":{"line_number":723,"utf16_col":3},"end":{"line_number":723,"utf16_col":16}},"extent_utf16":{"start":{"line_number":723,"utf16_col":0},"end":{"line_number":730,"utf16_col":0}}},{"name":"Localhost Admin Server","fully_qualified_name":"Localhost Admin Server","kind":"section_2","ident_start":25715,"ident_end":25737,"extent_start":25712,"extent_end":26401,"ident_utf16":{"start":{"line_number":730,"utf16_col":3},"end":{"line_number":730,"utf16_col":25}},"extent_utf16":{"start":{"line_number":730,"utf16_col":0},"end":{"line_number":749,"utf16_col":0}}},{"name":"Frequently Asked Questions","fully_qualified_name":"Frequently Asked Questions","kind":"section_2","ident_start":26404,"ident_end":26430,"extent_start":26401,"extent_end":29825,"ident_utf16":{"start":{"line_number":749,"utf16_col":3},"end":{"line_number":749,"utf16_col":29}},"extent_utf16":{"start":{"line_number":749,"utf16_col":0},"end":{"line_number":828,"utf16_col":0}}},{"name":"Why would I use the Proxy?","fully_qualified_name":"Why would I use the Proxy?","kind":"section_3","ident_start":26436,"ident_end":26462,"extent_start":26432,"extent_end":26800,"ident_utf16":{"start":{"line_number":751,"utf16_col":4},"end":{"line_number":751,"utf16_col":30}},"extent_utf16":{"start":{"line_number":751,"utf16_col":0},"end":{"line_number":759,"utf16_col":0}}},{"name":"How should I use the Proxy?","fully_qualified_name":"How should I use the Proxy?","kind":"section_3","ident_start":26804,"ident_end":26831,"extent_start":26800,"extent_end":27921,"ident_utf16":{"start":{"line_number":759,"utf16_col":4},"end":{"line_number":759,"utf16_col":31}},"extent_utf16":{"start":{"line_number":759,"utf16_col":0},"end":{"line_number":780,"utf16_col":0}}},{"name":"Why can't the Proxy connect to my private IP instance?","fully_qualified_name":"Why can't the Proxy connect to my private IP instance?","kind":"section_3","ident_start":27925,"ident_end":27979,"extent_start":27921,"extent_end":28249,"ident_utf16":{"start":{"line_number":780,"utf16_col":4},"end":{"line_number":780,"utf16_col":58}},"extent_utf16":{"start":{"line_number":780,"utf16_col":0},"end":{"line_number":787,"utf16_col":0}}},{"name":"Should I use the Proxy for large deployments?","fully_qualified_name":"Should I use the Proxy for large deployments?","kind":"section_3","ident_start":28253,"ident_end":28298,"extent_start":28249,"extent_end":28685,"ident_utf16":{"start":{"line_number":787,"utf16_col":4},"end":{"line_number":787,"utf16_col":49}},"extent_utf16":{"start":{"line_number":787,"utf16_col":0},"end":{"line_number":795,"utf16_col":0}}},{"name":"Can I share the Proxy across multiple applications?","fully_qualified_name":"Can I share the Proxy across multiple applications?","kind":"section_3","ident_start":28689,"ident_end":28740,"extent_start":28685,"extent_end":29126,"ident_utf16":{"start":{"line_number":795,"utf16_col":4},"end":{"line_number":795,"utf16_col":55}},"extent_utf16":{"start":{"line_number":795,"utf16_col":0},"end":{"line_number":803,"utf16_col":0}}},{"name":"How do I verify the shasum of a downloaded Proxy binary?","fully_qualified_name":"How do I verify the shasum of a downloaded Proxy binary?","kind":"section_3","ident_start":29130,"ident_end":29186,"extent_start":29126,"extent_end":29825,"ident_utf16":{"start":{"line_number":803,"utf16_col":4},"end":{"line_number":803,"utf16_col":60}},"extent_utf16":{"start":{"line_number":803,"utf16_col":0},"end":{"line_number":828,"utf16_col":0}}},{"name":"Reference Documentation","fully_qualified_name":"Reference Documentation","kind":"section_2","ident_start":29828,"ident_end":29851,"extent_start":29825,"extent_end":30078,"ident_utf16":{"start":{"line_number":828,"utf16_col":3},"end":{"line_number":828,"utf16_col":26}},"extent_utf16":{"start":{"line_number":828,"utf16_col":0},"end":{"line_number":836,"utf16_col":0}}},{"name":"Support policy","fully_qualified_name":"Support policy","kind":"section_2","ident_start":30081,"ident_end":30095,"extent_start":30078,"extent_end":30845,"ident_utf16":{"start":{"line_number":836,"utf16_col":3},"end":{"line_number":836,"utf16_col":17}},"extent_utf16":{"start":{"line_number":836,"utf16_col":0},"end":{"line_number":858,"utf16_col":0}}},{"name":"Major version lifecycle","fully_qualified_name":"Major version lifecycle","kind":"section_3","ident_start":30101,"ident_end":30124,"extent_start":30097,"extent_end":30592,"ident_utf16":{"start":{"line_number":838,"utf16_col":4},"end":{"line_number":838,"utf16_col":27}},"extent_utf16":{"start":{"line_number":838,"utf16_col":0},"end":{"line_number":850,"utf16_col":0}}},{"name":"Release cadence","fully_qualified_name":"Release cadence","kind":"section_3","ident_start":30596,"ident_end":30611,"extent_start":30592,"extent_end":30845,"ident_utf16":{"start":{"line_number":850,"utf16_col":4},"end":{"line_number":850,"utf16_col":19}},"extent_utf16":{"start":{"line_number":850,"utf16_col":0},"end":{"line_number":858,"utf16_col":0}}},{"name":"Contributing","fully_qualified_name":"Contributing","kind":"section_2","ident_start":30848,"ident_end":30860,"extent_start":30845,"extent_end":33144,"ident_utf16":{"start":{"line_number":858,"utf16_col":3},"end":{"line_number":858,"utf16_col":15}},"extent_utf16":{"start":{"line_number":858,"utf16_col":0},"end":{"line_number":890,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":43526067,"defaultBranch":"main","name":"cloud-sql-proxy","ownerLogin":"GoogleCloudPlatform","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-10-01T23:13:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2810941?v=4","public":true,"private":false,"isOrgOwned":true,"isArchived":false},"currentUser":null,"uploadToken":"I3LAF78bfgItDpNtdl2KuhxDPMxQAExNX-mlPZwtJ6yVsiWXCIXBSPgz-th3HLtfv0LFceZQ49PH292Q3EIMiQ","allShortcutsEnabled":false,"treeExpanded":true,"path":"README.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1787875767.0","canEdit":false,"currentOid":"7905bdd628cd80cfb15714a7197f5bbd4a49d844"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"":{"items":[{"name":".ci","path":".ci","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":"cloudsql","path":"cloudsql","contentType":"directory"},{"name":"cmd","path":"cmd","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"internal","path":"internal","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".envrc.example","path":".envrc.example","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".golangci.yml","path":".golangci.yml","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"Dockerfile","path":"Dockerfile","contentType":"file"},{"name":"Dockerfile.alpine","path":"Dockerfile.alpine","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"build.sh","path":"build.sh","contentType":"file"},{"name":"go.mod","path":"go.mod","contentType":"file"},{"name":"go.sum","path":"go.sum","contentType":"file"},{"name":"main.go","path":"main.go","contentType":"file"},{"name":"main_windows.go","path":"main_windows.go","contentType":"file"},{"name":"migration-guide.md","path":"migration-guide.md","contentType":"file"},{"name":"windows-service-guide.md","path":"windows-service-guide.md","contentType":"file"},{"name":"windows_install_service.bat","path":"windows_install_service.bat","contentType":"file"},{"name":"windows_remove_service.bat","path":"windows_remove_service.bat","contentType":"file"}],"totalCount":28}},"fileTreeProcessingTime":6.9747710000000005,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1787875767.0","canEdit":false,"refType":"branch","currentOid":"7905bdd628cd80cfb15714a7197f5bbd4a49d844","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"README.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/GoogleCloudPlatform/cloud-sql-proxy/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"README.md","displayUrl":"https://github.com/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md?raw=true","headerInfo":{"blobSize":"32.4 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"7272e45","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fcloud-sql-proxy%2Fblob%2Fmain%2FREADME.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"890","truncatedSloc":"657"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/GoogleCloudPlatform/cloud-sql-proxy/blob/main/README.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/GoogleCloudPlatform/cloud-sql-proxy/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/GoogleCloudPlatform/cloud-sql-proxy/raw/refs/heads/main/README.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# Cloud SQL Auth Proxy","","[![CI][ci-badge]][ci-build]","","\u003e [!WARNING]","\u003e **Go versions 1.25.2 and 1.24.8 are NOT compatible with Cloud Auth Proxy.**","\u003e","\u003e An update to the Go version 1.25.2 and Go 1.24.8 breaks SAN verificaton. This is because Cloud SQL includes a trailing dot in the DNS name within the certificate's Subject Alternative Name (SAN), which the above Go versions reject as a malformed DNS name.","\u003e","\u003e For more details, please see the related Go issue: [crypto/x509: quadratic complexity when checking name constraints ](https://github.com/golang/go/issues/75715).","","","\u003e [!IMPORTANT]","\u003e","\u003e The Cloud SQL Auth Proxy does not currently support Unix domain socket","\u003e connections to MySQL 8.4 instances. This is due to a [known issue](https://github.com/GoogleCloudPlatform/cloud-sql-proxy/issues/2317)","\u003e involving the new default `caching_sha2_password` authentication plugin.","","The Cloud SQL Auth Proxy is a utility for ensuring secure connections to your","Cloud SQL instances. It provides IAM authorization, allowing you to control who","can connect to your instance through IAM permissions, and TLS 1.3 encryption,","without having to manage certificates.","","See the [Connecting Overview][connection-overview] page for more information on","connecting to a Cloud SQL instance, or the [About the Proxy][about-proxy] page","for details on how the Cloud SQL Proxy works.","","The Cloud SQL Auth Proxy has support for:","","- [Automatic IAM Authentication][iam-auth] (Postgres and MySQL only)","- Metrics ([Cloud Monitoring][], [Cloud Trace][], and [Prometheus][])","- [HTTP Healthchecks][health-check-example]","- [Service account impersonation](#configuring-service-account-impersonation)","- Separate Dialer functionality released as the [Cloud SQL Go Connector][go connector]","- Configuration with [environment variables](#config-environment-variables)","- Fully POSIX-compliant flags","","If you're using Go, Java, Python, or Node.js, consider using the corresponding Cloud SQL","connector which does everything the Proxy does, but in process:","","- [Cloud SQL Go connector][go connector]","- [Cloud SQL Java connector][java connector]","- [Cloud SQL Python connector][python connector]","- [Cloud SQL Node.js connector][node connector]","","For users migrating from v1, see the [Migration Guide](migration-guide.md).","The [v1 README][v1 readme] is still available.","","\u003e [!IMPORTANT]","\u003e ","\u003e The Proxy does not configure the network between the VM it's running on","\u003e and the Cloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL","\u003e instance, either by deploying it in a VPC that has access to your Private IP","\u003e instance, or by configuring Public IP.","","[cloud monitoring]: https://cloud.google.com/monitoring","[cloud trace]: https://cloud.google.com/trace","[prometheus]: https://prometheus.io/","[go connector]: https://github.com/GoogleCloudPlatform/cloud-sql-go-connector","[java connector]: https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory","[python connector]: https://github.com/GoogleCloudPlatform/cloud-sql-python-connector","[node connector]: https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector","[v1 readme]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/5f5b09b62eb6dfcaa58ce399d0131c1544bf813f/README.md","","## Installation","","Check for the latest version on the [releases page][releases] and use the","following instructions for your OS and CPU architecture.","","\u003e [!NOTE]","\u003e","\u003e Starting with version `v2.17.1`, Windows binaries provided on the","\u003e [releases page][releases] are signed with Google LLC certificates.","","\u003c!-- {x-release-please-start-version} --\u003e","\u003cdetails open\u003e","\u003csummary\u003eLinux amd64\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.linux.amd64\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eLinux 386\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.linux.386\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eLinux arm64\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.linux.arm64\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eLinux arm\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.linux.arm\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eMac (Intel)\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.darwin.amd64\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eMac (Apple Silicon)\u003c/summary\u003e","","```sh","# see Releases for other versions","URL=\"https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4\"","","curl \"$URL/cloud-sql-proxy.darwin.arm64\" -o cloud-sql-proxy","","chmod +x cloud-sql-proxy","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eWindows x64\u003c/summary\u003e","","```sh","# see Releases for other versions","curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x64.exe -o cloud-sql-proxy.exe","```","","\u003c/details\u003e","","\u003cdetails\u003e","\u003csummary\u003eWindows x86\u003c/summary\u003e","","```sh","# see Releases for other versions","curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x86.exe -o cloud-sql-proxy.exe","```","","\u003c/details\u003e","\u003c!-- {x-release-please-end} --\u003e","","### Install from Source","","To install from source, ensure you have the latest version of [Go installed](https://go.dev/doc/install).","","Then, simply run:","","```shell","go install github.com/GoogleCloudPlatform/cloud-sql-proxy/v2@latest","```","","The `cloud-sql-proxy` will be placed in `$GOPATH/bin` or `$HOME/go/bin`.","","## Usage","","The following examples all reference an `INSTANCE_CONNECTION_NAME`, which takes","the form: `myproject:myregion:myinstance`.","","To find your Cloud SQL instance's `INSTANCE_CONNECTION_NAME`, visit the detail","page of your Cloud SQL instance in the console, or use `gcloud` with:","","```shell","gcloud sql instances describe \u003cINSTANCE_NAME\u003e --format='value(connectionName)'","```","","### Credentials","","The Cloud SQL Proxy uses a Cloud IAM principal to authorize connections against","a Cloud SQL instance. The Proxy sources the credentials using","[Application Default Credentials](https://cloud.google.com/docs/authentication/production).","","\u003e [!NOTE]","\u003e","\u003e Any IAM principal connecting to a Cloud SQL database will need one of the","\u003e following IAM roles:","\u003e","\u003e - Cloud SQL Client (preferred)","\u003e - Cloud SQL Editor","\u003e - Cloud SQL Admin","\u003e","\u003e Or one may manually assign the following IAM permissions:","\u003e ","\u003e - `cloudsql.instances.connect`","\u003e - `cloudsql.instances.get`","\u003e","\u003e See [Roles and Permissions in Cloud SQL][roles-and-permissions] for details.","","When the Proxy authenticates under the Compute Engine VM's default service","account, the VM must have at least the `sqlservice.admin` API scope (i.e.,","\"https://www.googleapis.com/auth/sqlservice.admin\") and the associated project","must have the SQL Admin API enabled. The default service account must also have","at least writer or editor privileges to any projects of target SQL instances.","","The Proxy also supports two flags related to credentials:","","- `--token` to use an OAuth2 token","- `--credentials-file` to use a service account key file","","### Basic Usage","","To start the Proxy, use:","","```shell","# starts the Proxy listening on localhost with the default database engine port","# For example:","#   MySQL      localhost:3306","#   Postgres   localhost:5432","#   SQL Server localhost:1433","./cloud-sql-proxy \u003cINSTANCE_CONNECTION_NAME\u003e","```","","The Proxy will automatically detect the default database engine's port and start","a corresponding listener. Production deployments should use the `--port` flag to","reduce startup time.","","The Proxy supports multiple instances:","","```shell","./cloud-sql-proxy \u003cINSTANCE_CONNECTION_NAME_1\u003e \u003cINSTANCE_CONNECTION_NAME_2\u003e","```","","### Configuring Port","","To override the port, use the `--port` flag:","","```shell","# Starts a listener on localhost:6000","./cloud-sql-proxy --port 6000 \u003cINSTANCE_CONNECTION_NAME\u003e","```","","When specifying multiple instances, the port will increment from the flag value:","","```shell","# Starts a listener on localhost:6000 for INSTANCE_CONNECTION_1","# and localhost:6001 for INSTANCE_CONNECTION_NAME_2.","./cloud-sql-proxy --port 6000 \u003cINSTANCE_CONNECTION_NAME_1\u003e \u003cINSTANCE_CONNECTION_NAME_2\u003e","```","","To configure ports on a per instance basis, use the `port` query param:","","```shell","# Starts a listener on localhost:5000 for the instance called \"postgres\"","# and starts a listener on localhost:6000 for the instance called \"mysql\"","./cloud-sql-proxy \\","    'myproject:my-region:postgres?port=5000' \\","    'myproject:my-region:mysql?port=6000'","```","","### Configuring Listening Address","","To override the choice of `localhost`, use the `--address` flag:","","```shell","# Starts a listener on all interfaces at port 5432","./cloud-sql-proxy --address 0.0.0.0 \u003cINSTANCE_CONNECTION_NAME\u003e","```","","To override address on a per-instance basis, use the `address` query param:","","```shell","# Starts a listener on 0.0.0.0 for \"postgres\" at port 5432","# and a listener on 10.0.0.1:3306 for \"mysql\"","./cloud-sql-proxy \\","    'myproject:my-region:postgres?address=0.0.0.0' \\","    'myproject:my-region:mysql?address=10.0.0.1\"","```","","### Configuring Private IP","","By default, the Proxy attempts to connect to an instance's public IP. To enable","private IP, use:","","```shell","# Starts a listener connected to the private IP of the Cloud SQL instance.","# Note: there must be a network path present for this to work.","./cloud-sql-proxy --private-ip \u003cINSTANCE_CONNECTION_NAME\u003e","```","","\u003e [!IMPORTANT]","\u003e ","\u003e The Proxy does not configure the network. You MUST ensure the Proxy can","\u003e reach your Cloud SQL instance, either by deploying it in a VPC that has access","\u003e to your Private IP instance, or by configuring Public IP.","","### Configuring Unix domain sockets","","The Proxy also supports [Unix domain sockets](https://en.wikipedia.org/wiki/Unix_domain_socket).","To start the Proxy with Unix sockets, run:","","```shell","# Uses the directory \"/mycooldir\" to create a Unix socket","# For example, the following directory would be created:","#   /mycooldir/myproject:myregion:myinstance","./cloud-sql-proxy --unix-socket /mycooldir \u003cINSTANCE_CONNECTION_NAME\u003e","```","","To configure a Unix domain socket on a per-instance basis, use the `unix-socket`","query param:","","```shell","# Starts a TCP listener on localhost:5432 for \"postgres\"","# and creates a Unix domain socket for \"mysql\":","#     /cloudsql/myproject:my-region:mysql","./cloud-sql-proxy \\","    myproject:my-region:postgres \\","    'myproject:my-region:mysql?unix-socket=/cloudsql'","```","","\u003e [!NOTE]","\u003e","\u003e The Proxy supports Unix domain sockets on recent versions of Windows, but","\u003e replaces colons with periods:","\u003e ","\u003e ```shell","\u003e # Starts a Unix domain socket at the path:","\u003e #    C:\\cloudsql\\myproject.my-region.mysql","\u003e ./cloud-sql-proxy --unix-socket C:\\cloudsql myproject:my-region:mysql","\u003e ```","","","### Configuring IAM Database Authentication","","The Proxy supports [Automatic IAM Database Authentication][iam-auth] for MySQL","and Postgres instances, allowing IAM principal's to authenticate and connect","as database users.","","Make sure to configure your [Cloud SQL instance to allow IAM authentication][iam-auth-config]","and to [add your IAM principal as a database user][iam-auth-user].","","```shell","./cloud-sql-proxy --auto-iam-authn \u003cINSTANCE_CONNECTION_NAME\u003e","```","","\u003e [!IMPORTANT]","\u003e ","\u003e Make sure to run the Proxy as the same IAM principal as the database user","\u003e you want to log in as. Only the IAM principal that is attached to the","\u003e [sourced credentials](#credentials) will be able to successfully log in","\u003e via automatic IAM database authentication.","\u003e","\u003e When logging in using an IAM database user, Cloud SQL truncates usernames","\u003e based on the engine type in order to not exceed character limits.","\u003e PostgreSQL's username character limit is 63, while MySQL's is 32.","\u003e","\u003e Cloud SQL IAM database usernames are formatted in the following way:","\u003e ","\u003e **Postgres**:","\u003e * For an IAM user account, this is the user's email address.","\u003e * For a service account, it is the service account's email without the","\u003e `.gserviceaccount.com` domain suffix.","\u003e","\u003e **MySQL**:","\u003e * For an IAM user account, this is the user's email address,","\u003e without the `@` or domain name. For example, for `test-user@gmail.com`,","\u003e the database user would be `test-user`.","\u003e * For a service account, this is the service account's email address without","\u003e the `@project-id.iam.gserviceaccount.com` suffix.","","","### Configuring Service Account Impersonation","","The Proxy supports [service account impersonation](https://cloud.google.com/iam/docs/impersonating-service-accounts).","This allows the Proxy to act as a different service account, which can be useful","for granting access to resources that are not accessible to the default IAM ","principal.","","To use service account impersonation, you must have the","`iam.serviceAccounts.getAccessToken` permission on the IAM principal ","impersonating another service account. You can grant this permission by assigning"," the `roles/iam.serviceAccountTokenCreator` role to the IAM principal.","","To impersonate a service account, use the `--impersonate-service-account` flag:","","\u003e [!NOTE]","\u003e","\u003e The impersonated service account must have the `Service Usage Consumer` and ","`Cloud SQL Client` permissions.","\u003e Additionally, to use IAM Authenticated users, add the `Cloud SQL Instance User`"," permission.","","","```shell","# Starts a listener on localhost:5432 and impersonates the service account","# \"my-other-sa@my-project.iam.gserviceaccount.com\".","# The Proxy will use the credentials of the principal running the Proxy to","# generate a short-lived access token for the impersonated service account.","./cloud-sql-proxy --impersonate-service-account \\","my-other-sa@my-project.iam.gserviceaccount.com \u003cINSTANCE_CONNECTION_NAME\u003e","```","","### Using Advanced Disaster Recovery and DNS domain names to identify instances","","The proxy can be configured to use DNS to look up an instance.","Use a DNS name managed by Cloud SQL [Advanced Disaster Recovery](https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery),","or a domain name that you manage.","","#### Using Advanced Recovery Write Endpoint DNS Name","","[Advanced Disaster Recovery](https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery)","creates geographically distributed replicas of your Cloud SQL database instance. When you perform","switchover or failover on the database instance, the proxy will gracefully disconnect from the","old primary instance and reconnect to the new primary instance.","","Follow the instructions in [Connect using Write Endpoint](https://docs.cloud.google.com/sql/docs/mysql/connect-to-instance-using-write-endpoint)","to get the write endpoint DNS name for your primary instance. Then, use this write endpoint DNS","name to configure the proxy.","","#### Configure your DNS Records","","The proxy may be configured to use DNS that you define as well.","","Add a DNS TXT record for the Cloud SQL instance to a **private** DNS server","or a private Google Cloud DNS Zone used by your application.","","**Note:** You are strongly discouraged from adding DNS records for your","Cloud SQL instances to a public DNS server. This would allow anyone on the","internet to discover the Cloud SQL instance name.","","For example: suppose you wanted to use the domain name","`prod-db.mycompany.example.com` to connect to your database instance","`my-project:region:my-instance`. You would create the following DNS record:","","- Record type: `TXT`","- Name: `prod-db.mycompany.example.com` – This is the domain name used by the application","- Value: `my-project:region:my-instance` – This is the instance name","","#### Configuring the Proxy","","Configure the Proxy with your DNS domain name instead of an instance connection","name:","","```sh","./cloud-sql-proxy prod-db.mycompany.example.com","```","","### Automatic fail-over using DNS domain names","","When the Proxy is configured using a domain name, it will","periodically check if the DNS record for an instance changes. When the Proxy","detects that the domain name refers to a different instance, it will","close all open connections to the old instance. Subsequent connection attempts","will be directed to the new instance.","","For example: suppose application is configured to connect using the","domain name `prod-db.mycompany.example.com`. Initially the corporate DNS","zone has a TXT record with the value `my-project:region:my-instance`. The","application establishes connections to the `my-project:region:my-instance`","Cloud SQL instance.","","Then, to reconfigure the application to use a different database","instance, change the value of the `prod-db.mycompany.example.com` DNS record","from `my-project:region:my-instance` to `my-project:other-region:my-instance-2`","","The Proxy detects the change to this DNS record.","Now, when the application connects to its database using the","domain name `prod-db.mycompany.example.com`, it will connect to the","`my-project:other-region:my-instance-2` Cloud SQL instance.","","The Proxy will automatically close all existing connections to","`my-project:region:my-instance`. This will force the connection pools to","establish new connections. Also, it may cause database queries in progress","to fail.","","The Proxy will poll for changes to the DNS name every 30 seconds by default.","","### Testing Connectivity","","The Proxy includes support for a connection test on startup. This test helps","ensure the Proxy can reach the associated instance and is a quick debugging","tool. The test will attempt to connect to the specified instance(s) and fail","if the instance is unreachable. If the test fails, the Proxy will exit with","a non-zero exit code.","","```shell","./cloud-sql-proxy --run-connection-test \u003cINSTANCE_CONNECTION_NAME\u003e","```","","### Config file","","The Proxy supports a configuration file. Supported file types are TOML, JSON,","and YAML. Load the file with the `--config-file` flag:","","```shell","./cloud-sql-proxy --config-file /path/to/config.[toml|json|yaml]","```","","The configuration file format supports all flags. The key names should match","the flag names. For example:","","``` toml","# use instance-connection-name-0, instance-connection-name-1, etc.","# for multiple instances","instance-connection-name = \"proj:region:inst\"","auto-iam-authn = true","debug = true","debug-logs = true","```","","Run `./cloud-sql-proxy --help` for more details. See the full documentation","in [docs/cmd](docs/cmd).","","### Config environment variables","","The proxy supports configuration through environment variables. ","Each environment variable uses \"CSQL_PROXY\" as a prefix and is ","the uppercase version of the flag using underscores as word delimiters. ","","For example, the `--auto-iam-authn` flag may be set with the environment variable ","`CSQL_PROXY_AUTO_IAM_AUTHN`.","","An invocation of the Proxy using environment variables would look like the following: ","","```shell","CSQL_PROXY_AUTO_IAM_AUTHN=true \\ ","    ./cloud-sql-proxy \u003cINSTANCE_CONNECTION_NAME\u003e","```","","Run `./cloud-sql-proxy --help` for more details.","","### Configuring a Lazy Refresh","","The `--lazy-refresh` flag configures the Proxy to retrieve connection info","lazily and as-needed. Otherwise, no background refresh cycle runs. This setting","is useful in environments where the CPU may be throttled outside of a request","context, e.g., Cloud Run, Cloud Functions, etc.","","### Additional flags","","To see a full list of flags, use:","","```shell","./cloud-sql-proxy --help","```","","","## Container Images","","There are containerized versions of the Proxy available from the following","[Artifact Registry](https://cloud.google.com/artifact-registry) repositories:","","- `gcr.io/cloud-sql-connectors/cloud-sql-proxy`","- `us.gcr.io/cloud-sql-connectors/cloud-sql-proxy`","- `eu.gcr.io/cloud-sql-connectors/cloud-sql-proxy`","- `asia.gcr.io/cloud-sql-connectors/cloud-sql-proxy`","","\u003e [!NOTE]","\u003e","\u003e The above container images were migrated from Google Container Registry (deprecated)","\u003e to Artifact Registry which is why they begin with the old naming pattern (`gcr.io`)","","Each image is tagged with the associated Proxy version. The following tags are","currently supported:","","- `$VERSION` (default)","- `$VERSION-alpine`","- `$VERSION-bookworm`","","\u003c!-- {x-release-please-start-version} --\u003e","The `$VERSION` is the Proxy version without the leading \"v\" (e.g.,","`2.25.4`).","","For example, to pull a particular version, use a command like:","","``` shell","# $VERSION is 2.25.4","docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.25.4","```","","\u003c!-- {x-release-please-end} --\u003e","We recommend pinning to a specific version tag and using automation with a CI pipeline","to update regularly.","","The default container image uses [distroless][] with a non-root user. If you","need a shell or related tools, use the Alpine or Debian-based container image","(bookworm) listed above.","","[distroless]: https://github.com/GoogleContainerTools/distroless","","### Working with Docker and the Proxy","","The containers have the proxy as an `ENTRYPOINT` so, to use the proxy from a","container, all you need to do is specify options using the command, and expose","the proxy's internal port to the host. For example, you can use:","","```shell","docker run --publish \u003chost-port\u003e:\u003cproxy-port\u003e \\","    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\","    --address \"0.0.0.0\" --port \u003cproxy-port\u003e \u003cinstance-connection-name\u003e","```","","You'll need the `--address \"0.0.0.0\"` so that the proxy doesn't only listen for","connections originating from *within* the container.","","You will need to authenticate using one of the methods outlined in the","[credentials](#credentials) section. If using a credentials file you must mount","the file and ensure that the non-root user that runs the proxy has *read access*","to the file. These alternatives might help:","","1. Change the group of your local file and add read permissions to the group","with `chgrp 65532 key.json \u0026\u0026 chmod g+r key.json`.","1. If you can't control your file's group, you can directly change the public","permissions of your file by doing `chmod o+r key.json`.","","\u003e [!WARNING]","\u003e ","\u003e This can be insecure because it allows any user in the host system to read","\u003e the credential file which they can use to authenticate to services in GCP.","","For example, a full command using a JSON credentials file might look like","","```shell","docker run \\","    --publish \u003chost-port\u003e:\u003cproxy-port\u003e \\","    --mount type=bind,source=\"$(pwd)\"/sa.json,target=/config/sa.json \\","    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \\","    --address 0.0.0.0 \\","    --port \u003cproxy-port\u003e \\","    --credentials-file /config/sa.json \u003cinstance-connection-name\u003e","```","","## Running as a Kubernetes Sidecar","","See the [example here][sidecar-example] as well as [Connecting from Google","Kubernetes Engine][connect-to-k8s].","","## Running behind a Socks5 proxy","","The Cloud SQL Auth Proxy includes support for sending requests through a SOCKS5","proxy. If a SOCKS5 proxy is running on `localhost:8000`, the command to start","the Cloud SQL Auth Proxy would look like:","","```","ALL_PROXY=socks5://localhost:8000 \\","HTTPS_PROXY=socks5://localhost:8000 \\","    cloud-sql-proxy \u003cINSTANCE_CONNECTION_NAME\u003e","```","","The `ALL_PROXY` environment variable specifies the proxy for all TCP","traffic to and from a Cloud SQL instance. The `ALL_PROXY` environment variable","supports `socks5` and `socks5h` protocols. To route DNS lookups through a proxy,","use the `socks5h` protocol.","","The `HTTPS_PROXY` (or `HTTP_PROXY`) specifies the proxy for all HTTP(S) traffic","to the SQL Admin API. Specifying `HTTPS_PROXY` or `HTTP_PROXY` is only necessary","when you want to proxy this traffic. Otherwise, it is optional. See","[`http.ProxyFromEnvironment`](https://pkg.go.dev/net/http@go1.17.3#ProxyFromEnvironment)","for possible values.","","## Support for Metrics and Tracing","","The Proxy supports [Cloud Monitoring][], [Cloud Trace][], and [Prometheus][].","","Supported metrics include:","","- `cloudsqlconn/dial_latency`: The distribution of dialer latencies (ms)","- `cloudsqlconn/open_connections`: The current number of open Cloud SQL","  connections","- `cloudsqlconn/dial_failure_count`: The number of failed dial attempts","- `cloudsqlconn/refresh_success_count`: The number of successful certificate","  refresh operations","- `cloudsqlconn/refresh_failure_count`: The number of failed refresh","  operations.","","Supported traces include:","","- `cloud.google.com/go/cloudsqlconn.Dial`: The dial operation including","  refreshing an ephemeral certificate and connecting the instance","- `cloud.google.com/go/cloudsqlconn/internal.InstanceInfo`: The call to retrieve","  instance metadata (e.g., database engine type, IP address, etc)","- `cloud.google.com/go/cloudsqlconn/internal.Connect`: The connection attempt","  using the ephemeral certificate","- SQL Admin API client operations","","To enable Cloud Monitoring and Cloud Trace, use the `--telemetry-project` flag","with the project where you want to view metrics and traces. To configure the","metrics prefix used by Cloud Monitoring, use the `--telemetry-prefix` flag. When","enabling telemetry, both Cloud Monitoring and Cloud Trace are enabled. To","disable Cloud Monitoring, use `--disable-metrics`. To disable Cloud Trace, use","`--disable-traces`.","","To enable Prometheus, use the `--prometheus` flag. This will start an HTTP","server on localhost with a `/metrics` endpoint. The Prometheus namespace may","optionally be set with `--prometheus-namespace`.","","## Debug logging","","To enable debug logging to report on internal certificate refresh operations,","use the `--debug-logs` flag. Typical use of the Proxy should not require debug","logs, but if you are surprised by the Proxy's behavior, debug logging should","provide insight into internal operations and can help when reporting issues.","","## Localhost Admin Server","","The Proxy includes support for an admin server on localhost. By default, the","the admin server is not enabled. To enable the server, pass the --debug or","--quitquitquit flag. This will start the server on localhost at port 9091.","To change the port, use the --admin-port flag.","","When --debug is set, the admin server enables Go's profiler available at","/debug/pprof/.","","See the [documentation on pprof][pprof] for details on how to use the","profiler.","","When --quitquitquit is set, the admin server adds an endpoint at","/quitquitquit. The admin server exits gracefully when it receives a GET or POST","request at /quitquitquit.","","[pprof]: https://pkg.go.dev/net/http/pprof.","","## Frequently Asked Questions","","### Why would I use the Proxy?","","The Proxy is a convenient way to control access to your database using IAM","permissions while ensuring a secure connection to your Cloud SQL instance. When","using the Proxy, you do not have to manage database client certificates,","configured Authorized Networks, or ensure clients connect securely. The Proxy","handles all of this for you.","","### How should I use the Proxy?","","The Proxy is a gateway to your Cloud SQL instance. Clients connect to the Proxy","over an unencrypted connection and are authorized using the environment's IAM","principal. The Proxy then encrypts the connection to your Cloud SQL instance.","","Because client connections are not encrypted and authorized using the","environment's IAM principal, we recommend running the Proxy on the same VM or","Kubernetes pod as your application and using the Proxy's default behavior of","allowing connections from only the local network interface. This is the most","secure configuration: unencrypted traffic does not leave the VM, and only","connections from applications on the VM are allowed.","","Here are some common examples of how to run the Proxy in different environments:","","- [Connect to Cloud SQL for MySQL from your local computer][local-quickstart]","- [Connect to Cloud SQL for MySQL from Google Kubernetes Engine][gke-quickstart]","","[local-quickstart]: https://cloud.google.com/sql/docs/mysql/connect-instance-local-computer","[gke-quickstart]: https://cloud.google.com/sql/docs/mysql/connect-instance-kubernetes","","### Why can't the Proxy connect to my private IP instance?","","The Proxy does not configure the network between the VM it's running on and the","Cloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL","instance, either by deploying it in a VPC that has access to your Private IP","instance, or by configuring Public IP.","","### Should I use the Proxy for large deployments?","","We recommend deploying the Proxy on the host machines that are running the","application. However, large deployments may exceed the request quota for the SQL","Admin API . If your Proxy reports request quota errors, we recommend deploying","the Proxy with a connection pooler like [pgbouncer][] or [ProxySQL][]. For","details, see [Running the Cloud SQL Proxy as a Service][service-example].","","### Can I share the Proxy across multiple applications?","","Instead of using a single Proxy across multiple applications, we recommend using","one Proxy instance for every application process. The Proxy uses the context's","IAM principal and so have a 1-to-1 mapping between application and IAM principal","is best. If multiple applications use the same Proxy instance, then it becomes","unclear from an IAM perspective which principal is doing what.","","### How do I verify the shasum of a downloaded Proxy binary?","","After downloading a binary from the releases page, copy the sha256sum value","that corresponds with the binary you chose.","","Then run this command (make sure to add the asterisk before the file name):","","``` shell","echo '\u003cRELEASE_PAGE_SHA_HERE\u003e *\u003cNAME_OF_FILE_HERE\u003e' | shasum -c","```","","For example, after downloading the v2.1.0 release of the Linux AMD64 Proxy, you","would run:","","``` shell","$ echo \"547b24faf0dfe5e3d16bbc9f751dfa6b34dfd5e83f618f43a2988283de5208f2 *cloud-sql-proxy\" | shasum -c","cloud-sql-proxy: OK","```","","If you see `OK`, the binary is a verified match.","","","[pgbouncer]: https://www.pgbouncer.org/","[proxysql]: https://www.proxysql.com/","","## Reference Documentation","","- [Cloud SQL][cloud-sql]","- [Cloud SQL Auth Proxy Documentation][proxy-page]","- [Cloud SQL Auth Proxy Quickstarts][quickstarts]","- [Cloud SQL Code Samples][code-samples]","- [Cloud SQL Auth Proxy Package Documentation][pkg-docs]","","## Support policy","","### Major version lifecycle","","This project uses [semantic versioning](https://semver.org/), and uses the","following lifecycle regarding support for a major version:","","- **Active** - Active versions get all new features and security fixes (that","wouldn’t otherwise introduce a breaking change). New major versions are","guaranteed to be \"active\" for a minimum of 1 year.","","- **Maintenance** - Maintenance versions continue to receive security and critical","bug fixes, but do not receive new features.","","### Release cadence","","The Cloud SQL Auth Proxy aims for a minimum monthly release cadence. If no new","features or fixes have been added, a new PATCH version with the latest","dependencies is released.","","We support releases for 1 year from the release date.","","## Contributing","","Contributions are welcome. Please, see the [CONTRIBUTING][contributing] document","for details.","","Please note that this project is released with a Contributor Code of Conduct.","By participating in this project you agree to abide by its terms. See","[Contributor Code of Conduct][code-of-conduct] for more information.","","[about-proxy]: https://cloud.google.com/sql/docs/mysql/sql-proxy","[ci-badge]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml/badge.svg?event=push","[ci-build]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml?query=event%3Apush+branch%3Amain","[cloud-sql]: https://cloud.google.com/sql","[code-samples]: https://cloud.google.com/sql/docs/mysql/samples","[code-of-conduct]: CODE_OF_CONDUCT.md","[connect-to-k8s]: https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine","[connection-overview]: https://cloud.google.com/sql/docs/mysql/connect-overview","[contributing]: CONTRIBUTING.md","[health-check-example]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-health-check#cloud-sql-proxy-health-checks","[iam-auth]: https://cloud.google.com/sql/docs/postgres/iam-authentication#auto-iam-auth","[iam-auth-config]: https://cloud.google.com/sql/docs/postgres/create-edit-iam-instances#configure-iam-db-instance","[iam-auth-user]: https://cloud.google.com/sql/docs/postgres/add-manage-iam-users#creating-a-database-user","[pkg-badge]: https://pkg.go.dev/badge/github.com/GoogleCloudPlatform/cloudsql-proxy.svg","[pkg-docs]: https://pkg.go.dev/github.com/GoogleCloudPlatform/cloudsql-proxy","[private-ip]: https://cloud.google.com/sql/docs/mysql/private-ip#requirements_for_private_ip","[proxy-page]: https://cloud.google.com/sql/docs/mysql/sql-proxy","[quickstarts]: https://cloud.google.com/sql/docs/mysql/quickstarts","[releases]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/releases","[roles-and-permissions]: https://cloud.google.com/sql/docs/mysql/roles-and-permissions","[service-account]: https://cloud.google.com/iam/docs/service-accounts","[sidecar-example]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/master/examples/k8s-sidecar#run-the-cloud-sql-proxy-as-a-sidecar","[service-example]: https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-service"],"stylingDirectives":[[[0,22,"pl-mh"],[2,22,"pl-en"]],[],[[0,1,"pl-s"],[1,3,"pl-s"],[5,6,"pl-s"],[6,7,"pl-s"],[7,15,"pl-en"],[15,17,"pl-s"],[17,18,"pl-s"],[18,26,"pl-en"],[26,27,"pl-s"]],[],[[0,12,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[11,12,"pl-s"]],[[0,77,"pl-ent"],[0,2,"pl-ent"],[2,4,"pl-s"],[75,77,"pl-s"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,257,"pl-ent"],[0,2,"pl-ent"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,164,"pl-ent"],[0,2,"pl-ent"],[53,54,"pl-s"],[119,120,"pl-s"],[120,121,"pl-s"],[121,162,"pl-corl"],[162,163,"pl-s"]],[[0,0,"pl-ent"]],[],[[0,14,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[13,14,"pl-s"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,72,"pl-ent"],[0,2,"pl-ent"]],[[0,136,"pl-ent"],[0,2,"pl-ent"],[55,56,"pl-s"],[67,68,"pl-s"],[68,69,"pl-s"],[69,135,"pl-corl"],[135,136,"pl-s"]],[[0,74,"pl-ent"],[0,2,"pl-ent"],[28,29,"pl-s"],[29,50,"pl-c1"],[50,51,"pl-s"]],[[0,0,"pl-ent"]],[],[],[],[],[],[[8,9,"pl-s"],[28,29,"pl-s"],[29,30,"pl-s"],[30,49,"pl-en"],[49,50,"pl-s"]],[[43,44,"pl-s"],[59,60,"pl-s"],[60,61,"pl-s"],[61,72,"pl-en"],[72,73,"pl-s"]],[],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[31,32,"pl-s"],[32,33,"pl-s"],[33,41,"pl-en"],[41,42,"pl-s"]],[[0,1,"pl-v"],[11,12,"pl-s"],[28,29,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[33,34,"pl-s"],[45,46,"pl-s"],[46,47,"pl-s"],[47,48,"pl-s"],[54,55,"pl-s"],[65,66,"pl-s"],[66,67,"pl-s"],[67,68,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[20,21,"pl-s"],[21,22,"pl-s"],[22,42,"pl-en"],[42,43,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[32,33,"pl-s"],[33,34,"pl-s"],[34,76,"pl-corl"],[76,77,"pl-s"]],[[0,1,"pl-v"],[48,49,"pl-s"],[71,72,"pl-s"],[72,73,"pl-s"],[73,85,"pl-en"],[85,86,"pl-s"]],[[0,1,"pl-v"],[21,22,"pl-s"],[43,44,"pl-s"],[44,45,"pl-s"],[45,74,"pl-corl"],[74,75,"pl-s"]],[[0,1,"pl-v"]],[],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[25,26,"pl-s"],[26,27,"pl-s"],[27,39,"pl-en"],[39,40,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,43,"pl-en"],[43,44,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[29,30,"pl-s"],[30,31,"pl-s"],[31,47,"pl-en"],[47,48,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[30,31,"pl-s"],[31,32,"pl-s"],[32,46,"pl-en"],[46,47,"pl-s"]],[],[[37,38,"pl-s"],[53,54,"pl-s"],[54,55,"pl-s"],[55,73,"pl-corl"],[73,74,"pl-s"]],[[4,5,"pl-s"],[14,15,"pl-s"],[15,16,"pl-s"],[16,25,"pl-en"],[25,26,"pl-s"]],[],[[0,14,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[13,14,"pl-s"]],[[0,2,"pl-ent"],[0,2,"pl-ent"]],[[0,73,"pl-ent"],[0,2,"pl-ent"]],[[0,80,"pl-ent"],[0,2,"pl-ent"]],[[0,78,"pl-ent"],[0,2,"pl-ent"]],[[0,40,"pl-ent"],[0,2,"pl-ent"]],[[0,0,"pl-ent"]],[[0,1,"pl-s"],[1,17,"pl-en"],[17,18,"pl-s"],[20,55,"pl-corl"]],[[0,1,"pl-s"],[1,12,"pl-en"],[12,13,"pl-s"],[15,45,"pl-corl"]],[[0,1,"pl-s"],[1,11,"pl-en"],[11,12,"pl-s"],[14,36,"pl-corl"]],[[0,1,"pl-s"],[1,13,"pl-en"],[13,14,"pl-s"],[16,77,"pl-corl"]],[[0,1,"pl-s"],[1,15,"pl-en"],[15,16,"pl-s"],[18,86,"pl-corl"]],[[0,1,"pl-s"],[1,17,"pl-en"],[17,18,"pl-s"],[20,85,"pl-corl"]],[[0,1,"pl-s"],[1,15,"pl-en"],[15,16,"pl-s"],[18,83,"pl-corl"]],[[0,1,"pl-s"],[1,10,"pl-en"],[10,11,"pl-s"],[13,122,"pl-corl"]],[],[[0,15,"pl-mh"],[3,15,"pl-en"]],[],[[36,37,"pl-s"],[50,51,"pl-s"],[51,52,"pl-s"],[52,60,"pl-en"],[60,61,"pl-s"]],[],[],[[0,9,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[8,9,"pl-s"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,67,"pl-ent"],[0,2,"pl-ent"],[24,25,"pl-s"],[25,32,"pl-c1"],[32,33,"pl-s"]],[[0,68,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[16,17,"pl-s"],[17,18,"pl-s"],[18,26,"pl-en"],[26,27,"pl-s"]],[[0,0,"pl-ent"]],[[0,41,"pl-c"],[0,4,"pl-c"],[38,41,"pl-c"]],[[1,8,"pl-ent"],[9,13,"pl-e"]],[[1,8,"pl-ent"],[22,29,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,39,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[38,39,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[20,27,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,37,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[36,37,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[22,29,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,39,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[38,39,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[20,27,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,37,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[36,37,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[22,29,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,40,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[39,40,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[30,37,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[[4,81,"pl-s"],[4,5,"pl-pds"],[80,81,"pl-pds"]],[],[[5,40,"pl-s"],[5,6,"pl-pds"],[6,10,"pl-smi"],[39,40,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[22,29,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[],[[1,8,"pl-ent"]],[[1,8,"pl-ent"],[22,29,"pl-ent"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,33,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[2,9,"pl-ent"]],[[0,31,"pl-c"],[0,4,"pl-c"],[28,31,"pl-c"]],[],[[0,23,"pl-mh"],[4,23,"pl-en"]],[],[[62,63,"pl-s"],[75,76,"pl-s"],[76,77,"pl-s"],[77,103,"pl-corl"],[103,104,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[],[[0,3,"pl-s"]],[],[[4,5,"pl-s"],[5,20,"pl-c1"],[20,21,"pl-s"],[40,41,"pl-s"],[41,52,"pl-c1"],[52,53,"pl-s"],[57,58,"pl-s"],[58,70,"pl-c1"],[70,71,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[40,41,"pl-s"],[41,65,"pl-c1"],[65,66,"pl-s"]],[[10,11,"pl-s"],[11,40,"pl-c1"],[40,41,"pl-s"]],[],[[34,35,"pl-s"],[35,59,"pl-c1"],[59,60,"pl-s"]],[[55,56,"pl-s"],[56,62,"pl-c1"],[62,63,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[30,31,"pl-k"],[44,45,"pl-k"],[55,78,"pl-s"],[55,56,"pl-pds"],[77,78,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[],[],[[0,1,"pl-s"],[32,33,"pl-s"],[33,34,"pl-s"],[34,89,"pl-corl"],[89,90,"pl-s"]],[],[[0,9,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-s"],[8,9,"pl-s"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,75,"pl-ent"],[0,2,"pl-ent"]],[[0,22,"pl-ent"],[0,2,"pl-ent"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,32,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-v"]],[[0,20,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-v"]],[[0,19,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-v"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,59,"pl-ent"],[0,2,"pl-ent"]],[[0,2,"pl-ent"],[0,2,"pl-ent"]],[[0,32,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-v"],[4,5,"pl-s"],[5,31,"pl-c1"],[31,32,"pl-s"]],[[0,28,"pl-ent"],[0,2,"pl-ent"],[2,3,"pl-v"],[4,5,"pl-s"],[5,27,"pl-c1"],[27,28,"pl-s"]],[[0,1,"pl-ent"],[0,1,"pl-ent"]],[[0,78,"pl-ent"],[0,2,"pl-ent"],[6,7,"pl-s"],[41,42,"pl-s"],[42,43,"pl-s"],[43,64,"pl-en"],[64,65,"pl-s"]],[[0,0,"pl-ent"]],[],[[39,40,"pl-s"],[40,56,"pl-c1"],[56,57,"pl-s"]],[[1,49,"pl-corl"]],[],[],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,79,"pl-c"],[0,1,"pl-c"]],[[0,14,"pl-c"],[0,1,"pl-c"]],[[0,29,"pl-c"],[0,1,"pl-c"]],[[0,29,"pl-c"],[0,1,"pl-c"]],[[0,29,"pl-c"],[0,1,"pl-c"]],[[18,19,"pl-k"],[43,44,"pl-k"]],[[0,3,"pl-s"]],[],[],[[64,65,"pl-s"],[65,71,"pl-c1"],[71,72,"pl-s"]],[],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[18,19,"pl-k"],[44,46,"pl-k"],[47,48,"pl-k"],[73,75,"pl-k"]],[[0,3,"pl-s"]],[],[[0,20,"pl-mh"],[4,20,"pl-en"]],[],[[30,31,"pl-s"],[31,37,"pl-c1"],[37,38,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,37,"pl-c"],[0,1,"pl-c"]],[[30,31,"pl-k"],[55,56,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,63,"pl-c"],[0,1,"pl-c"]],[[0,52,"pl-c"],[0,1,"pl-c"]],[[30,31,"pl-k"],[56,58,"pl-k"],[59,60,"pl-k"],[85,87,"pl-k"]],[[0,3,"pl-s"]],[],[[52,53,"pl-s"],[53,57,"pl-c1"],[57,58,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,72,"pl-c"],[0,1,"pl-c"]],[[0,73,"pl-c"],[0,1,"pl-c"]],[],[[4,44,"pl-s"],[4,5,"pl-pds"],[43,44,"pl-pds"]],[[4,41,"pl-s"],[4,5,"pl-pds"],[40,41,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,33,"pl-mh"],[4,33,"pl-en"]],[],[[26,27,"pl-s"],[27,36,"pl-c1"],[36,37,"pl-s"],[47,48,"pl-s"],[48,57,"pl-c1"],[57,58,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,50,"pl-c"],[0,1,"pl-c"]],[[36,37,"pl-k"],[61,62,"pl-k"]],[[0,3,"pl-s"]],[],[[53,54,"pl-s"],[54,61,"pl-c1"],[61,62,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,58,"pl-c"],[0,1,"pl-c"]],[[0,45,"pl-c"],[0,1,"pl-c"]],[],[[4,50,"pl-s"],[4,5,"pl-pds"],[49,50,"pl-pds"]],[[4,48,"pl-s"],[4,5,"pl-pds"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,57,"pl-s"],[56,57,"pl-pds"],[73,79,"pl-c1"]],[],[],[[0,8,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,74,"pl-s"],[0,74,"pl-c"],[0,1,"pl-c"]],[[0,62,"pl-s"],[0,62,"pl-c"],[0,1,"pl-c"]],[[0,57,"pl-s"],[31,32,"pl-k"],[56,57,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,1,"pl-k"],[3,4,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"],[56,58,"pl-k"]],[[0,1,"pl-k"]],[],[[0,35,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[[0,8,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,57,"pl-s"],[0,57,"pl-c"],[0,1,"pl-c"]],[[0,56,"pl-s"],[0,56,"pl-c"],[0,1,"pl-c"]],[[0,44,"pl-s"],[0,44,"pl-c"],[0,1,"pl-c"]],[[0,69,"pl-s"],[43,44,"pl-k"],[68,69,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[67,80,"pl-s"],[67,68,"pl-pds"],[79,80,"pl-pds"]],[],[],[[0,8,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,56,"pl-s"],[0,56,"pl-c"],[0,1,"pl-c"]],[[0,47,"pl-s"],[0,47,"pl-c"],[0,1,"pl-c"]],[[0,41,"pl-s"],[0,41,"pl-c"],[0,1,"pl-c"]],[[0,19,"pl-s"]],[[0,34,"pl-s"]],[[0,53,"pl-s"],[4,53,"pl-s"],[4,5,"pl-pds"],[52,53,"pl-pds"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,1,"pl-k"],[3,4,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"],[2,10,"pl-s"],[2,3,"pl-pds"],[3,4,"pl-pds"],[4,5,"pl-pds"]],[[0,44,"pl-s"],[0,1,"pl-k"],[2,44,"pl-c"],[2,3,"pl-c"]],[[0,44,"pl-s"],[0,44,"pl-c"]],[[0,71,"pl-s"],[0,71,"pl-c"]],[[0,5,"pl-s"],[0,2,"pl-c"],[2,3,"pl-pds"],[3,4,"pl-pds"],[4,5,"pl-pds"]],[],[],[[0,43,"pl-c"],[0,1,"pl-c"]],[],[[69,72,"pl-k"]],[[46,76,"pl-s"],[46,47,"pl-pds"]],[[0,18,"pl-s"]],[[0,0,"pl-s"]],[[0,93,"pl-s"]],[[0,66,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,61,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,14,"pl-s"]],[[0,2,"pl-s"]],[[0,75,"pl-s"]],[[0,71,"pl-s"]],[[0,73,"pl-s"]],[[0,44,"pl-s"]],[[0,1,"pl-s"]],[[0,75,"pl-s"]],[[0,67,"pl-s"]],[[0,13,"pl-s"],[12,13,"pl-pds"],[47,52,"pl-k"],[58,67,"pl-s"],[58,59,"pl-pds"]],[[0,1,"pl-s"]],[[0,70,"pl-s"]],[[0,2,"pl-s"]],[[0,15,"pl-s"]],[[0,46,"pl-s"],[45,46,"pl-pds"]],[[0,1,"pl-k"],[2,3,"pl-k"],[52,72,"pl-s"],[52,53,"pl-pds"]],[[0,39,"pl-s"]],[[0,1,"pl-s"]],[[0,12,"pl-s"]],[[0,46,"pl-s"],[45,46,"pl-pds"]],[[0,1,"pl-k"],[14,17,"pl-s"],[14,15,"pl-pds"],[16,17,"pl-pds"],[47,50,"pl-k"],[51,72,"pl-s"],[51,52,"pl-pds"],[71,72,"pl-pds"]],[[0,1,"pl-k"],[29,40,"pl-s"],[29,30,"pl-pds"],[39,40,"pl-pds"]],[[0,1,"pl-k"],[2,3,"pl-k"],[54,78,"pl-s"],[54,55,"pl-pds"]],[[0,51,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,45,"pl-s"]],[[0,0,"pl-s"]],[[0,117,"pl-s"]],[[0,80,"pl-s"]],[[0,76,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,55,"pl-s"]],[[0,69,"pl-s"]],[[0,81,"pl-s"]],[[0,70,"pl-s"]],[[0,0,"pl-s"]],[[0,79,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,1,"pl-s"]],[[0,78,"pl-s"]],[[0,31,"pl-s"]],[[0,81,"pl-s"]],[[0,12,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,74,"pl-s"]],[[0,51,"pl-s"]],[[0,74,"pl-s"]],[[0,75,"pl-s"]],[[0,49,"pl-s"]],[[0,73,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,79,"pl-s"]],[[0,0,"pl-s"]],[[0,62,"pl-s"]],[[0,142,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,52,"pl-s"]],[[0,0,"pl-s"]],[[0,105,"pl-s"]],[[0,97,"pl-s"]],[[0,94,"pl-s"]],[[0,63,"pl-s"]],[[0,0,"pl-s"]],[[0,144,"pl-s"]],[[0,95,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,0,"pl-s"]],[[0,63,"pl-s"]],[[0,0,"pl-s"]],[[0,75,"pl-s"]],[[0,60,"pl-s"]],[[0,0,"pl-s"]],[[0,71,"pl-s"]],[[0,74,"pl-s"]],[[0,49,"pl-s"]],[[0,0,"pl-s"]],[[0,54,"pl-s"]],[[0,68,"pl-s"]],[[0,75,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,89,"pl-s"]],[[0,68,"pl-s"]],[[0,0,"pl-s"]],[[0,26,"pl-s"]],[[0,0,"pl-s"]],[[0,79,"pl-s"]],[[0,5,"pl-s"]],[[0,0,"pl-s"]],[[0,5,"pl-s"]],[[0,47,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,46,"pl-s"]],[[0,0,"pl-s"]],[[0,57,"pl-s"]],[[0,76,"pl-s"]],[[0,68,"pl-s"]],[[0,78,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,67,"pl-s"]],[[0,72,"pl-s"]],[[0,73,"pl-s"]],[[0,74,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,64,"pl-s"]],[[0,76,"pl-s"]],[[0,79,"pl-s"]],[[0,0,"pl-s"]],[[0,48,"pl-s"]],[[0,60,"pl-s"]],[[0,67,"pl-s"]],[[0,59,"pl-s"]],[[0,0,"pl-s"]],[[0,62,"pl-s"]],[[0,72,"pl-s"]],[[0,74,"pl-s"]],[[0,8,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,0,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,75,"pl-s"]],[[0,76,"pl-s"]],[[0,75,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,66,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,15,"pl-s"]],[[0,0,"pl-s"]],[[0,77,"pl-s"]],[[0,54,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,64,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,66,"pl-s"]],[[0,24,"pl-s"]],[[0,45,"pl-s"]],[[0,21,"pl-s"]],[[0,12,"pl-s"]],[[0,17,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,75,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,32,"pl-s"]],[[0,0,"pl-s"]],[[0,64,"pl-s"]],[[0,63,"pl-s"]],[[0,72,"pl-s"]],[[0,0,"pl-s"]],[[0,82,"pl-s"]],[[0,28,"pl-s"]],[[0,0,"pl-s"]],[[0,86,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,33,"pl-s"]],[[0,48,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,48,"pl-s"]],[[0,0,"pl-s"]],[[0,30,"pl-s"]],[[0,0,"pl-s"]],[[0,74,"pl-s"]],[[0,79,"pl-s"]],[[0,77,"pl-s"]],[[0,47,"pl-s"]],[[0,0,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,33,"pl-s"]],[[0,0,"pl-s"]],[[0,8,"pl-s"]],[[0,24,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,0,"pl-s"]],[[0,19,"pl-s"]],[[0,0,"pl-s"]],[[0,74,"pl-s"]],[[0,77,"pl-s"]],[[0,0,"pl-s"]],[[0,47,"pl-s"]],[[0,50,"pl-s"]],[[0,50,"pl-s"]],[[0,52,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,1,"pl-s"]],[[0,86,"pl-s"]],[[0,85,"pl-s"]],[[0,0,"pl-s"]],[[0,78,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,22,"pl-s"]],[[0,19,"pl-s"]],[[0,21,"pl-s"]],[[0,0,"pl-s"]],[[0,41,"pl-s"]],[[0,66,"pl-s"]],[[0,10,"pl-s"]],[[0,0,"pl-s"]],[[0,62,"pl-s"]],[[0,0,"pl-s"]],[[0,9,"pl-s"]],[[0,20,"pl-s"]],[[0,62,"pl-s"]],[[0,3,"pl-s"]],[[0,0,"pl-s"]],[[0,31,"pl-s"]],[[0,86,"pl-s"]],[[0,20,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,77,"pl-s"]],[[0,24,"pl-s"]],[[0,0,"pl-s"]],[[0,64,"pl-s"]],[[0,0,"pl-s"]],[[0,37,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,78,"pl-s"]],[[0,10,"pl-s"],[9,10,"pl-pds"]],[],[[0,8,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,47,"pl-s"],[21,22,"pl-k"],[31,32,"pl-k"],[33,34,"pl-k"],[44,45,"pl-k"]],[[0,56,"pl-s"]],[[0,70,"pl-s"],[14,23,"pl-s"],[14,15,"pl-pds"],[22,23,"pl-pds"],[31,32,"pl-k"],[42,43,"pl-k"],[44,45,"pl-k"],[69,70,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[3,62,"pl-s"],[3,4,"pl-pds"],[61,62,"pl-pds"],[76,79,"pl-k"]],[[29,30,"pl-k"],[36,37,"pl-k"]],[],[[64,66,"pl-k"]],[[14,79,"pl-c"],[14,15,"pl-c"]],[[67,68,"pl-k"],[79,80,"pl-k"]],[],[],[[28,33,"pl-k"],[47,51,"pl-c1"]],[[5,49,"pl-s"],[5,6,"pl-pds"],[27,29,"pl-k"],[48,49,"pl-pds"]],[[13,34,"pl-s"],[13,14,"pl-pds"],[33,34,"pl-pds"]],[[34,54,"pl-s"],[34,35,"pl-pds"],[53,54,"pl-pds"]],[],[[0,1,"pl-k"],[3,4,"pl-k"]],[[0,1,"pl-k"]],[[0,1,"pl-k"],[50,52,"pl-k"],[72,76,"pl-c1"]],[[0,1,"pl-k"],[69,71,"pl-k"]],[],[[20,27,"pl-c1"]],[],[[0,8,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,12,"pl-s"]],[[0,40,"pl-s"],[14,15,"pl-k"],[24,25,"pl-k"],[26,27,"pl-k"],[37,38,"pl-k"]],[[0,70,"pl-s"],[29,37,"pl-s"],[29,30,"pl-pds"],[30,36,"pl-s"],[30,32,"pl-pds"],[35,36,"pl-pds"],[36,37,"pl-pds"]],[[0,56,"pl-s"]],[[0,23,"pl-s"]],[[0,25,"pl-s"],[11,12,"pl-k"],[22,23,"pl-k"]],[[0,65,"pl-s"],[39,40,"pl-k"],[64,65,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[0,34,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[[0,32,"pl-c"],[0,1,"pl-c"]],[],[[42,45,"pl-k"]],[[39,55,"pl-s"],[39,40,"pl-pds"],[54,55,"pl-pds"],[61,68,"pl-c1"]],[],[],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,35,"pl-s"]],[[0,37,"pl-s"]],[[0,46,"pl-s"],[20,21,"pl-k"],[45,46,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[4,15,"pl-s"],[4,5,"pl-pds"],[14,15,"pl-pds"],[57,60,"pl-k"]],[[46,57,"pl-s"],[46,47,"pl-pds"],[56,57,"pl-pds"]],[[9,17,"pl-s"],[9,10,"pl-pds"],[16,17,"pl-pds"],[22,31,"pl-s"],[22,23,"pl-pds"],[30,31,"pl-pds"]],[[8,17,"pl-s"],[8,9,"pl-pds"],[16,17,"pl-pds"]],[],[[4,17,"pl-s"],[4,5,"pl-pds"],[16,17,"pl-pds"],[22,34,"pl-s"],[22,23,"pl-pds"],[33,34,"pl-pds"],[56,59,"pl-k"]],[[33,46,"pl-s"],[33,34,"pl-pds"],[45,46,"pl-pds"],[50,62,"pl-s"],[50,51,"pl-pds"],[61,62,"pl-pds"]],[],[[1,28,"pl-s"],[1,2,"pl-pds"],[27,28,"pl-pds"]],[[0,3,"pl-k"]],[],[[0,34,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[[2,29,"pl-s"],[2,3,"pl-pds"],[28,29,"pl-pds"]],[[2,33,"pl-s"],[2,3,"pl-pds"],[32,33,"pl-pds"]],[],[[2,35,"pl-s"],[2,3,"pl-pds"],[34,35,"pl-pds"]],[[2,38,"pl-s"],[2,3,"pl-pds"],[37,38,"pl-pds"]],[],[[2,38,"pl-s"],[2,3,"pl-pds"],[37,38,"pl-pds"]],[],[],[],[],[[2,41,"pl-s"],[2,3,"pl-pds"],[40,41,"pl-pds"]],[],[[2,58,"pl-s"],[2,3,"pl-pds"],[57,58,"pl-pds"]],[],[[2,53,"pl-s"],[2,3,"pl-pds"],[52,53,"pl-pds"]],[],[],[],[[3,9,"pl-c1"],[52,73,"pl-s"],[52,53,"pl-pds"],[72,73,"pl-pds"]],[],[[49,69,"pl-s"],[49,50,"pl-pds"],[68,69,"pl-pds"]],[],[[30,49,"pl-s"],[30,31,"pl-pds"],[48,49,"pl-pds"]],[[0,18,"pl-s"],[0,1,"pl-pds"],[17,18,"pl-pds"]],[],[[3,9,"pl-c1"],[30,44,"pl-s"],[30,31,"pl-pds"],[43,44,"pl-pds"]],[[27,37,"pl-s"],[27,28,"pl-pds"],[36,37,"pl-pds"]],[[14,17,"pl-c1"],[23,47,"pl-s"],[23,24,"pl-pds"],[46,47,"pl-pds"]],[],[[0,16,"pl-c"],[0,1,"pl-c"]],[],[[3,9,"pl-c1"]],[[8,22,"pl-s"],[8,9,"pl-pds"],[21,22,"pl-pds"]],[[10,12,"pl-k"],[43,76,"pl-s"],[43,44,"pl-pds"]],[[0,76,"pl-s"]],[[0,0,"pl-s"]],[[0,25,"pl-s"]],[[0,0,"pl-s"]],[[0,76,"pl-s"]],[[0,74,"pl-s"]],[[0,74,"pl-s"]],[[0,46,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"],[48,49,"pl-pds"]],[],[],[[40,43,"pl-k"]],[],[],[],[],[],[],[],[],[[0,29,"pl-c"],[0,1,"pl-c"]],[],[[0,30,"pl-c"],[0,1,"pl-c"]],[],[],[[12,17,"pl-k"]],[[21,23,"pl-k"]],[],[[20,23,"pl-k"]],[],[[0,31,"pl-c"],[0,1,"pl-c"]],[],[],[[71,77,"pl-s"],[71,72,"pl-pds"]],[[0,77,"pl-s"]],[[0,0,"pl-s"]],[[0,69,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"]],[[54,76,"pl-s"],[54,55,"pl-pds"]],[[0,76,"pl-s"]],[[0,73,"pl-s"]],[[0,52,"pl-s"]],[[0,0,"pl-s"]],[[0,80,"pl-s"]],[[0,0,"pl-s"]],[[0,77,"pl-s"]],[[0,80,"pl-s"]],[[0,0,"pl-s"]],[[0,91,"pl-s"]],[[0,85,"pl-s"]],[[0,0,"pl-s"]],[[0,12,"pl-s"],[11,12,"pl-pds"],[57,58,"pl-k"]],[],[[58,79,"pl-s"],[58,59,"pl-pds"]],[[0,70,"pl-s"]],[[0,76,"pl-s"]],[[0,38,"pl-s"]],[[0,0,"pl-s"]],[[0,49,"pl-s"]],[[0,0,"pl-s"]],[[0,74,"pl-s"]],[[0,80,"pl-s"]],[[0,78,"pl-s"]],[[0,74,"pl-s"]],[[0,73,"pl-s"]],[[0,0,"pl-s"]],[[0,55,"pl-s"]],[[0,0,"pl-s"]],[[0,80,"pl-s"]],[[0,77,"pl-s"],[76,77,"pl-pds"]],[],[[63,67,"pl-k"]],[],[],[[0,60,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[[14,21,"pl-c1"]],[],[[0,9,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,63,"pl-s"],[0,4,"pl-c1"],[5,51,"pl-s"],[5,6,"pl-pds"],[50,51,"pl-pds"],[52,53,"pl-k"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[],[],[],[[0,9,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[[0,102,"pl-s"],[2,6,"pl-c1"],[7,90,"pl-s"],[7,8,"pl-pds"],[89,90,"pl-pds"],[91,92,"pl-k"]],[[0,19,"pl-s"]],[[0,3,"pl-s"],[0,1,"pl-pds"],[1,2,"pl-pds"],[2,3,"pl-pds"]],[],[[11,15,"pl-s"],[11,12,"pl-pds"],[14,15,"pl-pds"]],[],[],[],[],[],[[0,26,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[],[],[[0,17,"pl-c"],[0,1,"pl-c"]],[],[[0,27,"pl-c"],[0,1,"pl-c"]],[],[],[[38,41,"pl-k"]],[],[[2,4,"pl-k"],[10,12,"pl-k"]],[],[[17,25,"pl-s"],[17,18,"pl-pds"],[24,25,"pl-pds"],[26,29,"pl-k"]],[],[[2,4,"pl-k"],[15,17,"pl-k"],[41,49,"pl-k"]],[[15,17,"pl-k"]],[],[[0,19,"pl-c"],[0,1,"pl-c"]],[],[[30,33,"pl-k"]],[],[],[],[[20,23,"pl-k"]],[],[[0,15,"pl-c"],[0,1,"pl-c"]],[],[],[[0,3,"pl-k"]],[],[],[[17,19,"pl-k"]],[[47,50,"pl-k"]],[],[],[[104,105,"pl-k"]],[[94,95,"pl-k"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"colorizedLines":null}},"title":"cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy","appPayload":{},"meta":{"title":"cloud-sql-proxy/README.md at main · GoogleCloudPlatform/cloud-sql-proxy"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/GoogleCloudPlatform/cloud-sql-proxy" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/GoogleCloudPlatform/cloud-sql-proxy/tree/main" data-discover="true">cloud-sql-proxy</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">README.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/GoogleCloudPlatform/cloud-sql-proxy/commits/main/README.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/GoogleCloudPlatform/cloud-sql-proxy/commits/main/README.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="32.4 KB" style="--truncate-max-width:100%"><span>890 lines (657 loc) · 32.4 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/GoogleCloudPlatform/cloud-sql-proxy/tree/main" data-discover="true">cloud-sql-proxy</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">README.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="32.4 KB" style="--truncate-max-width:100%"><span>890 lines (657 loc) · 32.4 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/GoogleCloudPlatform/cloud-sql-proxy/raw/refs/heads/main/README.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">Cloud SQL Auth Proxy</h1><a id="user-content-cloud-sql-auth-proxy" class="anchor" aria-label="Permalink: Cloud SQL Auth Proxy" href="#cloud-sql-auth-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml?query=event%3Apush+branch%3Amain"><img src="https://github.com/GoogleCloudPlatform/cloudsql-proxy/actions/workflows/tests.yaml/badge.svg?event=push" alt="CI" style="max-width: 100%;"></a></p>
<div class="markdown-alert markdown-alert-warning" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-alert mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Warning</p><p dir="auto"><strong>Go versions 1.25.2 and 1.24.8 are NOT compatible with Cloud Auth Proxy.</strong></p>
<p dir="auto">An update to the Go version 1.25.2 and Go 1.24.8 breaks SAN verificaton. This is because Cloud SQL includes a trailing dot in the DNS name within the certificate's Subject Alternative Name (SAN), which the above Go versions reject as a malformed DNS name.</p>
<p dir="auto">For more details, please see the related Go issue: <a href="https://github.com/golang/go/issues/75715" data-hovercard-type="issue" data-hovercard-url="/golang/go/issues/75715/hovercard">crypto/x509: quadratic complexity when checking name constraints </a>.</p>
</div>
<div class="markdown-alert markdown-alert-important" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-report mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Important</p>
<p dir="auto">The Cloud SQL Auth Proxy does not currently support Unix domain socket
connections to MySQL 8.4 instances. This is due to a <a href="https://github.com/GoogleCloudPlatform/cloud-sql-proxy/issues/2317" data-hovercard-type="issue" data-hovercard-url="/GoogleCloudPlatform/cloud-sql-proxy/issues/2317/hovercard">known issue</a>
involving the new default <code>caching_sha2_password</code> authentication plugin.</p>
</div>
<p dir="auto">The Cloud SQL Auth Proxy is a utility for ensuring secure connections to your
Cloud SQL instances. It provides IAM authorization, allowing you to control who
can connect to your instance through IAM permissions, and TLS 1.3 encryption,
without having to manage certificates.</p>
<p dir="auto">See the <a href="https://cloud.google.com/sql/docs/mysql/connect-overview" rel="nofollow">Connecting Overview</a> page for more information on
connecting to a Cloud SQL instance, or the <a href="https://cloud.google.com/sql/docs/mysql/sql-proxy" rel="nofollow">About the Proxy</a> page
for details on how the Cloud SQL Proxy works.</p>
<p dir="auto">The Cloud SQL Auth Proxy has support for:</p>
<ul dir="auto">
<li><a href="https://cloud.google.com/sql/docs/postgres/iam-authentication#auto-iam-auth" rel="nofollow">Automatic IAM Authentication</a> (Postgres and MySQL only)</li>
<li>Metrics (<a href="https://cloud.google.com/monitoring" rel="nofollow">Cloud Monitoring</a>, <a href="https://cloud.google.com/trace" rel="nofollow">Cloud Trace</a>, and <a href="https://prometheus.io/" rel="nofollow">Prometheus</a>)</li>
<li><a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-health-check#cloud-sql-proxy-health-checks">HTTP Healthchecks</a></li>
<li><a href="#configuring-service-account-impersonation">Service account impersonation</a></li>
<li>Separate Dialer functionality released as the <a href="https://github.com/GoogleCloudPlatform/cloud-sql-go-connector">Cloud SQL Go Connector</a></li>
<li>Configuration with <a href="#config-environment-variables">environment variables</a></li>
<li>Fully POSIX-compliant flags</li>
</ul>
<p dir="auto">If you're using Go, Java, Python, or Node.js, consider using the corresponding Cloud SQL
connector which does everything the Proxy does, but in process:</p>
<ul dir="auto">
<li><a href="https://github.com/GoogleCloudPlatform/cloud-sql-go-connector">Cloud SQL Go connector</a></li>
<li><a href="https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory">Cloud SQL Java connector</a></li>
<li><a href="https://github.com/GoogleCloudPlatform/cloud-sql-python-connector">Cloud SQL Python connector</a></li>
<li><a href="https://github.com/GoogleCloudPlatform/cloud-sql-nodejs-connector">Cloud SQL Node.js connector</a></li>
</ul>
<p dir="auto">For users migrating from v1, see the <a href="/GoogleCloudPlatform/cloud-sql-proxy/blob/main/migration-guide.md">Migration Guide</a>.
The <a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/5f5b09b62eb6dfcaa58ce399d0131c1544bf813f/README.md">v1 README</a> is still available.</p>
<div class="markdown-alert markdown-alert-important" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-report mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Important</p>
<p dir="auto">The Proxy does not configure the network between the VM it's running on
and the Cloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL
instance, either by deploying it in a VPC that has access to your Private IP
instance, or by configuring Public IP.</p>
</div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Installation</h2><a id="user-content-installation" class="anchor" aria-label="Permalink: Installation" href="#installation"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Check for the latest version on the <a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/releases">releases page</a> and use the
following instructions for your OS and CPU architecture.</p>
<div class="markdown-alert markdown-alert-note" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p>
<p dir="auto">Starting with version <code>v2.17.1</code>, Windows binaries provided on the
<a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/releases">releases page</a> are signed with Google LLC certificates.</p>
</div>

<details open="">
<summary>Linux amd64</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.linux.amd64&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.linux.amd64<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Linux 386</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.linux.386&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.linux.386<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Linux arm64</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.linux.arm64&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.linux.arm64<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Linux arm</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.linux.arm&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.linux.arm<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Mac (Intel)</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.darwin.amd64&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.darwin.amd64<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Mac (Apple Silicon)</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
URL=&quot;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4&quot;

curl &quot;$URL/cloud-sql-proxy.darwin.arm64&quot; -o cloud-sql-proxy

chmod +x cloud-sql-proxy"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
URL=<span class="pl-s"><span class="pl-pds">"</span>https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4<span class="pl-pds">"</span></span>

curl <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$URL</span>/cloud-sql-proxy.darwin.arm64<span class="pl-pds">"</span></span> -o cloud-sql-proxy

chmod +x cloud-sql-proxy</pre></div>
</details>
<details>
<summary>Windows x64</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x64.exe -o cloud-sql-proxy.exe"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x64.exe -o cloud-sql-proxy.exe</pre></div>
</details>
<details>
<summary>Windows x86</summary>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# see Releases for other versions
curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x86.exe -o cloud-sql-proxy.exe"><pre><span class="pl-c"><span class="pl-c">#</span> see Releases for other versions</span>
curl https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.25.4/cloud-sql-proxy.x86.exe -o cloud-sql-proxy.exe</pre></div>
</details>

<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Install from Source</h3><a id="user-content-install-from-source" class="anchor" aria-label="Permalink: Install from Source" href="#install-from-source"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To install from source, ensure you have the latest version of <a href="https://go.dev/doc/install" rel="nofollow">Go installed</a>.</p>
<p dir="auto">Then, simply run:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="go install github.com/GoogleCloudPlatform/cloud-sql-proxy/v2@latest"><pre>go install github.com/GoogleCloudPlatform/cloud-sql-proxy/v2@latest</pre></div>
<p dir="auto">The <code>cloud-sql-proxy</code> will be placed in <code>$GOPATH/bin</code> or <code>$HOME/go/bin</code>.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Usage</h2><a id="user-content-usage" class="anchor" aria-label="Permalink: Usage" href="#usage"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The following examples all reference an <code>INSTANCE_CONNECTION_NAME</code>, which takes
the form: <code>myproject:myregion:myinstance</code>.</p>
<p dir="auto">To find your Cloud SQL instance's <code>INSTANCE_CONNECTION_NAME</code>, visit the detail
page of your Cloud SQL instance in the console, or use <code>gcloud</code> with:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="gcloud sql instances describe &lt;INSTANCE_NAME&gt; --format='value(connectionName)'"><pre>gcloud sql instances describe <span class="pl-k">&lt;</span>INSTANCE_NAME<span class="pl-k">&gt;</span> --format=<span class="pl-s"><span class="pl-pds">'</span>value(connectionName)<span class="pl-pds">'</span></span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Credentials</h3><a id="user-content-credentials" class="anchor" aria-label="Permalink: Credentials" href="#credentials"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Cloud SQL Proxy uses a Cloud IAM principal to authorize connections against
a Cloud SQL instance. The Proxy sources the credentials using
<a href="https://cloud.google.com/docs/authentication/production" rel="nofollow">Application Default Credentials</a>.</p>
<div class="markdown-alert markdown-alert-note" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p>
<p dir="auto">Any IAM principal connecting to a Cloud SQL database will need one of the
following IAM roles:</p>
<ul dir="auto">
<li>Cloud SQL Client (preferred)</li>
<li>Cloud SQL Editor</li>
<li>Cloud SQL Admin</li>
</ul>
<p dir="auto">Or one may manually assign the following IAM permissions:</p>
<ul dir="auto">
<li><code>cloudsql.instances.connect</code></li>
<li><code>cloudsql.instances.get</code></li>
</ul>
<p dir="auto">See <a href="https://cloud.google.com/sql/docs/mysql/roles-and-permissions" rel="nofollow">Roles and Permissions in Cloud SQL</a> for details.</p>
</div>
<p dir="auto">When the Proxy authenticates under the Compute Engine VM's default service
account, the VM must have at least the <code>sqlservice.admin</code> API scope (i.e.,
"<a href="https://www.googleapis.com/auth/sqlservice.admin" rel="nofollow">https://www.googleapis.com/auth/sqlservice.admin</a>") and the associated project
must have the SQL Admin API enabled. The default service account must also have
at least writer or editor privileges to any projects of target SQL instances.</p>
<p dir="auto">The Proxy also supports two flags related to credentials:</p>
<ul dir="auto">
<li><code>--token</code> to use an OAuth2 token</li>
<li><code>--credentials-file</code> to use a service account key file</li>
</ul>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Basic Usage</h3><a id="user-content-basic-usage" class="anchor" aria-label="Permalink: Basic Usage" href="#basic-usage"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To start the Proxy, use:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# starts the Proxy listening on localhost with the default database engine port
# For example:
#   MySQL      localhost:3306
#   Postgres   localhost:5432
#   SQL Server localhost:1433
./cloud-sql-proxy &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> starts the Proxy listening on localhost with the default database engine port</span>
<span class="pl-c"><span class="pl-c">#</span> For example:</span>
<span class="pl-c"><span class="pl-c">#</span>   MySQL      localhost:3306</span>
<span class="pl-c"><span class="pl-c">#</span>   Postgres   localhost:5432</span>
<span class="pl-c"><span class="pl-c">#</span>   SQL Server localhost:1433</span>
./cloud-sql-proxy <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">The Proxy will automatically detect the default database engine's port and start
a corresponding listener. Production deployments should use the <code>--port</code> flag to
reduce startup time.</p>
<p dir="auto">The Proxy supports multiple instances:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy &lt;INSTANCE_CONNECTION_NAME_1&gt; &lt;INSTANCE_CONNECTION_NAME_2&gt;"><pre>./cloud-sql-proxy <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME_<span class="pl-k">1&gt;</span> <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME_<span class="pl-k">2&gt;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring Port</h3><a id="user-content-configuring-port" class="anchor" aria-label="Permalink: Configuring Port" href="#configuring-port"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To override the port, use the <code>--port</code> flag:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on localhost:6000
./cloud-sql-proxy --port 6000 &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on localhost:6000</span>
./cloud-sql-proxy --port 6000 <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">When specifying multiple instances, the port will increment from the flag value:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on localhost:6000 for INSTANCE_CONNECTION_1
# and localhost:6001 for INSTANCE_CONNECTION_NAME_2.
./cloud-sql-proxy --port 6000 &lt;INSTANCE_CONNECTION_NAME_1&gt; &lt;INSTANCE_CONNECTION_NAME_2&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on localhost:6000 for INSTANCE_CONNECTION_1</span>
<span class="pl-c"><span class="pl-c">#</span> and localhost:6001 for INSTANCE_CONNECTION_NAME_2.</span>
./cloud-sql-proxy --port 6000 <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME_<span class="pl-k">1&gt;</span> <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME_<span class="pl-k">2&gt;</span></pre></div>
<p dir="auto">To configure ports on a per instance basis, use the <code>port</code> query param:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on localhost:5000 for the instance called &quot;postgres&quot;
# and starts a listener on localhost:6000 for the instance called &quot;mysql&quot;
./cloud-sql-proxy \
    'myproject:my-region:postgres?port=5000' \
    'myproject:my-region:mysql?port=6000'"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on localhost:5000 for the instance called "postgres"</span>
<span class="pl-c"><span class="pl-c">#</span> and starts a listener on localhost:6000 for the instance called "mysql"</span>
./cloud-sql-proxy \
    <span class="pl-s"><span class="pl-pds">'</span>myproject:my-region:postgres?port=5000<span class="pl-pds">'</span></span> \
    <span class="pl-s"><span class="pl-pds">'</span>myproject:my-region:mysql?port=6000<span class="pl-pds">'</span></span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring Listening Address</h3><a id="user-content-configuring-listening-address" class="anchor" aria-label="Permalink: Configuring Listening Address" href="#configuring-listening-address"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To override the choice of <code>localhost</code>, use the <code>--address</code> flag:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on all interfaces at port 5432
./cloud-sql-proxy --address 0.0.0.0 &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on all interfaces at port 5432</span>
./cloud-sql-proxy --address 0.0.0.0 <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">To override address on a per-instance basis, use the <code>address</code> query param:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on 0.0.0.0 for &quot;postgres&quot; at port 5432
# and a listener on 10.0.0.1:3306 for &quot;mysql&quot;
./cloud-sql-proxy \
    'myproject:my-region:postgres?address=0.0.0.0' \
    'myproject:my-region:mysql?address=10.0.0.1&quot;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on 0.0.0.0 for "postgres" at port 5432</span>
<span class="pl-c"><span class="pl-c">#</span> and a listener on 10.0.0.1:3306 for "mysql"</span>
./cloud-sql-proxy \
    <span class="pl-s"><span class="pl-pds">'</span>myproject:my-region:postgres?address=0.0.0.0<span class="pl-pds">'</span></span> \
    <span class="pl-s"><span class="pl-pds">'</span>myproject:my-region:mysql?address=10.0.0.1"</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring Private IP</h3><a id="user-content-configuring-private-ip" class="anchor" aria-label="Permalink: Configuring Private IP" href="#configuring-private-ip"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">By default, the Proxy attempts to connect to an instance's public IP. To enable
private IP, use:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener connected to the private IP of the Cloud SQL instance.
# Note: there must be a network path present for this to work.
./cloud-sql-proxy --private-ip &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener connected to the private IP of the Cloud SQL instance.</span>
<span class="pl-c"><span class="pl-c">#</span> Note: there must be a network path present for this to work.</span>
./cloud-sql-proxy --private-ip <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<div class="markdown-alert markdown-alert-important" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-report mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Important</p>
<p dir="auto">The Proxy does not configure the network. You MUST ensure the Proxy can
reach your Cloud SQL instance, either by deploying it in a VPC that has access
to your Private IP instance, or by configuring Public IP.</p>
</div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring Unix domain sockets</h3><a id="user-content-configuring-unix-domain-sockets" class="anchor" aria-label="Permalink: Configuring Unix domain sockets" href="#configuring-unix-domain-sockets"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy also supports <a href="https://en.wikipedia.org/wiki/Unix_domain_socket" rel="nofollow">Unix domain sockets</a>.
To start the Proxy with Unix sockets, run:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Uses the directory &quot;/mycooldir&quot; to create a Unix socket
# For example, the following directory would be created:
#   /mycooldir/myproject:myregion:myinstance
./cloud-sql-proxy --unix-socket /mycooldir &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Uses the directory "/mycooldir" to create a Unix socket</span>
<span class="pl-c"><span class="pl-c">#</span> For example, the following directory would be created:</span>
<span class="pl-c"><span class="pl-c">#</span>   /mycooldir/myproject:myregion:myinstance</span>
./cloud-sql-proxy --unix-socket /mycooldir <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">To configure a Unix domain socket on a per-instance basis, use the <code>unix-socket</code>
query param:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a TCP listener on localhost:5432 for &quot;postgres&quot;
# and creates a Unix domain socket for &quot;mysql&quot;:
#     /cloudsql/myproject:my-region:mysql
./cloud-sql-proxy \
    myproject:my-region:postgres \
    'myproject:my-region:mysql?unix-socket=/cloudsql'"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a TCP listener on localhost:5432 for "postgres"</span>
<span class="pl-c"><span class="pl-c">#</span> and creates a Unix domain socket for "mysql":</span>
<span class="pl-c"><span class="pl-c">#</span>     /cloudsql/myproject:my-region:mysql</span>
./cloud-sql-proxy \
    myproject:my-region:postgres \
    <span class="pl-s"><span class="pl-pds">'</span>myproject:my-region:mysql?unix-socket=/cloudsql<span class="pl-pds">'</span></span></pre></div>
<div class="markdown-alert markdown-alert-note" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p>
<p dir="auto">The Proxy supports Unix domain sockets on recent versions of Windows, but
replaces colons with periods:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a Unix domain socket at the path:
#    C:\cloudsql\myproject.my-region.mysql
./cloud-sql-proxy --unix-socket C:\cloudsql myproject:my-region:mysql"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a Unix domain socket at the path:</span>
<span class="pl-c"><span class="pl-c">#</span>    C:\cloudsql\myproject.my-region.mysql</span>
./cloud-sql-proxy --unix-socket C:<span class="pl-cce">\c</span>loudsql myproject:my-region:mysql</pre></div>
</div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring IAM Database Authentication</h3><a id="user-content-configuring-iam-database-authentication" class="anchor" aria-label="Permalink: Configuring IAM Database Authentication" href="#configuring-iam-database-authentication"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy supports <a href="https://cloud.google.com/sql/docs/postgres/iam-authentication#auto-iam-auth" rel="nofollow">Automatic IAM Database Authentication</a> for MySQL
and Postgres instances, allowing IAM principal's to authenticate and connect
as database users.</p>
<p dir="auto">Make sure to configure your <a href="https://cloud.google.com/sql/docs/postgres/create-edit-iam-instances#configure-iam-db-instance" rel="nofollow">Cloud SQL instance to allow IAM authentication</a>
and to <a href="https://cloud.google.com/sql/docs/postgres/add-manage-iam-users#creating-a-database-user" rel="nofollow">add your IAM principal as a database user</a>.</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy --auto-iam-authn &lt;INSTANCE_CONNECTION_NAME&gt;"><pre>./cloud-sql-proxy --auto-iam-authn <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<div class="markdown-alert markdown-alert-important" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-report mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Important</p>
<p dir="auto">Make sure to run the Proxy as the same IAM principal as the database user
you want to log in as. Only the IAM principal that is attached to the
<a href="#credentials">sourced credentials</a> will be able to successfully log in
via automatic IAM database authentication.</p>
<p dir="auto">When logging in using an IAM database user, Cloud SQL truncates usernames
based on the engine type in order to not exceed character limits.
PostgreSQL's username character limit is 63, while MySQL's is 32.</p>
<p dir="auto">Cloud SQL IAM database usernames are formatted in the following way:</p>
<p dir="auto"><strong>Postgres</strong>:</p>
<ul dir="auto">
<li>For an IAM user account, this is the user's email address.</li>
<li>For a service account, it is the service account's email without the
<code>.gserviceaccount.com</code> domain suffix.</li>
</ul>
<p dir="auto"><strong>MySQL</strong>:</p>
<ul dir="auto">
<li>For an IAM user account, this is the user's email address,
without the <code>@</code> or domain name. For example, for <code>test-user@gmail.com</code>,
the database user would be <code>test-user</code>.</li>
<li>For a service account, this is the service account's email address without
the <code>@project-id.iam.gserviceaccount.com</code> suffix.</li>
</ul>
</div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring Service Account Impersonation</h3><a id="user-content-configuring-service-account-impersonation" class="anchor" aria-label="Permalink: Configuring Service Account Impersonation" href="#configuring-service-account-impersonation"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy supports <a href="https://cloud.google.com/iam/docs/impersonating-service-accounts" rel="nofollow">service account impersonation</a>.
This allows the Proxy to act as a different service account, which can be useful
for granting access to resources that are not accessible to the default IAM
principal.</p>
<p dir="auto">To use service account impersonation, you must have the
<code>iam.serviceAccounts.getAccessToken</code> permission on the IAM principal
impersonating another service account. You can grant this permission by assigning
the <code>roles/iam.serviceAccountTokenCreator</code> role to the IAM principal.</p>
<p dir="auto">To impersonate a service account, use the <code>--impersonate-service-account</code> flag:</p>
<div class="markdown-alert markdown-alert-note" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p>
<p dir="auto">The impersonated service account must have the <code>Service Usage Consumer</code> and
<code>Cloud SQL Client</code> permissions.
Additionally, to use IAM Authenticated users, add the <code>Cloud SQL Instance User</code>
permission.</p>
</div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Starts a listener on localhost:5432 and impersonates the service account
# &quot;my-other-sa@my-project.iam.gserviceaccount.com&quot;.
# The Proxy will use the credentials of the principal running the Proxy to
# generate a short-lived access token for the impersonated service account.
./cloud-sql-proxy --impersonate-service-account \
my-other-sa@my-project.iam.gserviceaccount.com &lt;INSTANCE_CONNECTION_NAME&gt;"><pre><span class="pl-c"><span class="pl-c">#</span> Starts a listener on localhost:5432 and impersonates the service account</span>
<span class="pl-c"><span class="pl-c">#</span> "my-other-sa@my-project.iam.gserviceaccount.com".</span>
<span class="pl-c"><span class="pl-c">#</span> The Proxy will use the credentials of the principal running the Proxy to</span>
<span class="pl-c"><span class="pl-c">#</span> generate a short-lived access token for the impersonated service account.</span>
./cloud-sql-proxy --impersonate-service-account \
my-other-sa@my-project.iam.gserviceaccount.com <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Using Advanced Disaster Recovery and DNS domain names to identify instances</h3><a id="user-content-using-advanced-disaster-recovery-and-dns-domain-names-to-identify-instances" class="anchor" aria-label="Permalink: Using Advanced Disaster Recovery and DNS domain names to identify instances" href="#using-advanced-disaster-recovery-and-dns-domain-names-to-identify-instances"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The proxy can be configured to use DNS to look up an instance.
Use a DNS name managed by Cloud SQL <a href="https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery" rel="nofollow">Advanced Disaster Recovery</a>,
or a domain name that you manage.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Using Advanced Recovery Write Endpoint DNS Name</h4><a id="user-content-using-advanced-recovery-write-endpoint-dns-name" class="anchor" aria-label="Permalink: Using Advanced Recovery Write Endpoint DNS Name" href="#using-advanced-recovery-write-endpoint-dns-name"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://docs.cloud.google.com/sql/docs/mysql/use-advanced-disaster-recovery" rel="nofollow">Advanced Disaster Recovery</a>
creates geographically distributed replicas of your Cloud SQL database instance. When you perform
switchover or failover on the database instance, the proxy will gracefully disconnect from the
old primary instance and reconnect to the new primary instance.</p>
<p dir="auto">Follow the instructions in <a href="https://docs.cloud.google.com/sql/docs/mysql/connect-to-instance-using-write-endpoint" rel="nofollow">Connect using Write Endpoint</a>
to get the write endpoint DNS name for your primary instance. Then, use this write endpoint DNS
name to configure the proxy.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Configure your DNS Records</h4><a id="user-content-configure-your-dns-records" class="anchor" aria-label="Permalink: Configure your DNS Records" href="#configure-your-dns-records"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The proxy may be configured to use DNS that you define as well.</p>
<p dir="auto">Add a DNS TXT record for the Cloud SQL instance to a <strong>private</strong> DNS server
or a private Google Cloud DNS Zone used by your application.</p>
<p dir="auto"><strong>Note:</strong> You are strongly discouraged from adding DNS records for your
Cloud SQL instances to a public DNS server. This would allow anyone on the
internet to discover the Cloud SQL instance name.</p>
<p dir="auto">For example: suppose you wanted to use the domain name
<code>prod-db.mycompany.example.com</code> to connect to your database instance
<code>my-project:region:my-instance</code>. You would create the following DNS record:</p>
<ul dir="auto">
<li>Record type: <code>TXT</code></li>
<li>Name: <code>prod-db.mycompany.example.com</code> – This is the domain name used by the application</li>
<li>Value: <code>my-project:region:my-instance</code> – This is the instance name</li>
</ul>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Configuring the Proxy</h4><a id="user-content-configuring-the-proxy" class="anchor" aria-label="Permalink: Configuring the Proxy" href="#configuring-the-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Configure the Proxy with your DNS domain name instead of an instance connection
name:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy prod-db.mycompany.example.com"><pre>./cloud-sql-proxy prod-db.mycompany.example.com</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Automatic fail-over using DNS domain names</h3><a id="user-content-automatic-fail-over-using-dns-domain-names" class="anchor" aria-label="Permalink: Automatic fail-over using DNS domain names" href="#automatic-fail-over-using-dns-domain-names"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">When the Proxy is configured using a domain name, it will
periodically check if the DNS record for an instance changes. When the Proxy
detects that the domain name refers to a different instance, it will
close all open connections to the old instance. Subsequent connection attempts
will be directed to the new instance.</p>
<p dir="auto">For example: suppose application is configured to connect using the
domain name <code>prod-db.mycompany.example.com</code>. Initially the corporate DNS
zone has a TXT record with the value <code>my-project:region:my-instance</code>. The
application establishes connections to the <code>my-project:region:my-instance</code>
Cloud SQL instance.</p>
<p dir="auto">Then, to reconfigure the application to use a different database
instance, change the value of the <code>prod-db.mycompany.example.com</code> DNS record
from <code>my-project:region:my-instance</code> to <code>my-project:other-region:my-instance-2</code></p>
<p dir="auto">The Proxy detects the change to this DNS record.
Now, when the application connects to its database using the
domain name <code>prod-db.mycompany.example.com</code>, it will connect to the
<code>my-project:other-region:my-instance-2</code> Cloud SQL instance.</p>
<p dir="auto">The Proxy will automatically close all existing connections to
<code>my-project:region:my-instance</code>. This will force the connection pools to
establish new connections. Also, it may cause database queries in progress
to fail.</p>
<p dir="auto">The Proxy will poll for changes to the DNS name every 30 seconds by default.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Testing Connectivity</h3><a id="user-content-testing-connectivity" class="anchor" aria-label="Permalink: Testing Connectivity" href="#testing-connectivity"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy includes support for a connection test on startup. This test helps
ensure the Proxy can reach the associated instance and is a quick debugging
tool. The test will attempt to connect to the specified instance(s) and fail
if the instance is unreachable. If the test fails, the Proxy will exit with
a non-zero exit code.</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy --run-connection-test &lt;INSTANCE_CONNECTION_NAME&gt;"><pre>./cloud-sql-proxy --run-connection-test <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Config file</h3><a id="user-content-config-file" class="anchor" aria-label="Permalink: Config file" href="#config-file"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy supports a configuration file. Supported file types are TOML, JSON,
and YAML. Load the file with the <code>--config-file</code> flag:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy --config-file /path/to/config.[toml|json|yaml]"><pre>./cloud-sql-proxy --config-file /path/to/config.[toml<span class="pl-k">|</span>json<span class="pl-k">|</span>yaml]</pre></div>
<p dir="auto">The configuration file format supports all flags. The key names should match
the flag names. For example:</p>
<div class="highlight highlight-source-toml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# use instance-connection-name-0, instance-connection-name-1, etc.
# for multiple instances
instance-connection-name = &quot;proj:region:inst&quot;
auto-iam-authn = true
debug = true
debug-logs = true"><pre><span class="pl-c"><span class="pl-c">#</span> use instance-connection-name-0, instance-connection-name-1, etc.</span>
<span class="pl-c"><span class="pl-c">#</span> for multiple instances</span>
<span class="pl-smi">instance-connection-name</span> = <span class="pl-s"><span class="pl-pds">"</span>proj:region:inst<span class="pl-pds">"</span></span>
<span class="pl-smi">auto-iam-authn</span> = <span class="pl-c1">true</span>
<span class="pl-smi">debug</span> = <span class="pl-c1">true</span>
<span class="pl-smi">debug-logs</span> = <span class="pl-c1">true</span></pre></div>
<p dir="auto">Run <code>./cloud-sql-proxy --help</code> for more details. See the full documentation
in <a href="/GoogleCloudPlatform/cloud-sql-proxy/blob/main/docs/cmd">docs/cmd</a>.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Config environment variables</h3><a id="user-content-config-environment-variables" class="anchor" aria-label="Permalink: Config environment variables" href="#config-environment-variables"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The proxy supports configuration through environment variables.
Each environment variable uses "CSQL_PROXY" as a prefix and is
the uppercase version of the flag using underscores as word delimiters.</p>
<p dir="auto">For example, the <code>--auto-iam-authn</code> flag may be set with the environment variable
<code>CSQL_PROXY_AUTO_IAM_AUTHN</code>.</p>
<p dir="auto">An invocation of the Proxy using environment variables would look like the following:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="CSQL_PROXY_AUTO_IAM_AUTHN=true \ 
    ./cloud-sql-proxy &lt;INSTANCE_CONNECTION_NAME&gt;"><pre>CSQL_PROXY_AUTO_IAM_AUTHN=true <span class="pl-cce">\ </span>
    ./cloud-sql-proxy <span class="pl-k">&lt;</span>INSTANCE_CONNECTION_NAME<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">Run <code>./cloud-sql-proxy --help</code> for more details.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Configuring a Lazy Refresh</h3><a id="user-content-configuring-a-lazy-refresh" class="anchor" aria-label="Permalink: Configuring a Lazy Refresh" href="#configuring-a-lazy-refresh"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The <code>--lazy-refresh</code> flag configures the Proxy to retrieve connection info
lazily and as-needed. Otherwise, no background refresh cycle runs. This setting
is useful in environments where the CPU may be throttled outside of a request
context, e.g., Cloud Run, Cloud Functions, etc.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Additional flags</h3><a id="user-content-additional-flags" class="anchor" aria-label="Permalink: Additional flags" href="#additional-flags"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To see a full list of flags, use:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="./cloud-sql-proxy --help"><pre>./cloud-sql-proxy --help</pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Container Images</h2><a id="user-content-container-images" class="anchor" aria-label="Permalink: Container Images" href="#container-images"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">There are containerized versions of the Proxy available from the following
<a href="https://cloud.google.com/artifact-registry" rel="nofollow">Artifact Registry</a> repositories:</p>
<ul dir="auto">
<li><code>gcr.io/cloud-sql-connectors/cloud-sql-proxy</code></li>
<li><code>us.gcr.io/cloud-sql-connectors/cloud-sql-proxy</code></li>
<li><code>eu.gcr.io/cloud-sql-connectors/cloud-sql-proxy</code></li>
<li><code>asia.gcr.io/cloud-sql-connectors/cloud-sql-proxy</code></li>
</ul>
<div class="markdown-alert markdown-alert-note" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p>
<p dir="auto">The above container images were migrated from Google Container Registry (deprecated)
to Artifact Registry which is why they begin with the old naming pattern (<code>gcr.io</code>)</p>
</div>
<p dir="auto">Each image is tagged with the associated Proxy version. The following tags are
currently supported:</p>
<ul dir="auto">
<li><code>$VERSION</code> (default)</li>
<li><code>$VERSION-alpine</code></li>
<li><code>$VERSION-bookworm</code></li>
</ul>

<p dir="auto">The <code>$VERSION</code> is the Proxy version without the leading "v" (e.g.,
<code>2.25.4</code>).</p>
<p dir="auto">For example, to pull a particular version, use a command like:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# $VERSION is 2.25.4
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.25.4"><pre><span class="pl-c"><span class="pl-c">#</span> $VERSION is 2.25.4</span>
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.25.4</pre></div>

<p dir="auto">We recommend pinning to a specific version tag and using automation with a CI pipeline
to update regularly.</p>
<p dir="auto">The default container image uses <a href="https://github.com/GoogleContainerTools/distroless">distroless</a> with a non-root user. If you
need a shell or related tools, use the Alpine or Debian-based container image
(bookworm) listed above.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Working with Docker and the Proxy</h3><a id="user-content-working-with-docker-and-the-proxy" class="anchor" aria-label="Permalink: Working with Docker and the Proxy" href="#working-with-docker-and-the-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The containers have the proxy as an <code>ENTRYPOINT</code> so, to use the proxy from a
container, all you need to do is specify options using the command, and expose
the proxy's internal port to the host. For example, you can use:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="docker run --publish &lt;host-port&gt;:&lt;proxy-port&gt; \
    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \
    --address &quot;0.0.0.0&quot; --port &lt;proxy-port&gt; &lt;instance-connection-name&gt;"><pre>docker run --publish <span class="pl-k">&lt;</span>host-port<span class="pl-k">&gt;</span>:<span class="pl-k">&lt;</span>proxy-port<span class="pl-k">&gt;</span> \
    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \
    --address <span class="pl-s"><span class="pl-pds">"</span>0.0.0.0<span class="pl-pds">"</span></span> --port <span class="pl-k">&lt;</span>proxy-port<span class="pl-k">&gt;</span> <span class="pl-k">&lt;</span>instance-connection-name<span class="pl-k">&gt;</span></pre></div>
<p dir="auto">You'll need the <code>--address "0.0.0.0"</code> so that the proxy doesn't only listen for
connections originating from <em>within</em> the container.</p>
<p dir="auto">You will need to authenticate using one of the methods outlined in the
<a href="#credentials">credentials</a> section. If using a credentials file you must mount
the file and ensure that the non-root user that runs the proxy has <em>read access</em>
to the file. These alternatives might help:</p>
<ol dir="auto">
<li>Change the group of your local file and add read permissions to the group
with <code>chgrp 65532 key.json &amp;&amp; chmod g+r key.json</code>.</li>
<li>If you can't control your file's group, you can directly change the public
permissions of your file by doing <code>chmod o+r key.json</code>.</li>
</ol>
<div class="markdown-alert markdown-alert-warning" dir="auto"><p class="markdown-alert-title" dir="auto"><svg data-component="Octicon" class="octicon octicon-alert mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Warning</p>
<p dir="auto">This can be insecure because it allows any user in the host system to read
the credential file which they can use to authenticate to services in GCP.</p>
</div>
<p dir="auto">For example, a full command using a JSON credentials file might look like</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="docker run \
    --publish &lt;host-port&gt;:&lt;proxy-port&gt; \
    --mount type=bind,source=&quot;$(pwd)&quot;/sa.json,target=/config/sa.json \
    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \
    --address 0.0.0.0 \
    --port &lt;proxy-port&gt; \
    --credentials-file /config/sa.json &lt;instance-connection-name&gt;"><pre>docker run \
    --publish <span class="pl-k">&lt;</span>host-port<span class="pl-k">&gt;</span>:<span class="pl-k">&lt;</span>proxy-port<span class="pl-k">&gt;</span> \
    --mount type=bind,source=<span class="pl-s"><span class="pl-pds">"</span><span class="pl-s"><span class="pl-pds">$(</span>pwd<span class="pl-pds">)</span></span><span class="pl-pds">"</span></span>/sa.json,target=/config/sa.json \
    gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \
    --address 0.0.0.0 \
    --port <span class="pl-k">&lt;</span>proxy-port<span class="pl-k">&gt;</span> \
    --credentials-file /config/sa.json <span class="pl-k">&lt;</span>instance-connection-name<span class="pl-k">&gt;</span></pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Running as a Kubernetes Sidecar</h2><a id="user-content-running-as-a-kubernetes-sidecar" class="anchor" aria-label="Permalink: Running as a Kubernetes Sidecar" href="#running-as-a-kubernetes-sidecar"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">See the <a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/master/examples/k8s-sidecar#run-the-cloud-sql-proxy-as-a-sidecar">example here</a> as well as <a href="https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine" rel="nofollow">Connecting from Google
Kubernetes Engine</a>.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Running behind a Socks5 proxy</h2><a id="user-content-running-behind-a-socks5-proxy" class="anchor" aria-label="Permalink: Running behind a Socks5 proxy" href="#running-behind-a-socks5-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Cloud SQL Auth Proxy includes support for sending requests through a SOCKS5
proxy. If a SOCKS5 proxy is running on <code>localhost:8000</code>, the command to start
the Cloud SQL Auth Proxy would look like:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="ALL_PROXY=socks5://localhost:8000 \
HTTPS_PROXY=socks5://localhost:8000 \
    cloud-sql-proxy &lt;INSTANCE_CONNECTION_NAME&gt;"><pre class="notranslate"><code>ALL_PROXY=socks5://localhost:8000 \
HTTPS_PROXY=socks5://localhost:8000 \
    cloud-sql-proxy &lt;INSTANCE_CONNECTION_NAME&gt;
</code></pre></div>
<p dir="auto">The <code>ALL_PROXY</code> environment variable specifies the proxy for all TCP
traffic to and from a Cloud SQL instance. The <code>ALL_PROXY</code> environment variable
supports <code>socks5</code> and <code>socks5h</code> protocols. To route DNS lookups through a proxy,
use the <code>socks5h</code> protocol.</p>
<p dir="auto">The <code>HTTPS_PROXY</code> (or <code>HTTP_PROXY</code>) specifies the proxy for all HTTP(S) traffic
to the SQL Admin API. Specifying <code>HTTPS_PROXY</code> or <code>HTTP_PROXY</code> is only necessary
when you want to proxy this traffic. Otherwise, it is optional. See
<a href="https://pkg.go.dev/net/http@go1.17.3#ProxyFromEnvironment" rel="nofollow"><code>http.ProxyFromEnvironment</code></a>
for possible values.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Support for Metrics and Tracing</h2><a id="user-content-support-for-metrics-and-tracing" class="anchor" aria-label="Permalink: Support for Metrics and Tracing" href="#support-for-metrics-and-tracing"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy supports <a href="https://cloud.google.com/monitoring" rel="nofollow">Cloud Monitoring</a>, <a href="https://cloud.google.com/trace" rel="nofollow">Cloud Trace</a>, and <a href="https://prometheus.io/" rel="nofollow">Prometheus</a>.</p>
<p dir="auto">Supported metrics include:</p>
<ul dir="auto">
<li><code>cloudsqlconn/dial_latency</code>: The distribution of dialer latencies (ms)</li>
<li><code>cloudsqlconn/open_connections</code>: The current number of open Cloud SQL
connections</li>
<li><code>cloudsqlconn/dial_failure_count</code>: The number of failed dial attempts</li>
<li><code>cloudsqlconn/refresh_success_count</code>: The number of successful certificate
refresh operations</li>
<li><code>cloudsqlconn/refresh_failure_count</code>: The number of failed refresh
operations.</li>
</ul>
<p dir="auto">Supported traces include:</p>
<ul dir="auto">
<li><code>cloud.google.com/go/cloudsqlconn.Dial</code>: The dial operation including
refreshing an ephemeral certificate and connecting the instance</li>
<li><code>cloud.google.com/go/cloudsqlconn/internal.InstanceInfo</code>: The call to retrieve
instance metadata (e.g., database engine type, IP address, etc)</li>
<li><code>cloud.google.com/go/cloudsqlconn/internal.Connect</code>: The connection attempt
using the ephemeral certificate</li>
<li>SQL Admin API client operations</li>
</ul>
<p dir="auto">To enable Cloud Monitoring and Cloud Trace, use the <code>--telemetry-project</code> flag
with the project where you want to view metrics and traces. To configure the
metrics prefix used by Cloud Monitoring, use the <code>--telemetry-prefix</code> flag. When
enabling telemetry, both Cloud Monitoring and Cloud Trace are enabled. To
disable Cloud Monitoring, use <code>--disable-metrics</code>. To disable Cloud Trace, use
<code>--disable-traces</code>.</p>
<p dir="auto">To enable Prometheus, use the <code>--prometheus</code> flag. This will start an HTTP
server on localhost with a <code>/metrics</code> endpoint. The Prometheus namespace may
optionally be set with <code>--prometheus-namespace</code>.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Debug logging</h2><a id="user-content-debug-logging" class="anchor" aria-label="Permalink: Debug logging" href="#debug-logging"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">To enable debug logging to report on internal certificate refresh operations,
use the <code>--debug-logs</code> flag. Typical use of the Proxy should not require debug
logs, but if you are surprised by the Proxy's behavior, debug logging should
provide insight into internal operations and can help when reporting issues.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Localhost Admin Server</h2><a id="user-content-localhost-admin-server" class="anchor" aria-label="Permalink: Localhost Admin Server" href="#localhost-admin-server"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy includes support for an admin server on localhost. By default, the
the admin server is not enabled. To enable the server, pass the --debug or
--quitquitquit flag. This will start the server on localhost at port 9091.
To change the port, use the --admin-port flag.</p>
<p dir="auto">When --debug is set, the admin server enables Go's profiler available at
/debug/pprof/.</p>
<p dir="auto">See the <a href="https://pkg.go.dev/net/http/pprof." rel="nofollow">documentation on pprof</a> for details on how to use the
profiler.</p>
<p dir="auto">When --quitquitquit is set, the admin server adds an endpoint at
/quitquitquit. The admin server exits gracefully when it receives a GET or POST
request at /quitquitquit.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Frequently Asked Questions</h2><a id="user-content-frequently-asked-questions" class="anchor" aria-label="Permalink: Frequently Asked Questions" href="#frequently-asked-questions"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Why would I use the Proxy?</h3><a id="user-content-why-would-i-use-the-proxy" class="anchor" aria-label="Permalink: Why would I use the Proxy?" href="#why-would-i-use-the-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy is a convenient way to control access to your database using IAM
permissions while ensuring a secure connection to your Cloud SQL instance. When
using the Proxy, you do not have to manage database client certificates,
configured Authorized Networks, or ensure clients connect securely. The Proxy
handles all of this for you.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">How should I use the Proxy?</h3><a id="user-content-how-should-i-use-the-proxy" class="anchor" aria-label="Permalink: How should I use the Proxy?" href="#how-should-i-use-the-proxy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy is a gateway to your Cloud SQL instance. Clients connect to the Proxy
over an unencrypted connection and are authorized using the environment's IAM
principal. The Proxy then encrypts the connection to your Cloud SQL instance.</p>
<p dir="auto">Because client connections are not encrypted and authorized using the
environment's IAM principal, we recommend running the Proxy on the same VM or
Kubernetes pod as your application and using the Proxy's default behavior of
allowing connections from only the local network interface. This is the most
secure configuration: unencrypted traffic does not leave the VM, and only
connections from applications on the VM are allowed.</p>
<p dir="auto">Here are some common examples of how to run the Proxy in different environments:</p>
<ul dir="auto">
<li><a href="https://cloud.google.com/sql/docs/mysql/connect-instance-local-computer" rel="nofollow">Connect to Cloud SQL for MySQL from your local computer</a></li>
<li><a href="https://cloud.google.com/sql/docs/mysql/connect-instance-kubernetes" rel="nofollow">Connect to Cloud SQL for MySQL from Google Kubernetes Engine</a></li>
</ul>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Why can't the Proxy connect to my private IP instance?</h3><a id="user-content-why-cant-the-proxy-connect-to-my-private-ip-instance" class="anchor" aria-label="Permalink: Why can't the Proxy connect to my private IP instance?" href="#why-cant-the-proxy-connect-to-my-private-ip-instance"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Proxy does not configure the network between the VM it's running on and the
Cloud SQL instance. You MUST ensure the Proxy can reach your Cloud SQL
instance, either by deploying it in a VPC that has access to your Private IP
instance, or by configuring Public IP.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Should I use the Proxy for large deployments?</h3><a id="user-content-should-i-use-the-proxy-for-large-deployments" class="anchor" aria-label="Permalink: Should I use the Proxy for large deployments?" href="#should-i-use-the-proxy-for-large-deployments"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">We recommend deploying the Proxy on the host machines that are running the
application. However, large deployments may exceed the request quota for the SQL
Admin API . If your Proxy reports request quota errors, we recommend deploying
the Proxy with a connection pooler like <a href="https://www.pgbouncer.org/" rel="nofollow">pgbouncer</a> or <a href="https://www.proxysql.com/" rel="nofollow">ProxySQL</a>. For
details, see <a href="https://github.com/GoogleCloudPlatform/cloudsql-proxy/tree/main/examples/k8s-service">Running the Cloud SQL Proxy as a Service</a>.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Can I share the Proxy across multiple applications?</h3><a id="user-content-can-i-share-the-proxy-across-multiple-applications" class="anchor" aria-label="Permalink: Can I share the Proxy across multiple applications?" href="#can-i-share-the-proxy-across-multiple-applications"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Instead of using a single Proxy across multiple applications, we recommend using
one Proxy instance for every application process. The Proxy uses the context's
IAM principal and so have a 1-to-1 mapping between application and IAM principal
is best. If multiple applications use the same Proxy instance, then it becomes
unclear from an IAM perspective which principal is doing what.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">How do I verify the shasum of a downloaded Proxy binary?</h3><a id="user-content-how-do-i-verify-the-shasum-of-a-downloaded-proxy-binary" class="anchor" aria-label="Permalink: How do I verify the shasum of a downloaded Proxy binary?" href="#how-do-i-verify-the-shasum-of-a-downloaded-proxy-binary"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">After downloading a binary from the releases page, copy the sha256sum value
that corresponds with the binary you chose.</p>
<p dir="auto">Then run this command (make sure to add the asterisk before the file name):</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="echo '&lt;RELEASE_PAGE_SHA_HERE&gt; *&lt;NAME_OF_FILE_HERE&gt;' | shasum -c"><pre><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>&lt;RELEASE_PAGE_SHA_HERE&gt; *&lt;NAME_OF_FILE_HERE&gt;<span class="pl-pds">'</span></span> <span class="pl-k">|</span> shasum -c</pre></div>
<p dir="auto">For example, after downloading the v2.1.0 release of the Linux AMD64 Proxy, you
would run:</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ echo &quot;547b24faf0dfe5e3d16bbc9f751dfa6b34dfd5e83f618f43a2988283de5208f2 *cloud-sql-proxy&quot; | shasum -c
cloud-sql-proxy: OK"><pre>$ <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>547b24faf0dfe5e3d16bbc9f751dfa6b34dfd5e83f618f43a2988283de5208f2 *cloud-sql-proxy<span class="pl-pds">"</span></span> <span class="pl-k">|</span> shasum -c
cloud-sql-proxy: OK</pre></div>
<p dir="auto">If you see <code>OK</code>, the binary is a verified match.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Reference Documentation</h2><a id="user-content-reference-documentation" class="anchor" aria-label="Permalink: Reference Documentation" href="#reference-documentation"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><a href="https://cloud.google.com/sql" rel="nofollow">Cloud SQL</a></li>
<li><a href="https://cloud.google.com/sql/docs/mysql/sql-proxy" rel="nofollow">Cloud SQL Auth Proxy Documentation</a></li>
<li><a href="https://cloud.google.com/sql/docs/mysql/quickstarts" rel="nofollow">Cloud SQL Auth Proxy Quickstarts</a></li>
<li><a href="https://cloud.google.com/sql/docs/mysql/samples" rel="nofollow">Cloud SQL Code Samples</a></li>
<li><a href="https://pkg.go.dev/github.com/GoogleCloudPlatform/cloudsql-proxy" rel="nofollow">Cloud SQL Auth Proxy Package Documentation</a></li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Support policy</h2><a id="user-content-support-policy" class="anchor" aria-label="Permalink: Support policy" href="#support-policy"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Major version lifecycle</h3><a id="user-content-major-version-lifecycle" class="anchor" aria-label="Permalink: Major version lifecycle" href="#major-version-lifecycle"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">This project uses <a href="https://semver.org/" rel="nofollow">semantic versioning</a>, and uses the
following lifecycle regarding support for a major version:</p>
<ul dir="auto">
<li>
<p dir="auto"><strong>Active</strong> - Active versions get all new features and security fixes (that
wouldn’t otherwise introduce a breaking change). New major versions are
guaranteed to be "active" for a minimum of 1 year.</p>
</li>
<li>
<p dir="auto"><strong>Maintenance</strong> - Maintenance versions continue to receive security and critical
bug fixes, but do not receive new features.</p>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Release cadence</h3><a id="user-content-release-cadence" class="anchor" aria-label="Permalink: Release cadence" href="#release-cadence"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The Cloud SQL Auth Proxy aims for a minimum monthly release cadence. If no new
features or fixes have been added, a new PATCH version with the latest
dependencies is released.</p>
<p dir="auto">We support releases for 1 year from the release date.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Contributing</h2><a id="user-content-contributing" class="anchor" aria-label="Permalink: Contributing" href="#contributing"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Contributions are welcome. Please, see the <a href="/GoogleCloudPlatform/cloud-sql-proxy/blob/main/CONTRIBUTING.md">CONTRIBUTING</a> document
for details.</p>
<p dir="auto">Please note that this project is released with a Contributor Code of Conduct.
By participating in this project you agree to abide by its terms. See
<a href="/GoogleCloudPlatform/cloud-sql-proxy/blob/main/CODE_OF_CONDUCT.md">Contributor Code of Conduct</a> for more information.</p>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

