Tabs in Godot 4: it is TabBar now

By Eduardo Orellana · Updated

Tabs is called TabBar in Godot 4; TabContainer, which shows one child per tab, is unchanged. In a Godot 4 project, Tabs.new() fails to parse with Identifier "Tabs" not declared in the current scope. Did you mean to use "TabBar"?.

AppImage, x86_64. Ubuntu 22.04, Debian 12, Fedora 39 or newer.

Intel or AMD Chromebook, with Linux turned on.

Download for macOSDownload for Windows

What Godot is checking

GDScript resolves every name when the script loads. Tabs is not a class in Godot 4, so the analyzer stops before anything runs, and because the name is in Godot's own table of Godot 3 renames, the message names the replacement.

The converter carries Tabs to TabBar. add_tab() adds a tab, current_tab selects one, and tab_changed fires when the player picks another. Use TabContainer when each tab should show its own panel.

Reproduce it

A Godot 3 script that creates a Tabs in code, in a Godot 4 project.

extends Node

func _ready():
	var tabs = Tabs.new()
	print(tabs)

What Godot 4.7.2 prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

SCRIPT ERROR: Parse Error: Identifier "Tabs" not declared in the current scope. Did you mean to use "TabBar"?
   at: GDScript::reload (res://answers/tabs-in-godot-4/repro.gd:4)
ERROR: Failed to load script "res://answers/tabs-in-godot-4/repro.gd" with error "Parse error".
   at: load (modules/gdscript/gdscript_resource_format.cpp:46)

Fix it

A TabBar with three tabs, switched to the second.

extends Control

func _ready() -> void:
	var tabs := TabBar.new()
	for title in ["Video", "Audio", "Controls"]:
		tabs.add_tab(title)
	add_child(tabs)
	tabs.tab_changed.connect(func(i): print("tab ", tabs.get_tab_title(i)))
	tabs.current_tab = 1
	print(tabs.get_class(), " tabs: ", tabs.tab_count)

What the fixed script prints

Godot Engine v4.7.2.stable.mono.official.ed1daf0bf - https://godotengine.org

tab Audio
TabBar tabs: 3

Verified on Godot 4.7.2

Both scripts on this page were run headless on Godot 4.7.2 (4.7.2.stable.mono.official.ed1daf0bf) on 18 October 2026, and the output above is what Godot printed, unedited.

Where the check lives in Godot's source: [gdscript_analyzer.cpp line 4687, the message with its hint](https://github.com/godotengine/godot/blob/4.7.2-stable/modules/gdscript/gdscript_analyzer.cpp#L4687), [renames_map_3_to_4.cpp line 1469, Tabs to TabBar](https://github.com/godotengine/godot/blob/4.7.2-stable/editor/project_upgrade/renames_map_3_to_4.cpp#L1469), [TabBar class reference](https://github.com/godotengine/godot/blob/4.7.2-stable/doc/classes/TabBar.xml).

Questions

Should I use TabBar or TabContainer?
TabContainer for a settings screen whose tabs each show a panel; TabBar when you only need the row of tabs.
How do I rename a tab?
set_tab_title(index, title).