Cheat Sheets
Agile
Containers
DevOps Automation
DevOps Linux
DevOps Services
Glib Examples
Go Examples
Javascript Examples
Languages
Network
PHP Examples
Python Examples
Regex Examples
Scripting
Security
Solutions
Virtualization
Windows
visual-ops
Apache
Consul
CouchDB
Couchbase
ElasticSearch
Eureka
F5
GlusterFS
Hadoop
Java
Kafka
MongoDB
MySQL
NFS
Nodejs
PgBouncer
Postgres
RabbitMQ
Redis
Redis Sentinel
Squid
Tomcat
Webserver
Zookeeper
etcd
htaccess
htaccess Checker
memcached
nginx
sqlite
zuul
AWS - CLI
AWS - Cost
Deis
EC2 API Tools
ESX
Flynn
GCE
Heroku
Juju
KVM
LXC
LXD
OpenNebula
OpenStack
OpenVZ
VM Tuning
Vagrant
Vagrantfile
VirtualBox
Xen
heroku
systemd
vSphere
PyGI GStreamer
PyGI GTK Tutorial
PyGI GnomeKeyring
PyGI GtkStatusIcon
PyGObject API
Python Dictionary
Python Sockets
Python Syntax
Python re.match
Python re.sub
Python simplehttpserver
Python subprocess
Ansible
Bower
Chef
Gerrit
Git
Hubot - Howto
IT-Ops
Jenkins
Maven
Mcollective
Monitoring
Packaging
Packer
Puppet
Puppet - Hiera
Puppet - Iterating
Splunk
Terraform
Terraform
cfengine
salt
saltstack
CSS
Dev-Misc
GCC
GraphQL
JSON Schema
JSON
Java Debugging
Javascript
Linting
Linux HTML Widgets
Markdown
PHP
Perl
Perl Regex
Python
Regex Overview
Regex101
Ruby
Ruby Bundler
Ruby Regex
SVG Attributes
SVG Elements
Syndication
XHTML
XML 1.0
XML 1.1
XPath
XSD
XSLT 2.0
YAML
autotools
gdb
rvm
Bash Regex
Glib GRegex
Go Regex
Javascript RegExp
PHP preg_match
PHP preg_replace
Perl Regex
Python re.match
Python re.sub
Regex Overview
Ruby Regex
Go Channels
Go Goroutines
Go Interfaces
Go Regex
Go Struct
PHP Arrays
PHP curl_setopt
PHP date
PHP explode
PHP implode
PHP ini_set
PHP preg_match
PHP preg_replace
PHP str_replace
PHP stripos
PHP strpos
PHP strripos
PHP strrpos
PHP ternary operator
PHP unserialize
APIs
Bash
Bash Associative Array
Bash Functions
Bash Regex
Color Distance
Shell Problems
Shell-Scripting
awk
packages.json
sed
DBUS
DKMS
DRBD
Debian
Debugging
Filesystem
GPG
IPMI
Kernel Tracing
LVM
Linux Insides
Linux-Commands
Linux-HA
Linux-Networking
Linux-Sysadmin
Linux-Virtualization
Mail
Package Management
Packaging
Partitioning
Quota
RAID
SSH
Solaris
SysRq
Sysctl - Net
UEFI Install
ffmpeg
jq
screen-vs-tmux
sssd
systemd
ulimit
vi
vi - Advanced
Glib
Glib GRegex
Glib Testing
Glib XDG Migration
Docker
Helm
Openshift
kubernetes
rkt
Availability Data
Free Tier Compilation
SaaS Dev Tools
Solutions Automation
Solutions Monitoring
Solutions NoSQL
Solutions Virtualization
Status Pages
BGP
EIGRP
GLBP
HSRP
IEEE 802.11 WLAN
IEEE 802.1X
IPsec
IPv4 Multicast
IPv6
IS-IS
OSPF
VRRP
netsh
registry
wmic
Agile Roles
Depth of Kanban
Kanban - Kaizen
Lean Value Stream
Scrum
Scrumban
Semantic Services
Team of Teams
Use Cases
User Stories
Wardley Maps
Neighbourhood Network
netstat Dendrogram
netstat Force Graph
netstat Services
AppArmor
HTTPS
Incident Handling
Nmap
OpenSSL
Package Vulnerabilities
SELinux
SIEM
SSL-Certificates
Secure REST APIs
Security Auditing
Security-News-Feeds
Session Mgmt
Unhide Processes
Dependency Test
Javascript RegExp
Javascript Singleton
Javascript strptime
Javascript toggle visibility
Javascript void0
Nodejs Compatibility
Nodejs Express
React
React JSX
React PropTypes
React Tutorial
Todo MVC

Linux HTML Widgets Examples

When you start a new open source project and decide to provide parts or the whole UI by an HTML widget you face the problem of first finding HTML widget libraries, especially light weight ones, and then using the correct one to avoid throwing away the code at a later point when you find one important feature missing. With this blog post I try to give a summary of existing open source HTML renderer libraries in the Linux world. I have some background experiences with the libraries from working on Liferea where we started with GtkHTML2, later added GtkMozembed support, then added Webkit support and finally switched to WebKit-only rendering. The following table tries to summarize the simple availability of the different HTML renderers:
Name Toolkit Platform Derived From Driving Force Active
KHTMLQT%KDEKDEYes
wxHtmlwxWidgetsGTK, WindowsKHTMLwxWidgetsYes
GtkHtmlGTK+ 1.0GNOME 1KHTMLGNOME 1No, long gone
GtkHtml2GTK+ 2.0GNOME 2GtkHtmlGNOME 2No, v2.11: Aug 2007
GtkHtml3GTK+ 2.0GNOME 2GtkHtmlXimian, EvolutionNo, v3.14: May 2008
GtkMozEmbedGTK+ 2.0Gecko%MozillaSomewhat
WebKitGtkGTK+ 2.0
GTK+ 3.0
WebkitKHTMLApple SafariYes
Note: My summary somewhat complements this Wikipedia list. Still it focusses more on Linux renderers and does correctly distinguish between the rather mad history of GtkHtml*. Given the list above one could conclude the only acceptable renderers are KTHML, wxHtml and WebkitGtk simply based on project activity. Still other renderers like GtkHtml2 and GtkHtml3 have gone a long way and provide a limited but stable functionality. But the important question is: What features are supported by the different renderers?
Name Widget
Embed
Full
HTML
CSS JS Java/Flash Editor
KHTMLyy1,2,3yyn
wxHtmlynnonennn
GtkHtmlyynonenny
GtkHtml2yy1,2 inlinennn
GtkHtml3yynonenny
GtkMozEmbedny1,2,3yyn
WebKitGtkny1,2,3yyn
The feature matrix along with the platform listing explains why a lot of those old renderer libraries are still around. Given you want to render simple markup in an email client you might still choose wxHtml or GtkHtml3, with the latter one providing you with a HTML editor for rich mail editing. Of course when you want to allow your users to have fully fledged inline browsing you need to use either KTHML, GtkMozEmbed or Webkit. Currently I believe WebKitGtk to be the best choice as it's widget gets a lot of attention, which GtkMozEmbed never had while being unstable and rather limited at the same time. If you find mistakes or have something to add please post a comment!
Comment on Disqus