Article from DistroWatch Weekly, Issue 650, 29 February 2016 by Jesse Smith

About once a year I like to put aside Linux distributions, and the various flavours of BSD, to look at Haiku. As the Haiku website tells us, "Haiku is an open source operating system that specifically targets personal computing. Inspired by the BeOS, Haiku is fast, simple to use, easy to learn and yet very powerful."

The Haiku operating system is unusual in that all of the pieces of the system are developed by one team. Linux distributions are usually assembled from a collection of thousands of other projects. The BSD projects generally put together the base operating system (the kernel, documentation and command line utilities), but leave creating desktop environments and graphical applications to third-party projects. The Haiku team not only handles kernel and userspace development, they also work on their own desktop environment and many end-user programs.
The project consists of a single team writing everything from the kernel, drivers, userland services, tool kit, and graphics stack to the included desktop applications and preflets. While numerous open source projects are utilized in Haiku, they are integrated seamlessly. This allows Haiku to achieve a level of consistency that provides many conveniences, and is truly enjoyable to use by both end-users and developers alike.The most recent version of Haiku, Alpha 4, was released over three years ago, in November of 2012. The project's website suggests people who want to try more recent copies of Haiku should try the development snapshots. Development snapshots are often a good way to try out new features, but they can be prone to breaking and it's probably not a good idea to install them on any computers where reliability is a priority.

I downloaded the most recent development snapshot, which was available as a 283MB ISO file. Booting from this media brings up a graphical screen. A window pops up and asks us to select our preferred language from a list and, optionally, we can pick our keyboard's layout from another list. At this point the system asks if we would like to run a live desktop environment or launch the project's system installer.

Haiku's desktop consists mostly of open, empty space with a soft blue background. At the top of the screen we find icons for accessing the file system and launching the system installer. A panel in the upper-right corner of the screen gives us access to the Applications & Settings menu. The panel also contains a system tray where we can find network settings and a volume control. At the bottom of the panel we find a list of open windows that facilitates switching between tasks and hiding or restoring windows.

haiku 2016 menu
Haiku 2016 -- The application menu
(full image size: 114kB, resolution: 1280x1024 pixels)

Launching Haiku's installer brings up a graphical application window. The installer begins by showing us some important information about the installation process. In particular, we are told we should have a partition set aside for Haiku to use before we begin the installation. While Haiku does feature a partition manager, the developers suggest we might gain better results using another partition manager. The first screen of the installer also includes notes on how to add a Haiku entry to the GRUB boot loader should we have an existing GRUB configuration. The next screen of the installer asks us to select a partition where Haiku may be installed. There is a button on this page that launches a partition manager where we can create and destroy partitions.

The system installer wants us to create at least one partition of the Be File System type. I did this in the partition manager window and then returned to the system installer. At first, the system installer did not seem to recognize the Be partition I had created. After a little experimenting, I discovered the partition must be both set to be of the Be type and then formatted with the Be File System through the partition manager. The system installer does not format the partition automatically and will not allow us to use the partition as an install target until it has been formatted. Once a partition has been properly set up and formatted, the Haiku installer copies its files to our hard drive. This process takes all of about ten seconds. We are then returned to the installer where we can set up a boot loader, if one does not already exist on our computer. If we do have GRUB already installed, we can follow the supplied instructions to add Haiku to our existing boot menu. Then we can reboot the computer to test our new operating system.

The Haiku operating system boots quickly, taking us from the boot menu to a full desktop environment in about five seconds. Haiku is a single user operating system, meaning we have just one user account and there is no password protection in place. This is highly convenient as it means we never need to sign into our account, but it also means anyone can access all of our files simply by booting Haiku.

Haiku is not only quick to boot, but the desktop is also pleasantly responsive. Windows, menus and buttons react almost instantly to input. The operating system, when sitting at the desktop, uses around 180MB of memory and is fairly light on resources when compared next to most Linux distributions running full featured desktops. I tried running Haiku in two test environments, a desktop computer and a VirtualBox virtual machine. Haiku did not boot on the desktop machine, keeping that aspect of my trial quite short. The operating system did run well in VirtualBox. While Haiku was not able to integrate into the VirtualBox environment seamlessly and the default display resolution was low, I was able to increase the operating system's display resolution through one of Haiku's desktop configuration tools.

