# GNOME Builder 43.2

I'm trying harder to get minor releases out to users this cycle so that
papercuts are resolved quickly with the GTK 4 port. This release continues
on that effort.

 * Use preferred $SHELL for $PATH discovery on host to ensure we pick up
   various $PATH modificiations.
 * Disable support for Fish when crossing container boundaries, it caused
   too many runtime compat issues. A default shell fallback will be used.
 * The meson plugin gained support for extracting run commands for executables
   installed to $prefix/bin.
 * Remove <> from insert-matching-braces.
 * gdbwire amalgamation updated for bugfixes.
 * Silence stderr when using gdb to avoid merging of stderr/stdout. This fixes
   various issues with using GDB across containers.
 * Various workspace UI fixes.
 * Path resolution fixes when resolving paths across container boundaries.
 * Build flag extraction fixes, particularly around -isystem use and C++
   build flags with libclang.
 * Fixes for display of C/C++ parameters in code completion.
 * Fixes to spellcheck invalidation.
 * Performance fixes for repeated lookups of programs in runtime paths.
 * GTK 4 project template improvements.
 * Translation updates

Thanks to everyone who filed bugs!


# GNOME Builder 43.1

Thanks to all of the prompt testing by users, we have a new release with
may bug fixes for you this week.

 * Raise debug panel when debug session begins.
 * Fix how file-descriptors are passed through flatpak-spawn to the host>
 * Improve Meson run command provider to support CLI applications.
 * Fix support for using deviced to run Flatpak application on remote device.
 * Fix icon for LSP search results in global search.
 * Use -Wno-unused-function for headers for Clang diagnostics to avoid
   reporting errors for static inlines. This removes a workaround from
   previous releases of Builder which causes errors with some C++ code.
 * Fix style-preview height in preferences window.
 * Fix TTY integration with podman containers so color terminals work
   with the build panel.
 * Include a backend-specific error message when version control cloning
   files in the greeter workspace.
 * Fix invalid property value in URL bar for webkit pages.
 * Port meson and cargo plugins to use run commands. This fixes an issue
   where run contexts don't know they need TTY support until too late.
   This affected podman usage.
 * Port git plugin to use run commands for submodule initialization. This
   also helps ensure we have TTY access.
 * Fix "hold" counts on document buffers so they cannot be reclaimed
   immediately after loading of the buffer completes.
 * When renaming files in the project-tree, the old file will be closed
   and the new file re-opened in it's place. Previously we only closed
   the file and did not re-open.
 * gnome-builder-git daemon gained some optimizations and improvements
   around monitoring .git indexes.
 * Git file changes are now properly reloaded after commits are detected
   to the underlying index.
 * Life-cycle tracking of highlighter/completion providers for Ctags has
   been improved.
 * The empty-state for page frames has been updated to fit better with
   adwaita styling.
 * Layered settings for syntax languages has been fixed.
 * Translation updates


# GNOME Builder 43.0

After about 6 months of development, GNOME Builder 43.0 is here!

This is the truly the largest release of Builder yet, with nearly every
aspect of the application improved in some way or another this cycle.

## Modern and Expressive Theming

The most noticeable change, of course, is the port to GTK 4. Builder now uses
WebKit, VTE, libadwaita, libpanel, GtkSourceView, and many other libraries
recently updated to support GTK 4.

Like we did for GNOME Text Editor, Builder will restyle the application window
based on the syntax highlighting scheme. In practice this feels much less
jarring as you use the application for hours.

## The Foundry

Behind the scenes, the "Foundry" behind Builder has been completely revamped
to make better use of SDKs and runtimes. This gives precise control over how
processes are created and run. Such control is important when doing
development inside container technologies.

Users can now define custom "Commands" which are used to run your project
and can be mapped to keyboard shortcuts. This allows for the use of Builder
in situations where it traditionally fell short. For example, you can open
a project without a build system and use commands to emulate a build system.

Furthermore, those commands can be used to run your application and
integrate with tooling such as the GNU debugger, Valgrind, Sysprof, and
more. Controlling how the debugger was spawned has been a long requested
feature by users.

## Unit Testing

In previous version of Builder, plugins were responsible for how Unit Tests
were run. Now, they also use Run Commands which allows users to run their
Unit Tests with the debugger or other tooling.

## Keyboard Shortcuts

Keyboard shortcuts were always a sore spot in GTK 3. With the move to GTK 4
we redesigned the whole system to give incredible control to users and
plugin authors. Similar to VS Code, Builder has gained support for a
format similar to "keybindings.json" which allows for embedding GObject
Introspection API scripting. The syntax matches the template engine in
Builder which can also call into GObject Introspection.

## Command Bar and Project Search

We've unified the Command Bar and Project Search into one feature. Use
Ctrl+Enter to display the new Global Search popover.

We do expect this feature to be improved and expanded upon in upcoming releases
as some features necessary are still to land within a future GTK release.

## Movable Panels and Sessions

Panels can be dragged around the workspace window and placed according
to user desire. The panel position will persist across future openings
of the project.

Additionally, Builder will try to save the state of various pages including
editors, terminals, web browsers, directory listings, and more. When you re-open
your project with Builder, you can expect to get back reasonably close to where
you left off.

Closing the primary workspace will now close the project. That means that
the state of secondary workspaces (such as those created for an additional
monitor) will be automatically saved and restored the next time the project
is launched.

## GtkSourceView

Core editing features have been polished considerably as part of my
upstream work on maintaining GtkSourceView. Completion feels as smooth
as ever. Interactive tooltips are polished and working nicely. Snippets too
have been refined and performance improved greatly.

