selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

hotglue2 logo

Self-host hotglue2

dev-release

Drag-and-drop web page builder with flat-file storage

BetaOpen SourceGPL-3.0
Updated9 hours ago
LanguageJavaScript
Setup difficultyModerate
Stars
376
Port
80 (HTTP web server)
Install with Docker Compose
hotglue2 screenshot 1

What is hotglue2?

Hotglue lets you build websites visually in the browser using a free-form drag-and-drop canvas. All content is saved as flat files in a content directory, so no database is required. It runs on plain PHP 8 and can be started with PHP's built-in server, any standard web server, or Docker Compose. Features include image, video, and audio uploads with automatic resizing and encoding (via GD and ffmpeg), page-level passwords, multiple authentication methods (basic, digest, or MySQL-backed), and a centered layout mode with configurable grid guides. The project is under active development with a major update in progress (version 1.9.0-RC).

Should you self-host hotglue2?

hotglue2 scores 45/100 on selfhost.directory (how scoring works) and ranks #5 of 6 in Website Builder. It has 376 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. It is GPL-3.0-licensed and written mostly in JavaScript.

Its closest alternative on selfhost.directory is webstudio (69/100, 9 119 stars). It scores higher overall, so compare the two before you pick. See hotglue2 vs webstudio side by side.

Features

  • Audio upload and encodingRequires ffmpeg installed
  • Built-in development server
  • Centered layout mode
  • Configurable grid guides
  • Custom favicon support
  • Docker Compose Deployment
  • Drag and drop page builder
  • Flat File Storage
  • Image upload and resizingRequires GD library installed
  • Multiple Authentication Methods
  • Page-level passwords
  • PHP 8 support
  • Video upload and encodingRequires ffmpeg installed

hotglue2 README

How to install hotglue2

Install hotglue2 with Docker Compose

Docker and Docker Compose

docker-compose up -d docker-compose exec hotglue git clone https://github.com/k0a1a/hotglue2.git /app/ docker-compose exec hotglue chmod -R 0777 /app/content docker-compose exec hotglue cp /app/user-config.inc.php-dist /app/user-config.inc.php docker-compose exec hotglue sed -i 's/changeme/myVeryComplexPassword/' /app/user-config.inc.php

Requires external Docker network named 'world'