haiku 2016 about
Haiku 2016 -- Trying to add a printer device
(full image size: 93kB, resolution: 1280x1024 pixels)

Haiku ships with a collection of desktop applications which seem to be unique to the operating system. While these programs may be slightly different from those which run on Linux distributions, the functionality tends to be very similar. Haiku ships with a functional web browser, package manager and e-mail client. We are also given a handful of desktop configuration apps, a contact manager and text editor. Haiku ships with a sound recorder, media player, IRC client and even a minimal web server. In the background we find an old copy of the GNU Compiler Collection (version 2.95).

One thing I appreciated about my time with Haiku was that it was usually easy to guess what an application would do, based on its name. For example, it wasn't too hard to guess that "People" would offer address book functionality or that "WebPositive" would be a web browser and "MediaPlayer" would be a, well, media player. There were a few programs whose names were less descriptive. I didn't know before trying them what "Poorman" and "Pe" did. (They were a web server and text editor, respectively.)

Haiku offers us a number of desktop widgets for monitoring such things as the time and system resources. These widgets can be spawned and placed around the desktop. At first I was not sure how to remove a widget after it had been created, resulting in a bit of visual clutter. I eventually found unwanted widgets could be dragged into Haiku's trash folder which was represented by an icon at the top of the desktop.

Haiku ships with a graphical software manager, called HaikuDepot. The depot, as I came to think of it, shows us a window divided into two parts. The top section of the window displays a list of available software packages in alphabetical order. Clicking on a package's entry causes the bottom section of the window to display more detailed information and a screen shot of the application we have highlighted. A search box allows us to try to locate items by name. Near the bottom of the window is an Install/Remove button we can click to cause the highlighted package to be added or removed from our system. The software manager worked well for me and I was impressed with how quickly operations were processed. The only issue I ran into was with my own unfamiliarity with the software available to Haiku users. I could browse for what I wanted or maybe get lucky by searching for keywords that described the functionality I wanted. But being a Haiku novice, I did not always know what was available or how best to find it. For example, I spent about five minutes searching for a screen shot utility, only to finally discover there is not one in the depot because Haiku includes one by default. However, the screen shot program is not listed in the application menu (so far as I could tell) and needs to be invoked from the command line.

haiku 2016 software
Haiku 2016 -- The HaikuDepot software manager
(full image size: 125kB, resolution: 1280x1024 pixels)

I ran into a few technical problems during my trial. For example, while Haiku's default web browser could display most on-line content, including YouTube videos, watching videos on YouTube sometimes caused the operating system to lock-up, requiring a hard reboot. When I tried playing audio files, Haiku's media player would open the file and then produce sound that resembled rapid-fire Morse Code. This meant that my multimedia experience was a bit limited when running Haiku, but all other aspects of the operating system functioned well.

Conclusions

I am of the opinion the Haiku project is doing a good job of creating an operating system in the modern image of BeOS. It took me a while to get used to the way Haiku does window management and to navigate the unfamiliar waters of the software available, but generally speaking I think Haiku performs well.

Haiku is unusual in that all the pieces of the operating system are developed by one team and I was curious to see if that would make a difference in the style of Haiku or in the way it performed. So far as I could tell, there is not a practical difference from the end user's perspective. Having all the developers on one team may make things work smoothly behind the scenes, but for the person sitting in front of the screen, I did not notice any benefit or drawback to the integrated approach to development.

What did stand out for me was that Haiku feels like a 1990s operating system. Specifically, the lack of user accounts and security checks makes Haiku feel like an artefact of the past. The user can explore anywhere, delete anything, install any software without seeing a prompt for credentials. This makes using Haiku very streamlined, but it takes away our safety net and effectively means Haiku will only be useful in situations where there is just one computer user. In short, Haiku tended to feel like a modern representation of how we used to do things. A well engineered, high performance model of what computing used to be like before most of us got concerned about security and abstraction.

*****

Hardware used in this review

My physical test equipment for this review was a desktop HP Pavilon p6 Series with the following specifications:

  • Processor: Dual-core 2.8GHz AMD A4-3420 APU
  • Storage: 500GB Hitachi hard drive
  • Memory: 6GB of RAM
  • Networking: Realtek RTL8111 wired network card
  • Display: AMD Radeon HD 6410D video card

 