Not all of our semantic auto-indenters have been ported to GtkSourceIndenter,
but we expect them (and more) to come back in time.

There is more work to be done here, paricularly around hover providers
and what can be placed in hover popovers with expectation that it will
not break input/grabs.

## Redesigned Preferences

Preferences have been completely redesigned and integrated throughout
Builder. Many settings can be tweaked at either the application-level as
a default, or on a per-project basis. See "Configure Project" in the new
"Build Menu" to see some of those settings. Many new settings were added
to allow for more expressive control and others improved open.

Use Ctrl+, to open application preferences, and Alt+, to open your project's
preferences and configurations.

## Document Navigation

Since the early versions of Builder, users have requested tabs to
navigate documents. Now that we're on GTK 4 supporting that in a
maintainable fashion is trivial and so you can choose between tabs or the
legacy "drop down" selector. Navigation tabs are enabled by default.

Some of the UI elements that were previously embedded in the document
frame can be found in the new workspace statusbar on the bottom right.
Additionally, controls for toggling indentation, syntax, and encoding
have been added.

Switching between similar files is easy with Ctrl+Shift+O. You'll be
displayed a popover with similarly named files to the open document.

The symbol tree is also still available, but moved to the statusbar.
Ctrl+Shift+K will bring it up and allow for quick searching.

## WebKit

A new web browser plugin was added allowing you to create new browser
tabs using Ctrl+Shift+B. It is minimal in features but can be useful
for quick viewing of information or documentation.

Additionally, the html-preview, markdown-preview, and sphinx-preview plugins
have been rewritten to build upon this WebKit integration.

## Plugin Removals

Some features have been removed from Builder due to the complexity and
time necessary for a proper redesign or port. The Glade plugin (which
targets GTK 3 only) has been removed for obvious reasons. A new designer
will replace it and is expected as part of GNOME 44.

Devhelp has also been removed but may return after it moves to supporting
GTK 4. Additionally, other tooling may supersede this plugin in time.

The code beautifier and color-picker were also removed and will likely
return in a different form in future releases. However, language servers
providing format capabilities can be enabled in preferences to format-on-save.

## Project Templates

Project templates have been simplified and improved for GTK 4 along with
a new look and feel for creating them. You'll see the new project template
workflow from the application greeter by clicking on "Create New Project".

## Top Matches

Heavy users of code completion will notice a new completion result which
contains a large star (★) next to it. This indicates that the proposal is a
very close match for the typed text and is getting resorted to the top of
the completion results. This serves as an alternative to sorting among
completion providers which is problematic due to lack of common scoring
algorithms across different data sources. 

## Sysprof Integration

Tooling such as Sysprof went through a lot of revamp too. As part of this
process I had to port Sysprof to GTK 4. Additionally, I created new tooling
in the form of `sysprof-agent` which allows us to have more control when
profiling across container boundaries. Tools which need to inject LD_PRELOAD
(such as memory profilers) now work when combined with an appropriate SDK.

## Language Servers

Language servers have become a part of nearly everyone's development
toolbox at this point. Builder is no different. We've added support for a
number of new language servers including jdtls (Java), bash-language-server
(Bash), gopls (Golang) and improved many others such as clangd (C/C++),
jedi-language-server (Python), ts-language-server (JavaScript/Typescript),
vls (Vala), rust-analyzer (Rust), blueprint, and intelephense (PHP).

Many language servers are easier to install and run given the new design
for how cross-container processes are spawned.

## Quick Settings

From the Run Menu, many new quick settings are available to tweak how the
application runs as well as well as configure tooling.

For example, you can now toggle various Valgrind options from the Leak Detector
sub-menu. Sysprof integration also follows suit here by allowing you to toggle
what instruments will be used when recording system state.

To make it easier for developers to ensure their software is inclusive, we've
added options to toggle High Contrast themes, LTR vs RTL, and light vs dark
styling.

## Vim Emulation

In GTK 3, we were very much stuck with deep hacks to make something that looked
like Vim work. Primarily because we wanted to share as much of the movements
API with other keybinding systems.

That changed with GtkSourceView 5. Part of my upstream maintainer work on
GtkSourceView included writing a new Vim emulator. It's not perfect, by any
means, but it does cover a majority of what I've used in more than two decades
as a heavy Vim user. It handles registers, marks, and tries to follow some
of the same pasteboard semantics as Vim ("+y for system clipboard, for example).

I made this available in GNOME Text Editor for GNOME 42 as well. Those that
wonder why we didn't an external engines to synchronize with, can read the
code to find out.

## Plugins

We have been struggling with our use of PyGObject for sometime. It's a
complex and difficult integration project and I felt like I spent more time
debugging issues than I was comfortable with. So this port also included a
rewrite of every Python-based plugin to C. We still enable the Python 3
plugin loader from libpeas (for third-party plugins), but in the future we
may switch to another plugin language.

## Maintainers Corner

So...

A special thanks to all those that sent me merge requests, modernized bits
of software I maintain, fixed bugs, or sent words of encouragement.

I'm very proud of where we've gotten. However, it's been an immense amount of
work. Builder could be so much more than it is today with your help with triage
of bugs, designing and writing features, project and product management, writing
documentation, maintaining plugins, improving GNOME OS, and everything
in-between.

The biggest lesson of this cycle is how a strong design language is
transformative. I hope Builder's transformation serves as an example for
other GNOME applications and the ecosystem at large. We can make big leaps
in short time if we have the right tooling and vision.

-- Christian Hergert
