Integrates seamlessly into GNAT Studio

The GNATStudio IDE in debugger mode.

The GNAT Remote menu in GNAT Studio.
Fast deployment
To deploy LibreFrame applications, we use GNAT Remote, our deployment utility for Alire projects. It manages two DEV and PROD branches and restarts Linux services via systemd.
GNAT Remote in action
Here’s an example of the actions performed for the vending machine telemetry server DEV branch. At first, it backups sources., then remote copy and remote build, and finally remote service restart to handle the new fresh binary.
gnatremote --action=dev_save_copy_build_full_restart
GnatRemote - Gnatstudio remote utility
Copyright (C) Sowebio SARL 2023-2025
gnatremote v0.9 - v22 v0.6 - build 2025-02-09 14:16:01
20250209-182253.588 - INIT - MSG - gnatremote.Init.App > Configuration file ../gnatremote.cfg loaded
20250209-182253.588 - ACTION - --- - INPUT PARAMETERS -------------------------------
20250209-182253.591 - ACTION - MSG - Action required: dev_save_copy_build_full_restart
20250209-182253.591 - ACTION - MSG - Local project directory: /home/sr/Sowebio/informatique/dev/prv/hex01
20250209-182253.591 - ACTION - MSG - Local shared directory: /home/sr/Sowebio/informatique/dev/prv/hex01/hex01
20250209-182253.592 - ACTION - MSG - Local program directory: /home/sr/Sowebio/informatique/dev/prv/hex01/hex01_net
20250209-182253.592 - ACTION - MSG - Remote build directory: root@i188c1.genesix.org/root/build/hex01
20250209-182253.592 - ACTION - MSG - Remote run dir directory: root@i188c1.genesix.org/opt/hex01
20250209-182253.592 - ACTION - MSG - Remote run dev directory: root@i188c1.genesix.org/opt/hex01/dev
20250209-182253.593 - ACTION - MSG - Remote run prod directory: root@i188c1.genesix.org/opt/hex01/prod
20250209-182253.593 - ACTION - --- - GNATREMOTE.COPY_SHARED > COPY COMMON PROJECT SOURCES
20250209-182253.593 - ACTION - MSG - Net.Rsync > Excluding: .*
20250209-182253.594 - ACTION - MSG - Net.Rsync > Excluding: prg
20250209-182253.594 - ACTION - MSG - Net.Rsync > Excluding: obj
20250209-182255.223 - ACTION - MSG - Net.Rsync > Directory_Rx exists, no need to create it
sending incremental file list
sent 10.198 bytes received 27 bytes 2.921,43 bytes/sec
total size is 13.522.374 speedup is 1.322,48
20250209-182258.424 - ACTION - MSG - Net.Rsync > Copy: /home/sr/Sowebio/informatique/dev/prv/hex01/hex01/ to /root/build/hex01/hex01 successful
20250209-182258.425 - ACTION - --- - GNATREMOTE.COPY_SOURCES > COPY BUILD FILES AND PROGRAM SOURCES
20250209-182258.425 - ACTION - MSG - Net.Rsync > Excluding: .*
20250209-182258.425 - ACTION - MSG - Net.Rsync > Excluding: prg
20250209-182258.426 - ACTION - MSG - Net.Rsync > Excluding: obj
20250209-182259.611 - ACTION - MSG - Net.Rsync > Directory_Rx exists, no need to create it
sending incremental file list
./
alire.toml
3.807 100% 0,00kB/s 0:00:00 3.807 100% 0,00kB/s 0:00:00 (xfr#1, to-chk=35/38)
gnatremote.cfg
3.955 100% 3,77MB/s 0:00:00 3.955 100% 3,77MB/s 0:00:00 (xfr#2, to-chk=34/38)
gnatremote.log
1.946 100% 633,46kB/s 0:00:00 1.946 100% 633,46kB/s 0:00:00 (xfr#3, to-chk=33/38)
hex01_net.gpr
3.480 100% 261,42kB/s 0:00:00 3.480 100% 261,42kB/s 0:00:00 (xfr#4, to-chk=32/38)
alire/
alire/alire.lock
5.247 100% 197,08kB/s 0:00:00 5.247 100% 197,08kB/s 0:00:00 (xfr#5, to-chk=27/38)
alire/build_hash_inputs
400 100% 7,66kB/s 0:00:00 400 100% 7,66kB/s 0:00:00 (xfr#6, to-chk=24/38)
alire/settings.toml
113 100% 1,49kB/s 0:00:00 113 100% 1,49kB/s 0:00:00 (xfr#7, to-chk=23/38)
alire/flags/
alire/flags/post_fetch_done
0 100% 0,00kB/s 0:00:00 (xfr#8, to-chk=20/38)
alire/tmp/
config/
config/hex01_net_config.ads
571 100% 6,56kB/s 0:00:00 571 100% 6,56kB/s 0:00:00 (xfr#9, to-chk=17/38)
config/hex01_net_config.gpr
1.628 100% 18,07kB/s 0:00:00 1.628 100% 18,07kB/s 0:00:00 (xfr#10, to-chk=16/38)
config/hex01_net_config.h
412 100% 4,33kB/s 0:00:00 412 100% 4,33kB/s 0:00:00 (xfr#11, to-chk=15/38)
src/
sent 22.664 bytes received 2.657 bytes 7.234,57 bytes/sec
total size is 223.371 speedup is 8,82
20250209-182302.568 - ACTION - MSG - Net.Rsync > Copy: /home/sr/Sowebio/informatique/dev/prv/hex01/hex01_net/ to /root/build/hex01/hex01_net successful
20250209-182302.569 - ACTION - --- - GNATREMOTE.BUILD > HEX01_NET -------------------
20250209-182304.605 - ACTION - MSG - /root/build/hex01/hex01_net/obj successfully deleted
20250209-182307.184 - ACTION - MSG - Remote command: rm --force /root/build/hex01/hex01_net/prg/hex01_net on root@i188c1.genesix.org successful
20250209-182307.185 - ACTION - MSG - /root/build/hex01/hex01_net/prg/hex01_net successfully deleted
20250209-182415.556 - ACTION - MSG - Remote command cd /root/build/hex01/hex01_net ; alr build ; ls -l ./prg on root@i188c1.genesix.org successful
Note: Building hex01_net=0.1.0-dev/hex01_net.gpr...
Setup
[mkdir] object directory for project Hex01_Net
Compile
[Ada] hex01_net.adb
[C] sqlite3.c
[Ada] s-memory.adb
[Ada] ews.ads
[Ada] ews-http.adb
[Ada] gnoga.adb
[Ada] gnoga-server.adb
[Ada] gnoga-server-database.adb
[Ada] gnoga-server-database-mysql.adb
[Ada] hex01_def.adb
[Ada] uxstrings.adb
[Ada] v22.adb
[Ada] v22-cfg.adb
[Ada] v22-fls.adb
[Ada] v22-gui.adb
[Ada] v22-msg.adb
[Ada] v22-prg.adb
[Ada] v22-sql.adb
[Ada] v22-sys.adb
[Ada] v22-tio.adb
[Ada] v22-uxs.adb
[Ada] uxstrings-conversions.adb
[Ada] uxstrings-text_io.adb
[Ada] strings_edit.adb
[Ada] ews-reference_counted_pointers_g.adb
[Ada] ews-static.adb
[Ada] gnoga-types.adb
[Ada] gnoga-gui.ads
[Ada] gnoga-gui-base.adb
[Ada] uxstrings-lists.adb
[Ada] gnoga-application.adb
[Ada] gnoga-application-multi_connect.adb
[Ada] gnoga-gui-element.adb
[Ada] gnoga-gui-element-canvas.adb
[Ada] gnoga-gui-element-canvas-context_2d.adb
[Ada] gnoga-gui-element-canvas-context_2d-plotting.adb
[Ada] gnoga-gui-element-common.adb
[Ada] gnoga-gui-element-form.adb
[Ada] gnoga-gui-element-table.adb
[Ada] gnoga-gui-plugin.ads
[Ada] gnoga-gui-plugin-jqueryui.adb
[Ada] gnoga-gui-plugin-jqueryui-widget.adb
[Ada] gnoga-gui-window.adb
[Ada] uxstrings-hash.adb
[Ada] v22-gui-footer.adb
[Ada] v22-gui-header.adb
[Ada] v22-gui-main_menu.adb
[Ada] gnoga-gui-view.adb
[Ada] v22-net.adb
[Ada] gnoga-server-database-sqlite.adb
[Ada] strings_edit-integer_edit.adb
[Ada] strings_edit-utf8.adb
[Ada] ews-types.adb
[Ada] gnoga-server-connection.adb
[Ada] gnoga-gui-navigator.adb
[Ada] parsers.ads
[Ada] parsers-multiline_source.adb
[Ada] parsers-multiline_source-text_io.adb
[Ada] parsers-multiline_source-xpm.ads
[Ada] gnoga-types-colors.adb
[Ada] gnoga-gui-element-style_block.adb
[Ada] gnoga-gui-element-list.adb
[Ada] gnoga-client.ads
[Ada] gnoga-client-storage.adb
[Ada] gnoga-gui-document.adb
[Ada] gnoga-gui-location.adb
[Ada] v22-gui-breadcrumb.adb
[Ada] v22-gui-user_menu.adb
[Ada] gnoga-server-template_parser.adb
[Ada] gnoga-server-template_parser-simple.adb
[Ada] strings_edit-integers.ads
[Ada] parsers-generic_source.ads
[Ada] parsers-generic_source-get_cpp_blank.adb
[Ada] parsers-generic_source-get_text.adb
[Ada] parsers-generic_source-get_token.adb
[Ada] parsers-generic_source-keywords.adb
[Ada] parsers-generic_source-xpm.adb
[Ada] tables.adb
[Ada] tables-names.adb
[Ada] gnat-sockets-connection_state_machine.adb
[Ada] gnat-sockets-connection_state_machine-http_server.adb
[Ada] gnat-sockets-server.adb
[Ada] gnoga-server-connection-common.ads
[Ada] gnoga-server-mime.adb
[Ada] strings_edit-quoted.adb
[Ada] strings_edit-streams.adb
[Ada] gnoga-server-model.adb
[Ada] gnoga-server-model-queries.adb
[Ada] generic_unbounded_array.adb
[Ada] object-handle.adb
[Ada] object-handle-generic_unbounded_array.adb
[Ada] object.adb
[Ada] strings_edit-fields.adb
[Ada] gnat-sockets-connection_state_machine-big_endian.ads
[Ada] gnat-sockets-connection_state_machine-big_endian-unsigneds.adb
[Ada] strings_edit-base64.adb
[Ada] strings_edit-floats.ads
[Ada] strings_edit-time_conversions.adb
[Ada] gnat-sockets-connection_state_machine-expected_sequence.adb
[Ada] gnat-sockets-connection_state_machine-terminated_strings.adb
[Ada] stack_storage.adb
[Ada] strings_edit-float_edit.adb
[Ada] generic_unbounded_ptr_array.adb
Bind
[gprbind] hex01_net.bexch
[Ada] hex01_net.ali
Link
[archive] libhex01_net.a
[index] libhex01_net.a
[link] hex01_net.adb
Success: Build finished successfully in 67.66 seconds.
total 21828
-rwxr-xr-x 1 root root 22346416 9 févr. 18:25 hex01_net
20250209-182415.556 - ACTION - --- - GNATREMOTE.RESTART > HEX01_NET -----------------
20250209-182418.734 - ACTION - MSG - Remote command systemctl stop hex01_net_dev on root@i188c1.genesix.org successful
20250209-182419.925 - ACTION - MSG - Remote command cp --force /root/build/hex01/hex01_net/prg/hex01_net /opt/hex01/dev/hex01_net_dev on root@i188c1.genesix.org successful
20250209-182420.607 - ACTION - MSG - Remote command systemctl start hex01_net_dev on root@i188c1.genesix.org successful
20250209-182420.607 - ACTION - MSG - Action successful
20250209-182421.721 - EXIT - MSG - Total execution time: 0h01m28s