Special thanks to Jesse Smith, to allow us to include the article into our knowledge base
Article by Jesse Smith, February 2016 - distrowatch.com
Made available by BeSly, the Haiku, BeOS and Zeta knowledge base.
Settings23.659MBMemory Usage315msRequest Duration
Theme
Open Button Position
Hide Empty Tabs
Autoshow
Reset to defaults
Joomla! Version5.3.1
PHP Version8.2.28
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.6.22-MariaDB-0ubuntu0.22.04.1
Collation
utf8mb3_general_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:53 [ "USER" => "lorglaser" "HOME" => "/var/www/vhosts/101.19982.vn.2-host.de" "PATH_TRAN...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1750391303 "last" => 1750391303...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
plg_system_languagefilter
array:1 [ "language" => "en-GB" ]
  • afterLoad (3.58MB) (28.44ms)
  • afterInitialise (7.4MB) (76.56ms)
  • afterRoute (1.55MB) (10.94ms)
  • beforeRenderComponent com_content (1.1MB) (11.73ms)
  • Before Access::preloadComponents (all components) (724.44KB) (8.65ms)
  • After Access::preloadComponents (all components) (118.45KB) (2.12ms)
  • Before Access::preloadPermissions (com_content) (424B) (15μs)
  • After Access::preloadPermissions (com_content) (400.12KB) (3.08ms)
  • Before Access::getAssetRules (id:1230 name:com_content.article.202) (18.65KB) (74μs)
  • After Access::getAssetRules (id:1230 name:com_content.article.202) (27.66KB) (790μs)
  • Before Access::getAssetRules (id:8 name:com_content) (1.07MB) (23.58ms)
  • After Access::getAssetRules (id:8 name:com_content) (1.28KB) (17μs)
  • afterRenderComponent com_content (1.63MB) (36ms)
  • afterDispatch (184.48KB) (7.5ms)
  • beforeRenderRawModule mod_languages (Language) (699.45KB) (11.12ms)
  • afterRenderRawModule mod_languages (Language) (90.12KB) (8.11ms)
  • beforeRenderRawModule mod_accordeonmenuck (User Menu) (7.7KB) (49μs)
  • afterRenderRawModule mod_accordeonmenuck (User Menu) (1.17MB) (12.95ms)
  • beforeRenderRawModule mod_accordeonmenuck (Accordeon Menu EN) (672B) (65μs)
  • afterRenderRawModule mod_accordeonmenuck (Accordeon Menu EN) (1.67MB) (30.73ms)
  • beforeRenderRawModule mod_custom (How to help us?) (6.41KB) (39μs)
  • afterRenderRawModule mod_custom (How to help us?) (9.02KB) (739μs)
  • beforeRenderRawModule mod_whosonline (Who is online) (576B) (19μs)
  • afterRenderRawModule mod_whosonline (Who is online) (59.11KB) (3.23ms)
  • beforeRenderRawModule mod_finder (Search) (1.49KB) (117μs)
  • afterRenderRawModule mod_finder (Search) (603.16KB) (9.65ms)
  • beforeRenderRawModule mod_custom (Imprint) (464B) (122μs)
  • afterRenderRawModule mod_custom (Imprint) (1.08KB) (325μs)
  • beforeRenderModule mod_custom (Imprint) (20.98KB) (1.14ms)
  • afterRenderModule mod_custom (Imprint) (18.66KB) (1.02ms)
  • beforeRenderRawModule mod_breadcrumbs (Breadcrumbs) (280B) (129μs)
  • afterRenderRawModule mod_breadcrumbs (Breadcrumbs) (32.16KB) (1.37ms)
  • beforeRenderModule mod_breadcrumbs (Breadcrumbs) (704B) (5μs)
  • afterRenderModule mod_breadcrumbs (Breadcrumbs) (5.56KB) (271μs)
  • beforeRenderModule mod_languages (Language) (488B) (48μs)
  • afterRenderModule mod_languages (Language) (6.44KB) (194μs)
  • beforeRenderModule mod_accordeonmenuck (User Menu) (6.17KB) (28μs)
  • afterRenderModule mod_accordeonmenuck (User Menu) (2.88KB) (181μs)
  • beforeRenderModule mod_accordeonmenuck (Accordeon Menu EN) (912B) (28μs)
  • afterRenderModule mod_accordeonmenuck (Accordeon Menu EN) (66.45KB) (225μs)
  • beforeRenderModule mod_custom (How to help us?) (55.61KB) (22μs)
  • afterRenderModule mod_custom (How to help us?) (3.19KB) (179μs)
  • beforeRenderModule mod_whosonline (Who is online) (64.98KB) (17μs)
  • afterRenderModule mod_whosonline (Who is online) (2.69KB) (194μs)
  • beforeRenderModule mod_finder (Search) (1.07KB) (45μs)
  • afterRenderModule mod_finder (Search) (2.92KB) (106μs)
  • afterRender (929KB) (21.76ms)
  • 1 x afterInitialise (7.4MB) (24.28%)
    76.56ms
    1 x afterRenderComponent com_content (1.63MB) (11.42%)
    36.00ms
    1 x afterRenderRawModule mod_accordeonmenuck (Accordeon Menu EN) (1.67MB) (9.75%)
    30.73ms
    1 x afterLoad (3.58MB) (9.02%)
    28.44ms
    1 x Before Access::getAssetRules (id:8 name:com_content) (1.07MB) (7.48%)
    23.58ms
    1 x afterRender (929KB) (6.9%)
    21.76ms
    1 x afterRenderRawModule mod_accordeonmenuck (User Menu) (1.17MB) (4.11%)
    12.95ms
    1 x beforeRenderComponent com_content (1.1MB) (3.72%)
    11.73ms
    1 x beforeRenderRawModule mod_languages (Language) (699.45KB) (3.53%)
    11.12ms
    1 x afterRoute (1.55MB) (3.47%)
    10.94ms
    1 x afterRenderRawModule mod_finder (Search) (603.16KB) (3.06%)
    9.65ms
    1 x Before Access::preloadComponents (all components) (724.44KB) (2.74%)
    8.65ms
    1 x afterRenderRawModule mod_languages (Language) (90.12KB) (2.57%)
    8.11ms
    1 x afterDispatch (184.48KB) (2.38%)
    7.50ms
    1 x afterRenderRawModule mod_whosonline (Who is online) (59.11KB) (1.02%)
    3.23ms
    1 x After Access::preloadPermissions (com_content) (400.12KB) (0.98%)
    3.08ms
    1 x After Access::preloadComponents (all components) (118.45KB) (0.67%)
    2.12ms
    1 x afterRenderRawModule mod_breadcrumbs (Breadcrumbs) (32.16KB) (0.43%)
    1.37ms
    1 x beforeRenderModule mod_custom (Imprint) (20.98KB) (0.36%)
    1.14ms
    1 x afterRenderModule mod_custom (Imprint) (18.66KB) (0.32%)
    1.02ms
    1 x After Access::getAssetRules (id:1230 name:com_content.article.202) (27.66KB) (0.25%)
    790μs
    1 x afterRenderRawModule mod_custom (How to help us?) (9.02KB) (0.23%)
    739μs
    1 x afterRenderRawModule mod_custom (Imprint) (1.08KB) (0.1%)
    325μs
    1 x afterRenderModule mod_breadcrumbs (Breadcrumbs) (5.56KB) (0.09%)
    271μs
    1 x afterRenderModule mod_accordeonmenuck (Accordeon Menu EN) (66.45KB) (0.07%)
    225μs
    1 x afterRenderModule mod_languages (Language) (6.44KB) (0.06%)
    194μs
    1 x afterRenderModule mod_whosonline (Who is online) (2.69KB) (0.06%)
    194μs
    1 x afterRenderModule mod_accordeonmenuck (User Menu) (2.88KB) (0.06%)
    181μs
    1 x afterRenderModule mod_custom (How to help us?) (3.19KB) (0.06%)
    179μs
    1 x beforeRenderRawModule mod_breadcrumbs (Breadcrumbs) (280B) (0.04%)
    129μs
    1 x beforeRenderRawModule mod_custom (Imprint) (464B) (0.04%)
    122μs
    1 x beforeRenderRawModule mod_finder (Search) (1.49KB) (0.04%)
    117μs
    1 x afterRenderModule mod_finder (Search) (2.92KB) (0.03%)
    106μs
    1 x Before Access::getAssetRules (id:1230 name:com_content.article.202) (18.65KB) (0.02%)
    74μs
    1 x beforeRenderRawModule mod_accordeonmenuck (Accordeon Menu EN) (672B) (0.02%)
    65μs
    1 x beforeRenderRawModule mod_accordeonmenuck (User Menu) (7.7KB) (0.02%)
    49μs
    1 x beforeRenderModule mod_languages (Language) (488B) (0.02%)
    48μs
    1 x beforeRenderModule mod_finder (Search) (1.07KB) (0.01%)
    45μs
    1 x beforeRenderRawModule mod_custom (How to help us?) (6.41KB) (0.01%)
    39μs
    1 x beforeRenderModule mod_accordeonmenuck (User Menu) (6.17KB) (0.01%)
    28μs
    1 x beforeRenderModule mod_accordeonmenuck (Accordeon Menu EN) (912B) (0.01%)
    28μs
    1 x beforeRenderModule mod_custom (How to help us?) (55.61KB) (0.01%)
    22μs
    1 x beforeRenderRawModule mod_whosonline (Who is online) (576B) (0.01%)
    19μs
    1 x After Access::getAssetRules (id:8 name:com_content) (1.28KB) (0.01%)
    17μs
    1 x beforeRenderModule mod_whosonline (Who is online) (64.98KB) (0.01%)
    17μs
    1 x Before Access::preloadPermissions (com_content) (424B) (0%)
    15μs
    1 x beforeRenderModule mod_breadcrumbs (Breadcrumbs) (704B) (0%)
    5μs
39 statements were executed, 8 of which were duplicates, 31 unique37.07ms750.36KB
  • SELECT @@SESSION.sql_mode;174μs968B/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:259Copy
  • SELECT `data` FROM `haisly_session` WHERE `session_id` = ?1.3ms1008BParams/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php:250Copy
  • SELECT `session_id` FROM `haisly_session` WHERE `session_id` = :session_id LIMIT 1124μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `haisly_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)300μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `extension_id` AS `id`,`element` AS `option`,`params`,`enabled` FROM `haisly_extensions` WHERE `type` = 'component' AND `state` = 0 AND `enabled` = 1983μs1.73KB/libraries/src/Component/ComponentHelper.php:399Copy
  • SELECT `id`,`rules` FROM `haisly_viewlevels`327μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `haisly_usergroups` AS `a` LEFT JOIN `haisly_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest250μs1.33KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `folder` AS `type`,`element` AS `name`,`params` AS `params`,`extension_id` AS `id` FROM `haisly_extensions` WHERE `enabled` = 1 AND `type` = 'plugin' AND `state` IN (0,1) AND `access` IN (:preparedArray1,:preparedArray2) ORDER BY `ordering`802μs3.98KBParams/libraries/src/Plugin/PluginHelper.php:294Copy
  • SELECT * FROM `haisly_languages` WHERE `published` = 1 ORDER BY `ordering` ASC399μs2.52KB/libraries/src/Language/LanguageHelper.php:179Copy
  • SELECT `element`,`name`,`client_id`,`extension_id` FROM `haisly_extensions` WHERE `type` = 'language' AND `state` = 0 AND `enabled` = 1463μs1.55KB/libraries/src/Language/LanguageHelper.php:252Copy
  • SELECT `m`.`id`,`m`.`menutype`,`m`.`title`,`m`.`alias`,`m`.`note`,`m`.`link`,`m`.`type`,`m`.`level`,`m`.`language`,`m`.`browserNav`,`m`.`access`,`m`.`params`,`m`.`home`,`m`.`img`,`m`.`template_style_id`,`m`.`component_id`,`m`.`parent_id`,`m`.`path` AS `route`,`e`.`element` AS `component` FROM `haisly_menu` AS `m` LEFT JOIN `haisly_extensions` AS `e` ON `m`.`component_id` = `e`.`extension_id` WHERE ( (`m`.`published` = 1 AND `m`.`parent_id` > 0 AND `m`.`client_id` = 0) AND (`m`.`publish_up` IS NULL OR `m`.`publish_up` <= :currentDate1)) AND (`m`.`publish_down` IS NULL OR `m`.`publish_down` >= :currentDate2) ORDER BY `m`.`lft`4.07ms555.3KBParams/libraries/src/Menu/SiteMenu.php:166Copy
  • SELECT `id`,`home`,`template`,`s`.`params`,`inheritable`,`parent` FROM `haisly_template_styles` AS `s` LEFT JOIN `haisly_extensions` AS `e` ON `e`.`element` = `s`.`template` AND `e`.`type` = 'template' AND `e`.`client_id` = `s`.`client_id` WHERE `s`.`client_id` = 0 AND `e`.`enabled` = 1897μs848B/administrator/components/com_templates/src/Model/StyleModel.php:718Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `haisly_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39,:preparedArray40,:preparedArray41,:preparedArray42,:preparedArray43)1.52ms7.69KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `haisly_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 01.08ms29.48KBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `haisly_content`579μs1.77KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:539Copy
  • UPDATE `haisly_content` SET `hits` = (`hits` + 1) WHERE `id` = '202'2.31ms48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `haisly_content` AS `a` INNER JOIN `haisly_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `haisly_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `haisly_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `haisly_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `haisly_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0 AND `a`.`language` IN (:preparedArray1,:preparedArray2)) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray3,:preparedArray4)3.28ms23.44KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `haisly_categories` AS `s` INNER JOIN `haisly_categories` AS `c` ON (`s`.`lft` < `c`.`lft` AND `c`.`lft` < `s`.`rgt` AND `c`.`language` IN (:preparedArray3,:preparedArray4)) OR (`c`.`lft` <= `s`.`lft` AND `s`.`rgt` <= `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`1.13ms3.98KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `haisly_contentitem_tag_map` AS `m` INNER JOIN `haisly_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)305μs3.97KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c2`.`language`,CONCAT_WS(':', `c2`.`id`, `c2`.`alias`) AS `id`,CONCAT_WS(':', `ca`.`id`, `ca`.`alias`) AS `catid` FROM `haisly_content` AS `c` INNER JOIN `haisly_associations` AS `a` ON `a`.`id` = `c`.`id` AND `a`.`context` = :context INNER JOIN `haisly_associations` AS `a2` ON `a`.`key` = `a2`.`key` INNER JOIN `haisly_content` AS `c2` ON `a2`.`id` = `c2`.`id` INNER JOIN `haisly_categories` AS `ca` ON `c2`.`catid` = `ca`.`id` AND `ca`.`extension` = :extension2 WHERE `c`.`id` = :id AND c2.access IN (1,5) AND c2.language != 'en-GB' AND (c2.publish_up IS NULL OR c2.publish_up <= '2025-06-20 03:48:23') AND (c2.publish_down IS NULL OR c2.publish_down >= '2025-06-20 03:48:23') AND c2.state = 1366μs1.47KBParams/libraries/src/Language/Associations.php:145Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `haisly_categories` AS `s` INNER JOIN `haisly_categories` AS `c` ON (`s`.`lft` < `c`.`lft` AND `c`.`lft` < `s`.`rgt` AND `c`.`language` IN (:preparedArray3,:preparedArray4)) OR (`c`.`lft` <= `s`.`lft` AND `s`.`rgt` <= `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`1.77ms3.98KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM haisly_fields AS a LEFT JOIN `haisly_languages` AS l ON l.lang_code = a.language LEFT JOIN haisly_users AS uc ON uc.id=a.checked_out LEFT JOIN haisly_viewlevels AS ag ON ag.id = a.access LEFT JOIN haisly_users AS ua ON ua.id = a.created_user_id LEFT JOIN haisly_fields_groups AS g ON g.id = a.group_id LEFT JOIN `haisly_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform AND `a`.`language` IN (:preparedArray8,:preparedArray9) ORDER BY a.ordering ASC1ms4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `a`.`id`,`a`.`title`,`a`.`catid`,`a`.`language`, CASE WHEN CHAR_LENGTH(`a`.`alias`) != 0 THEN CONCAT_WS(':', `a`.`id`, `a`.`alias`) ELSE a.id END AS `slug`, CASE WHEN CHAR_LENGTH(`cc`.`alias`) != 0 THEN CONCAT_WS(':', `cc`.`id`, `cc`.`alias`) ELSE cc.id END AS `catslug` FROM `haisly_content` AS `a` LEFT JOIN `haisly_categories` AS `cc` ON `cc`.`id` = `a`.`catid` WHERE `a`.`catid` = :catid AND `a`.`state` = :state AND `a`.`access` IN (:preparedArray1,:preparedArray2) AND (`publish_up` IS NULL OR `publish_up` <= :nowDate1) AND (`publish_down` IS NULL OR `publish_down` >= :nowDate2) AND `a`.`language` IN (:preparedArray3,:preparedArray4) ORDER BY CASE WHEN `a`.`publish_up` IS NULL THEN `a`.`created` ELSE `a`.`publish_up` END DESC1.12ms1.77KBParams/plugins/content/pagenavigation/src/Extension/PageNavigation.php:205Copy
  • SELECT `language`,`id` FROM `haisly_menu` WHERE `home` = '1' AND `published` = 1 AND `client_id` = 02.09ms736B/libraries/src/Language/Multilanguage.php:123Copy
  • SELECT `alias`,`catid` FROM haisly_content WHERE `id` = :key519μs1.37KBParams/libraries/src/Component/Router/Rules/PreprocessRules.php:123Copy
  • SELECT `c2`.`language`,`c2`.`id` FROM `haisly_menu` AS `c` INNER JOIN `haisly_associations` AS `a` ON `a`.`id` = `c`.`id` AND `a`.`context` = :context INNER JOIN `haisly_associations` AS `a2` ON `a`.`key` = `a2`.`key` INNER JOIN `haisly_menu` AS `c2` ON `a2`.`id` = `c2`.`id` WHERE `c`.`id` = :id239μs1.38KBParams/libraries/src/Language/Associations.php:145Copy
  • SELECT `m`.`id`,`m`.`title`,`m`.`module`,`m`.`position`,`m`.`content`,`m`.`showtitle`,`m`.`params`,`mm`.`menuid` FROM `haisly_modules` AS `m` LEFT JOIN `haisly_modules_menu` AS `mm` ON `mm`.`moduleid` = `m`.`id` LEFT JOIN `haisly_extensions` AS `e` ON `e`.`element` = `m`.`module` AND `e`.`client_id` = `m`.`client_id` WHERE ( ( (`m`.`published` = 1 AND `e`.`enabled` = 1 AND `m`.`client_id` = :clientId AND `m`.`access` IN (:preparedArray1,:preparedArray2)) AND (`m`.`publish_up` IS NULL OR `m`.`publish_up` <= :publishUp)) AND (`m`.`publish_down` IS NULL OR `m`.`publish_down` >= :publishDown)) AND (`mm`.`menuid` = :itemId OR `mm`.`menuid` <= 0) AND `m`.`language` IN (:preparedArray3,:preparedArray4) ORDER BY `m`.`position`,`m`.`ordering`2.31ms1.97KBParams/libraries/src/Cache/Controller/CallbackController.php:51Copy
  • SELECT * FROM haisly_modules WHERE published=1 ORDER BY id454μs19.14KB/administrator/components/com_accordeonmenuck/helpers/ckfof.php:165Copy
  • SELECT a.layoutcss, a.customcss FROM haisly_accordeonmenuck_styles as a WHERE (a.state IN (0, 1)) AND a.id = 1153μs592B/administrator/components/com_accordeonmenuck/helpers/ckfof.php:174Copy
  • SELECT * FROM haisly_modules WHERE published=1 ORDER BY id446μs19.14KB/administrator/components/com_accordeonmenuck/helpers/ckfof.php:165Copy
  • SELECT a.layoutcss, a.customcss FROM haisly_accordeonmenuck_styles as a WHERE (a.state IN (0, 1)) AND a.id = 1163μs592B/administrator/components/com_accordeonmenuck/helpers/ckfof.php:174Copy
  • SELECT guest, client_id FROM haisly_session WHERE client_id = 0843μs20.56KB/modules/mod_whosonline/src/Helper/WhosonlineHelper.php:51Copy
  • SELECT `name`,`element` FROM `haisly_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1321μs3.14KB/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `haisly_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)365μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `haisly_schemaorg` WHERE `itemId` = :itemId AND `context` = :context160μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:406Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `haisly_content` AS `a` INNER JOIN `haisly_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `haisly_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `haisly_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `haisly_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `haisly_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0 AND `a`.`language` IN (:preparedArray1,:preparedArray2)) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray3,:preparedArray4)3.08ms22.23KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `haisly_scheduler_tasks` AS `a` WHERE `a`.`state` = 1167μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:517Copy
  • SELECT `session_id` FROM `haisly_session` WHERE `session_id` = ?115μs1KBParams/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php:277Copy
  • UPDATE `haisly_session` SET `data` = ? , `time` = ? WHERE `session_id` = ?1.09ms592BParams/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php:301Copy