How to configure hotglue2

  • A11Y_ROW_THRESHOLD16Pixels: objects within this distance count as one reading row

    Pixels: objects within this distance count as one reading row

  • AUDIO_BITRATE128kAudio bitrate for encoded variant

    Audio bitrate for encoded variant

  • AUDIO_CHANNELS2Audio channels (stereo)

    Audio channels (stereo)

  • AUDIO_ENCODE_TIMEOUT7200Give up waiting for background encode after n seconds

    Give up waiting for background encode after n seconds

  • AUDIO_ENCODINGtrueRe-encode uploaded audio (needs ffmpeg)

    Re-encode uploaded audio (needs ffmpeg)

    values: true, false

  • AUDIO_MAX_DURATION1800Only first n seconds of upload are encoded/served

    Only first n seconds of upload are encoded/served

  • AUDIO_SAMPLE_RATE44100Sample rate for encoded variant

    Sample rate for encoded variant

  • AUDIO_START_ON_CLICKtrueClicking audio toggles pause/play when no native controls

    Clicking audio toggles pause/play when no native controls

    values: true, false

  • AUTH_METHODbasicAuthentication method: basic, digest, db, or none

    Authentication method: basic, digest, db, or none

    values: basic, digest, db, none

  • AUTH_PASSWORDchangemePassword for basic authentication

    Password for basic authentication

  • AUTH_USERadminUsername for basic authentication

    Username for basic authentication

  • BASE_URLBase URL of the installation (auto-detected if empty)

    Base URL of the installation (auto-detected if empty)

  • CACHE_TIME0Cache time in seconds (zero to disable)

    Cache time in seconds (zero to disable)

  • CONTENT_DIRcontentContent directory (must be writable)

    Content directory (must be writable)

  • DB_AUTH_HOSTMySQL host for database authentication

    MySQL host for database authentication

  • DB_AUTH_NAMEMySQL database name for database authentication

    MySQL database name for database authentication

  • DB_AUTH_PASSWORDMySQL password for database authentication

    MySQL password for database authentication

  • DB_AUTH_TABLEuserCake_UsersTable holding user accounts

    Table holding user accounts

  • DB_AUTH_USERMySQL username for database authentication

    MySQL username for database authentication

  • DEFAULT_PAGEstartDefault page to show

    Default page to show

  • DEFAULT_TO_EDITfalseEdit pages by default

    Edit pages by default

    values: true, false

  • FAVICONimg/favicon.icoFavicon path or absolute URL

    Favicon path or absolute URL

  • FFMPEG_BINARYffmpegPath to ffmpeg binary

    Path to ffmpeg binary

  • HOTGLUE_VERSION1.9.0Expected API version

    Expected API version

  • IMAGE_JPEG_QUAL90Quality for JPEG resizing (0-100)

    Quality for JPEG resizing (0-100)

  • IMAGE_PNG_QUAL7Quality for PNG resizing (9-0)

    Quality for PNG resizing (9-0)

  • IMAGE_RESIZE_MAX_DPR2Cap on devicePixelRatio for server-side resize

    Cap on devicePixelRatio for server-side resize

  • IMAGE_RESIZINGtrueResize uploaded images on the server (needs GD)

    Resize uploaded images on the server (needs GD)

    values: true, false

  • IMAGE_UPLOAD_MAX_HEIGHT512Cap on-canvas size of newly-uploaded image (pixels)

    Cap on-canvas size of newly-uploaded image (pixels)

  • IMAGE_UPLOAD_MAX_WIDTH512Cap on-canvas size of newly-uploaded image (pixels)

    Cap on-canvas size of newly-uploaded image (pixels)

  • IMAGE_UPLOAD_RESIZE_LARGER120%Auto-resize uploaded image when larger than n% of window

    Auto-resize uploaded image when larger than n% of window

  • IMAGE_UPLOAD_RESIZE_TO80%Target size in n% of window width or height

    Target size in n% of window width or height

  • IMAGE_WEBP_QUAL90Quality for WebP resizing (0-100)

    Quality for WebP resizing (0-100)

  • LOCK_TIME5000Maximum time in ms to wait for an object lock

    Maximum time in ms to wait for an object lock

  • LOG_FILEcontent/log.txtLog file path (must be writable)

    Log file path (must be writable)

  • LOG_LEVELerrorMinimum log level

    Minimum log level

    values: error, warn, info, debug

  • OBJECT_DEFAULT_COLORS#61b9cf #ff00ff #ffff00Default colors for new objects (space-separated)

    Default colors for new objects (space-separated)

  • PAGE_DEFAULT_CONTAINER_WIDTH960Default centered container width in pixels

    Default centered container width in pixels

  • PAGE_DEFAULT_GRID_X100Default grid X spacing in pixels

    Default grid X spacing in pixels

  • PAGE_DEFAULT_GRID_Y100Default grid Y spacing in pixels

    Default grid Y spacing in pixels

  • PAGE_GUIDES_XShow grid line after n horizontal pixels (space-separated)

    Show grid line after n horizontal pixels (space-separated)

  • PAGE_GUIDES_YShow grid line after n vertical pixels (space-separated)

    Show grid line after n vertical pixels (space-separated)

  • PAGE_MAX_CONTAINER_WIDTH4000Widest container width handles may drag to

    Widest container width handles may drag to

  • PAGE_MIN_CONTAINER_WIDTH320Narrowest container width handles may drag to

    Narrowest container width handles may drag to

  • PAGE_PASSWORD_MAX_TRIES5Page password attempts allowed per IP and page

    Page password attempts allowed per IP and page

  • PAGE_PASSWORD_WINDOW600Time window for password attempts in seconds

    Time window for password attempts in seconds

  • PAGES_NEED_AUTHtruePage browser needs authentication

    Page browser needs authentication

    values: true, false

  • RESERVED_PAGE_NAMEScode edit pages faviconPage names used internally and unavailable

    Page names used internally and unavailable

  • SHORT_URLSfalseUse short URLs internally

    Use short URLs internally

    values: true, false

  • SHOW_FRONTEND_ERRORStrueShow frontend errors

    Show frontend errors

    values: true, false

  • SITE_NAMEhotglue 1.9Site name displayed in UI

    Site name displayed in UI

  • TEXT_AUTO_BRtrueAutomatically add <br> elements for newlines

    Automatically add <br> elements for newlines

    values: true, false

  • TEXT_USE_WOFF_FONTStrueOffer WOFF webfonts (experimental)

    Offer WOFF webfonts (experimental)

    values: true, false

  • UPLOAD_MAX_SIZE536870912Cap on single uploaded file in bytes (0 to disable)

    Cap on single uploaded file in bytes (0 to disable)

  • USE_HOTGLUE_ERRORStrueUse hotglue theming for error pages

    Use hotglue theming for error pages

    values: true, false

  • USE_MIN_FILEStrueUse minified files if possible

    Use minified files if possible

    values: true, false

  • VIDEO_DISPLAY_MAX_HEIGHT512Cap on-canvas display size of new video (pixels)

    Cap on-canvas display size of new video (pixels)

  • VIDEO_DISPLAY_MAX_WIDTH512Cap on-canvas display size of new video (pixels)

    Cap on-canvas display size of new video (pixels)

  • VIDEO_ENCODE_AUDIO_BITRATE64kAudio bitrate for encoded variant

    Audio bitrate for encoded variant

  • VIDEO_ENCODE_CRF24x264 quality for encoded variant (lower = higher quality)

    x264 quality for encoded variant (lower = higher quality)

  • VIDEO_ENCODE_TIMEOUT7200Give up waiting for background encode after n seconds

    Give up waiting for background encode after n seconds

  • VIDEO_ENCODINGtrueRe-encode uploaded videos (needs ffmpeg)

    Re-encode uploaded videos (needs ffmpeg)

    values: true, false

  • VIDEO_MAX_DURATION60Only first n seconds of upload are encoded/served

    Only first n seconds of upload are encoded/served

  • VIDEO_MAX_HEIGHT720Cap on short side of frame (never upscales)

    Cap on short side of frame (never upscales)

  • VIDEO_POSTER_ATTEMPTS5Random frames to try for non-empty poster

    Random frames to try for non-empty poster

  • VIDEO_POSTER_EMPTY_YAVG16Luma threshold for empty poster frame

    Luma threshold for empty poster frame

  • VIDEO_POSTER_TIME1Second offset to grab poster frame

    Second offset to grab poster frame

  • VIDEO_START_ON_CLICKtrueClicking video toggles pause/play when no native controls

    Clicking video toggles pause/play when no native controls

    values: true, false

  • VIEW_NEEDS_AUTHfalseViewing pages requires authentication

    Viewing pages requires authentication

    values: true, false

hotglue2 releases & version history

More in Website Builder

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…