call_end

    • chevron_right

      Flathub Blog: Vorarbeiter is here

      news.movim.eu / PlanetGnome • 2 May • 2 minutes

    We have replaced Buildbot with a custom service, and we hope you haven't noticed.

    Vorarbeiter is a German word for "foreman" and a living proof of my school-related trauma. The new service is a middleman between GitHub and GitHub Actions. It has been happily humming since April 21st, and largely does what Buildbot did: builds apps, with a sprinkle of publishing logic.

    While what happens under the hood is solid, there is no UI yet. Flathub bot will still inform developers about build status for their pull requests, but there is little visibility of what happens post-merge.

    Additionally, Vorarbeiter no longer allows to manually publish, cancel or delete builds. The publishing happens every hour regardless of the age of the build. The previous 3-hour-long delay was too conservative, and barely anyone was giving a final test for a post-merge builds. Similarly, cancelling builds doesn't seem as necessary as before. GitHub Actions runners are ephemeral and new commits on the same branch or pull request will automatically cancel the previous in-progress build.

    Last but not least, because of limitations of the free GitHub Actions runners, some apps are designated as large builds . Large builds take place on machines provisioned in AWS, boasting faster CPUs and larger disks to accommodate heavier requirements.

    While large builds do not incur costs per se thanks to the generous AWS credits for open source projects program , we still want to be mindful of how much credits we are spending, which is why we don't run large runners all the time. This is possible thanks to RunsOn , which handles all the magic for us. It receives pipeline events from GitHub and provisions new machines automatically within seconds, and tears them down the moment the build if finished. This is completely invisible to developers, but is both faster and more cost-effective, even if we were to pay the bill ourselves.

    There is still more work to be done. I want to improve observability of the new service to make sure we can have automatic alerts when we have abnormal build error rate or unprocessed publishing queue. In fact, we already notify maintainers and Flathub admins when a build triggered on the master branch failed, but there is potential to be more proactive here.

    The unsolved challenge so far is caching. Every new pipeline re-downloads Flatpak runtimes, SDKs, and source code needed to build the app. Ideally, we should cache at least the runtimes, but with runners being ephemeral, we should also attempt to implement a distributed solution for ccache to reduce build times.

    Given the challenging circumstances , this is more than good enough, though! If you encounter any issues with the new workflow, don't hesitate to open an issue in the project's GitHub repository.

    • wifi_tethering open_in_new

      This post is public

      docs.flathub.org /blog/vorarbeiter-is-here

    • chevron_right

      Michael Meeks: 2025-04-30 Wednesday

      news.movim.eu / PlanetGnome • 30 April

    • Pleased to see 25.04 looking good, my blockers fixed at least. Fixed slide threading issue.
    • Published the next TORF strip: "My friends see me as something of a visionary"
    • Glad to see CODE 25.04 released - a great foundation for our next year of development. Based of course on the latest stable LibreOffice 25.02. Lots of encouraging new fixes, features and interactivity wins there: great work team & community - many thanks to all who have contributed.
    • wifi_tethering open_in_new

      This post is public

      meeksfamily.uk /~michael/blog/2025-04-30.html

    • chevron_right

      Gedit Technology blog: No more Pythons in gedit

      news.movim.eu / PlanetGnome • 30 April • 4 minutes

    The first *.py file in the gedit repository was added in 2005, 20 years ago. Since then, it seems that it has always been possible to write gedit plugins in Python. Well, this is no more.

    It deserves some explanation.

    Reducing the number of programming languages to deal with

    A multi-language project is much harder to manage. Now gedit only uses C and a little of Objective-C for the macOS support. The libgedit-* are entirely written in C.

    There was a Vala plugin (Find in Files) but has been removed in 2022 (unfortunately there is no replacement). The commit message already mentions the difficulty of working with multiple languages. So the problem is not new.

    Other reasons

    Making it easier to package gedit on Windows, avoiding the need to bundle a whole Python interpreter with the app. This also makes the package smaller and the app launches more quickly (better performances).

    There are also some inherent difficulties to maintain large Python codebases in the long run. gedit plugins are not specifically large, but still, the difficulties were present. (If Python is your thing, you may have a different experience and opinion. That's fine, there needs to be something for everybody).

    So over the recent years a few plugins have been rewritten from Python to C already. With the final goal of phasing out the Python support. This was a slow process, until ...

    Some PyGObject and GIRepository updates later

    GNOME 48 released in March comes with an update that basically makes all Python plugins unusable in gedit. It's more related to the code dealing with the loading of plugins, not the plugins themselves.

    More precisely, the latest version of PyGObject made the Python 3 loader of libpeas1 unusable (libpeas provides the plugin engine for gedit and other apps). libpeas1 and gedit depend on GIRepository-2.0 while the latest version of PyGObject has upgraded to GIRepository-3.0. It is not possible to use both GIRepository-2.0 and 3.0 at the same time in the same process. ( Link to the issue ).

    It's like weeds growing. If you do nothing, weeds grow and regression bugs happen. Note that it doesn't mean that nothing is done in gedit, there is still development done. But the GTK and GNOME platform apparently moves faster.

    gedit is no longer developed and maintained by a team of 5-6 dedicated hackers. So the project is no longer able to lead the peloton, but the application is still there and remains useful for many people! We (or - mainly - I) don't have the human resources to keep up with everything and be ahead of all the things to do. Hence ...

    Reducing/changing the scope of gedit

    gedit has for many years been between two things. (1) A great and easy-to-learn tool for beginners. And (2) some powerful plugins are or were available, so the text editor is also suitable for more advanced users, also in a professional context.

    So the scope of gedit is a bit unclear. What is clear is that we want from gedit something more than just writing quick notes. So something more than a simple notepad. But not as powerful and complete as Visual Studio Code (for instance, but you can pick your favorite IDE here, or Vim, Emacs).

    What is also clear for the path forward is a desire to well support markup languages like HTML, Markdown, etc. To support them even better than now, by adding some useful features for such languages.

    So in the context of the plugins removal, it means that some of them will not be re-implemented in C (or Rust or whatever). The set of features available through plugins will thus change. At least for the official plugins that are shipped with the gedit and gedit-plugins packages.

    Did I mention Rust?

    Even though there is a desire to deal with less programming languages, ideally having a single-language project, there is Rust .

    Rust might be the exception. Maybe (without doing any promises), third-party plugins can choose Rust instead of C. That would make for a better experience. Then, maybe, a Rust third-party plugin will eventually find its course into gedit proper.

    The impact for users

    This commit is the place to go to have the list of plugins that were implemented in Python and have been removed.

    But for the moment the Flatpak of gedit is mostly unaffected, because it can use the previous version of PyGObject while using the latest GNOME runtime.

    gedit on the Microsoft Store is also unaffected.

    One day however, the updates of gedit and gedit-plugins will roll out. Versions >= 48.2 are already affected. The idea is to re-implement in C a few plugins so that the change is not too disruptive for Flatpak and Windows users.

    As a conclusion, let's see what the future of gedit has in stock! Be it attracting Rust developers, or being a tool of choice for certain uses, remaining humble at its task of being an easy-to-learn and general-purpose text editor.

    This article was written by Sébastien Wilmet, currently the main developer behind gedit.

    • wifi_tethering open_in_new

      This post is public

      gedit-text-editor.org /blog/2025-04-30-no-more-pythons-in-gedit.html

    • chevron_right

      Michael Catanzaro: WebKitGTK API Versions Demystified

      news.movim.eu / PlanetGnome • 28 April • 2 minutes

    WebKitGTK has a bunch of different confusing API versions. Here are the three API versions that are currently supported by upstream:

    • webkitgtk-6.0: This is WebKitGTK for GTK 4 (and libsoup 3), introduced in WebKitGTK 2.40. This is what’s built by default if you build WebKit with -DPORT=GTK .
    • webkit2gtk-4.1: This is WebKitGTK for GTK 3 and libsoup 3, introduced in WebKitGTK 2.32. Get this by building with -DPORT=GTK -DUSE_GTK3=ON .
    • webkit2gtk-4.0: This is WebKitGTK for GTK 3 and libsoup 2, introduced in WebKitGTK 2.6. Get this by building with -DPORT=GTK -DUSE_GTK3=ON -DUSE_SOUP2=ON .

    webkitgtk-6.0 contains a bunch of API changes, and all deprecated APIs were removed. If you’re upgrading to webkitgtk-6.0, then you’re also upgrading your application from GTK 3 to GTK 4, and have to adapt to much bigger GTK API changes anyway, so this seemed like a good opportunity to break compatibility and fix old mistakes for the first time in a very long time.

    webkit2gtk-4.1 is exactly the same as webkit2gtk-4.0, except for the libsoup API version that it links against.

    webkit2gtk-4.0 is — remarkably — mostly API stable since it was released in September 2014. Some particular C APIs have been deprecated and don’t work properly anymore, but no stable C APIs have been removed during this time, and library ABI is maintained. (Caveat: WebKitGTK used to have unstable DOM APIs, some of which were removed before the DOM API was eventually stabilized. Nowadays, the DOM APIs are all stable but deprecated in webkit2gtk-4.1 and webkit2gtk-4.0, and removed in webkitgtk-6.0.)

    If you are interested in history, here are the older API versions that do not matter anymore:

    • webkit2gtk-5.0: This was an unstable API version used during development of the GTK 4 API, intended for WebKit developers rather than application developers. It was obsoleted by webkitgtk-6.0.
    • webkit2gtk-3.0: original API version of WebKitGTK for GTK 3 and libsoup 2, obsoleted by webkit2gtk-4.0. This was the original “WebKit 2” API version, which was only used by a few applications before it was removed one decade ago ( history ).
    • webkitgtk-3.0: note the missing “2”, this is “WebKit 1” (predating the modern multiprocess architecture) for GTK 3. This API version was widely-used on Linux, and its removal one decade ago precipitated a security crisis which I called The Great API Break. (This crisis was worth it. Modern WebKit’s multiprocess architecture is far more secure than the old single-process architecture.)
    • webkitgtk-1.0: the original WebKitGTK API version, this is “WebKit 1” for GTK 2. This API version was also widely-used on Linux before it was removed in The Great API Break.

    Fedora and RHEL users, are you confused by all the different confusing downstream package names? Here is your map:

    • webkitgtk6.0, webkit2gtk4.1, and webkit2gtk4.0: This is the current binary package naming in Fedora, corresponding precisely to the WebKitGTK API version to reduce confusion.
    • webkit2gtk3: old name for webkit2gtk4.0, still used in RHEL 9 and RHEL 8
    • webkitgtk4: even older name for webkit2gtk4.0, still used in RHEL 7
    • webkitgtk3: this is the webkitgtk-3.0 API version, still used in RHEL 7
    • webkitgtk: this is webkitgtk-1.0, used in RHEL 6

    Notably, webkit2gtk4.0, webkit2gtk3, and webkitgtk4 are all the same thing.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /mcatanzaro/2025/04/28/webkitgtk-api-versions/

    • chevron_right

      Michael Catanzaro: WebKitGTK API Versions Demystified

      news.movim.eu / PlanetGnome • 28 April • 2 minutes

    WebKitGTK has a bunch of different confusing API versions. Here are the three API versions that are currently supported by upstream:

    • webkitgtk-6.0: This is WebKitGTK for GTK 4 (and libsoup 3), introduced in WebKitGTK 2.40. This is what’s built by default if you build WebKit with -DPORT=GTK .
    • webkit2gtk-4.1: This is WebKitGTK for GTK 3 and libsoup 3, introduced in WebKitGTK 2.32. Get this by building with -DPORT=GTK -DUSE_GTK3=ON .
    • webkit2gtk-4.0: This is WebKitGTK for GTK 3 and libsoup 2, introduced in WebKitGTK 2.6. Get this by building with -DPORT=GTK -DUSE_GTK3=ON -DUSE_SOUP2=ON .

    webkitgtk-6.0 contains a bunch of API changes, and all deprecated APIs were removed. If you’re upgrading to webkitgtk-6.0, then you’re also upgrading your application from GTK 3 to GTK 4, and have to adapt to much bigger GTK API changes anyway, so this seemed like a good opportunity to break compatibility and fix old mistakes for the first time in a very long time.

    webkit2gtk-4.1 is exactly the same as webkit2gtk-4.0, except for the libsoup API version that it links against.

    webkit2gtk-4.0 is — remarkably — mostly API stable since it was released in September 2014. Some particular C APIs have been deprecated and don’t work properly anymore, but no stable C APIs have been removed during this time, and library ABI is maintained. (Caveat: WebKitGTK used to have unstable DOM APIs, some of which were removed before the DOM API was eventually stabilized. Nowadays, the DOM APIs are all stable but deprecated in webkit2gtk-4.1 and webkit2gtk-4.0, and removed in webkitgtk-6.0.)

    If you are interested in history, here are the older API versions that do not matter anymore:

    • webkit2gtk-5.0: This was an unstable API version used during development of the GTK 4 API, intended for WebKit developers rather than application developers. It was obsoleted by webkitgtk-6.0 in WebKitGTK 2.40.
    • webkit2gtk-3.0: original API version of WebKitGTK for GTK 3 and libsoup 2, obsoleted by webkit2gtk-4.0. This was the original “WebKit 2” API version, which was only used by a few applications before it was removed one decade ago ( history ).
    • webkitgtk-3.0: note the missing “2”, this is “WebKit 1” (predating the modern multiprocess architecture) for GTK 3. This API version was widely-used on Linux, and its removal one decade ago precipitated a security crisis which I called The Great API Break. (This crisis was worth it. Modern WebKit’s multiprocess architecture is far more secure than the old single-process architecture.)
    • webkitgtk-1.0: the original WebKitGTK API version, this is “WebKit 1” for GTK 2. This API version was also widely-used on Linux before it was removed in The Great API Break.

    Fedora and RHEL users, are you confused by all the different confusing downstream package names? Here is your map:

    • webkitgtk6.0, webkit2gtk4.1, and webkit2gtk4.0: This is the current binary package naming in Fedora, corresponding precisely to the WebKitGTK API version to reduce confusion.
    • webkit2gtk3: old name for webkit2gtk4.0, still used in RHEL 9 and RHEL 8
    • webkitgtk4: even older name for webkit2gtk4.0, still used in RHEL 7
    • webkitgtk3: this is the webkit2gtk-3.0 API version, still used in RHEL 7
    • webkitgtk: this is webkitgtk-1.0, used in RHEL 6

    Notably, webkit2gtk4.0, webkit2gtk3, and webkitgtk4 are all the same thing.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /mcatanzaro/2025/04/28/webkitgtk-api-versions/

    • chevron_right

      Sid Tosh: MacStadium sponsors GNOME macOS CI infrastructure

      news.movim.eu / PlanetGnome • 27 April • 3 minutes

    Introduction:

    GNOME GitLab now uses macOS runners from MacStadium for managing our macOS CI pipeline. This offers significant improvements in supporting the GNOME platform on macOS. In this blog, we’ll cover the event timeline of macOS CI in GNOME GitLab and the technical details of the new infrastructure setup from MacStadium.

    Background:

    Around mid 2023, the GNOME Infrastructure Team decided to retire the existing macOS CI runners for a handful of reasons as explained in this post by Emmanuele Bassi. They were x86_64 runners which were quite outdated technically, as they were replaced by better and faster Apple Silicon M series ARM SoCs (specifically Apple M1) from Nov 2020.

    There was no macOS CI in GNOME GitLab since then. GNOME core projects like GTK, GLib and few apps still provided macOS support on a best effort basis: meaning development and testing would be done on user machines. Though this is far from perfect, this provided some basic macOS support for GNOME projects.

    Infrastructure help from René:

    René de Hesselle is a member of Inkscape’s Project Leadership Committee and an open source developer who specializes in building, packaging and porting applications to the macOS platform. Looking into the macOS CI issues GNOME projects were facing, René offered to help with the macOS effort in GNOME, which was greatly appreciated by GNOME developers.

    René has been assisting core libraries like GLib, GTK and GNOME apps to build in macOS. To address the macOS CI limitation, René went a step further and provided a self hosted GitLab macOS CI runner. With assistance from the GNOME Infrastructure Team, the self hosted runner was made available to projects across GNOME. This proved to be really useful, as it increased the pace of development in macOS.

    Scalability and Sustainability Issues:

    Over time, as more projects switched to using the self hosted macOS CI runner, it was becoming evident that this solution would not be effective for the scale of GNOME and not sustainable in the long term. René opened this topic for discussion in this post .

    It was quite evident that we needed an enterprise solution to offer scalable and sustainable macOS CI service. This is when MacStadium’s FOSS program was highlighted as a possible solution in GNOME Discourse.

    MacStadium, FOSS and GNOME:

    MacStadium is well known in the open source world for sponsoring developers of open source projects for the Apple platform, including macOS, iOS, tvOS, and watchOS.

    The GNOME Team got in touch with MacStadium for sponsoring macOS CI runners under their FOSS program. Though the MacStadium FOSS program was not available as it was already at capacity, MacStadium was excited in partnering with GNOME. Special thanks to Lauren Cabana (Director, Marketing) from MacStadium for actively pursuing this effort and making this collaboration possible.

    MacStadium Orka Cluster solution:

    As part of this collaboration, MacStadium has offered the following infrastructure setup based on our requirements:

    • Orka ( Or chestration with K ubernetes on A pple) Cluster.
    • Dedicated network with firewall and VPN.
    • 1 TB NAS storage.
    • 2 x Mac mini (M1, 8-core CPU, 10-core GPU, 16GB RAM, 1TB SSD).

    This is a significant bump in hardware specs compared to the current solution, allowing us to run more builds simultaneously. But the biggest benefit is having access to a turnkey solution that provides ephemeral machines: build isolation is no longer a concern and restrictions on customizability can be lifted, making it possible to open macOS CI instance-wide on GNOME GitLab with minimal administrative oversight. This setup is located in MacStadium’s Dublin data center .

    Thanks to MacStadium for sponsoring this infrastructure upgrade!

    Thanks and Mentions:

    • Richard Littauer – for interfacing with MacStadium via calls / emails and active participation.
    • René de Hesselle – for actively taking part in all technical discussions.
    • Philip Withnall – for coordinating efforts within GNOME.
    • Bartłomiej Piotrowski – for setting up GNOME / MacStadium accounts.
    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /sid/2025/04/27/macstadium-sponsors-gnome-macos-ci-infrastructure/

    • chevron_right

      Christian Hergert: Using Foundry to Build/Run

      news.movim.eu / PlanetGnome • 26 April • 3 minutes

    I know that I will never convince everyone to use Builder for development. Even I have a hard time getting myself out of the terminal at times.

    Foundry comes in two forms, an executable and a library. The executable is just a bunch of commands and libfoundry is meant for building your own IDE (like Builder) or specialized tooling.

    # initialize .foundry directory if never done before
    cd my-project/
    foundry init
    

    If you go into most GNOME applications, they likely have a Flatpak manifest. Builder uses this to auto-discover a lot about a project. Foundry is no different.

    # Build the project, just like Builder would do
    foundry build
    

    You can run this from any directory in your project as it will scan upwards to locate the .foundry/ directory that contains project state. It will also do incremental building just like Builder does.

    # Run the project, just like Builder would do
    foundry run
    
    # Run a specific command in place of the default program.
    # Useful to test something with "runtime" instead of
    # build environment.
    foundry run -- gtk4-demo
    

    Running the project will setup the necessary incremental flatpak pipelines and auxiliary tooling like an a11y bus, font integration, and what not. Your application will be run in the Flatpak build container based on the finish-args .

    This does require building the application to ensure the runtime environment is setup correctly.

    # Pull updated project dependencies.
    foundry dependencies update
    

    Updating your deps is pretty painless. This is not done automatically unless the dependency is missing so that we don’t have to constantly hammer remote servers on every build request.

    # Run a shell in the build pipeline, launches in builddir
    foundry devenv
    
    # Run a specific command in build pipeline
    foundry devenv -- ps aux
    

    You can get a terminal shell in the build pipeline (much like ctrl+alt+shift+t in Builder.

    # Lots of commands to inspect the build pipeline
    foundry pipeline info
    
    # Alias to foundry build
    foundry pipeline build
    
    # Invalidate all pipeline stages
    foundry pipeline invalidate
    
    # Purge (remove build files/artifacts/etc) to force
    # a clean build
    foundry pipeline purge
    
    # clean, configure, export, rebuild, which, install
    # all provide additional pipeline operations
    

    You can interact with the active build pipeline using the above commands.

    Sometimes you might want to know what compiler flags will get used with tooling on a specific file. That is made available via the pipeline as well.

    foundry pipeline flags path/to/file.c
    

    Maybe you need a language server for integrating with another editor. That is pretty easy to do for the supported languages by using the lsp command.

    $ foundry lsp list 
    Name                  Languages
    zls                   'zig'                                   
    vhdl-language-server  'vhdl'                                  
    vala-language-server  'vala' 'genie'                          
    ts-language-server    'js' 'jsx' 'typescript' 'typescript-jsx'
    sourcekit-lsp         'swift'                                 
    serve-d               'd'                                     
    rust-analyzer         'rust'                                  
    ruff                  'python3' 'python'                      
    pylsp                 'python3' 'python'                      
    mesonlsp              'meson'                                 
    lua-language-server   'lua'                                   
    jedi-language-server  'python'                                
    jdtls                 'java'                                  
    intelephense          'php'                                   
    gopls                 'go'                                    
    glsl-language-server  'glsl'                                  
    elixir-ls             'elixir'                                
    clangd                'c' 'cpp' 'chdr' 'cpphdr' 'objc'        
    blueprint             'blueprint'                             
    bash-language-server  'sh'                                    
    
    # use stdin/stdout to communicate with an LSP for python3
    $ foundry lsp run python3
    

    If you have multiple project configurations, you can look through them and select the active one. Just switch configs and run, Foundry will do the rest.

    foundry config list
    ...
    foundry config switch flatpak:app.devsuite.Manuals.Devel.json
    foundry run
    

    Want to get a .flatpak you can copy to another system to test?

    foundry export
    ...
    Artifacts:
      file:///.../apps.devsuite.Manuals.Devel.flatpak
    

    You can switch devices in case you have deviced running somewhere like a phone or tablet. Then running should deploy to that system and run it there.

    foundry device list 
    ...
    foundry device switch some_device
    foundry run
    

    You can get the URI to documentation which could allow you to integrate with other editors. Like many commands, you can use --format=json to get the output in an easy-to-parse format for editor plugins.

    # list available doc bundles to install
    foundry doc bundle list
    ...
    
    # install docs for GNOME 48
    foundry doc bundle install flatpak/org.gnome.Sdk.Docs/48/user
    
    # Find GtkWidget documentation
    foundry doc query --format=json GtkWidget
    

    Many settings can be tweaked using foundry settings set ... . Just tab-complete around to explore.

    Anyway, hopefully that serves as a quick intro into some of the things you can do with Foundry already as it progresses towards being a fully-fledged replacement for Builder’s internals.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /chergert/2025/04/26/using-foundry-to-build-run/

    • chevron_right

      Christian Hergert: Using Foundry to Build/Run

      news.movim.eu / PlanetGnome • 26 April • 3 minutes

    I know that I will never convince everyone to use Builder for development. Even I have a hard time getting myself out of the terminal at times.

    Foundry comes in two forms, an executable and a library. The executable is just a bunch of commands and libfoundry is meant for building your own IDE (like Builder) or specialized tooling.

    # initialize .foundry directory if never done before
    cd my-project/
    foundry init
    

    If you go into most GNOME applications, they likely have a Flatpak manifest. Builder uses this to auto-discover a lot about a project. Foundry is no different.

    # Build the project, just like Builder would do
    foundry build
    

    You can run this from any directory in your project as it will scan upwards to locate the .foundry/ directory that contains project state. It will also do incremental building just like Builder does.

    # Run the project, just like Builder would do
    foundry run
    
    # Run a specific command in place of the default program.
    # Useful to test something with "runtime" instead of
    # build environment.
    foundry run -- gtk4-demo
    

    Running the project will setup the necessary incremental flatpak pipelines and auxiliary tooling like an a11y bus, font integration, and what not. Your application will be run in the Flatpak build container based on the finish-args .

    This does require building the application to ensure the runtime environment is setup correctly.

    # Pull updated project dependencies.
    foundry dependencies update
    

    Updating your deps is pretty painless. This is not done automatically unless the dependency is missing so that we don’t have to constantly hammer remote servers on every build request.

    # Run a shell in the build pipeline, launches in builddir
    foundry devenv
    
    # Run a specific command in build pipeline
    foundry devenv -- ps aux
    

    You can get a terminal shell in the build pipeline (much like ctrl+alt+shift+t in Builder.

    # Lots of commands to inspect the build pipeline
    foundry pipeline info
    
    # Alias to foundry build
    foundry pipeline build
    
    # Invalidate all pipeline stages
    foundry pipeline invalidate
    
    # Purge (remove build files/artifacts/etc) to force
    # a clean build
    foundry pipeline purge
    
    # clean, configure, export, rebuild, which, install
    # all provide additional pipeline operations
    

    You can interact with the active build pipeline using the above commands.

    Sometimes you might want to know what compiler flags will get used with tooling on a specific file. That is made available via the pipeline as well.

    foundry pipeline flags path/to/file.c
    

    Maybe you need a language server for integrating with another editor. That is pretty easy to do for the supported languages by using the lsp command.

    $ foundry lsp list 
    Name                  Languages
    zls                   'zig'                                   
    vhdl-language-server  'vhdl'                                  
    vala-language-server  'vala' 'genie'                          
    ts-language-server    'js' 'jsx' 'typescript' 'typescript-jsx'
    sourcekit-lsp         'swift'                                 
    serve-d               'd'                                     
    rust-analyzer         'rust'                                  
    ruff                  'python3' 'python'                      
    pylsp                 'python3' 'python'                      
    mesonlsp              'meson'                                 
    lua-language-server   'lua'                                   
    jedi-language-server  'python'                                
    jdtls                 'java'                                  
    intelephense          'php'                                   
    gopls                 'go'                                    
    glsl-language-server  'glsl'                                  
    elixir-ls             'elixir'                                
    clangd                'c' 'cpp' 'chdr' 'cpphdr' 'objc'        
    blueprint             'blueprint'                             
    bash-language-server  'sh'                                    
    
    # use stdin/stdout to communicate with an LSP for python3
    $ foundry lsp run python3
    

    If you have multiple project configurations, you can look through them and select the active one. Just switch configs and run, Foundry will do the rest.

    foundry config list
    ...
    foundry config switch flatpak:app.devsuite.Manuals.Devel.json
    foundry run
    

    Want to get a .flatpak you can copy to another system to test?

    foundry export
    ...
    Artifacts:
      file:///.../apps.devsuite.Manuals.Devel.flatpak
    

    You can switch devices in case you have deviced running somewhere like a phone or tablet. Then running should deploy to that system and run it there.

    foundry device list 
    ...
    foundry device switch some_device
    foundry run
    

    You can get the URI to documentation which could allow you to integrate with other editors. Like many commands, you can use --format=json to get the output in an easy-to-parse format for editor plugins.

    # list available doc bundles to install
    foundry doc bundle list
    ...
    
    # install docs for GNOME 48
    foundry doc bundle install flatpak/org.gnome.Sdk.Docs/48/user
    
    # Find GtkWidget documentation
    query doc query --format=json GtkWidget
    

    Many settings can be tweaked using foundry settings set ... . Just tab-complete around to explore.

    Anyway, hopefully that serves as a quick intro into some of the things you can do with Foundry already as it progresses towards being a fully-fledged replacement for Builder’s internals.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /chergert/2025/04/26/using-foundry-to-build-run/

    • chevron_right

      Christian Hergert: Manuals on libfoundry

      news.movim.eu / PlanetGnome • 25 April

    I finally got around this past week to getting Manuals ported to libfoundry .

    That was something I wanted to do early so that I can rapidly get away from 3 versions of the documentation engine and Flatpak SDK management code. Currently it existed in Manuals, Builder, and Foundry, and soon we’ll get it to just Foundry.

    That also makes Manuals the first application to use libfoundry which resulted in lots of tree-shaking and things are looking bright! I very much look forward to getting Builder rebased on libfoundry .

    While I was at it, I ticked off a number of requested design issues as part of the Incubator submission . This afternoon it also got support for narrow views meaning you can run it on a GNOME-enabled phone.

    Probably not how most people will use it, but hey, maybe you have actually good public transportation where you are and some free time.

    Using the SDK documentation installation dialog. The Nightly SDK documentation is actively installing.

    Browsing Adwaita documentation inside the Manuals app. The page on button styles is displayed.

    • wifi_tethering open_in_new

      This post is public

      blogs.gnome.org /chergert/2025/04/25/manuals-on-libfoundry/