{"id":13442503,"url":"https://github.com/rabbibotton/clog","last_synced_at":"2025-10-09T10:41:45.851Z","repository":{"id":36998535,"uuid":"321161258","full_name":"rabbibotton/clog","owner":"rabbibotton","description":"CLOG - The Common Lisp Omnificent GUI","archived":false,"fork":false,"pushed_at":"2025-07-04T18:10:00.000Z","size":17458,"stargazers_count":1646,"open_issues_count":22,"forks_count":113,"subscribers_count":44,"default_branch":"main","last_synced_at":"2025-07-04T19:22:19.439Z","etag":null,"topics":["common-lisp","gui","html-bindings","html-over-the-wire","javascript-over-the-wire","lisp","webframework","websocket-server"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rabbibotton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["rabbibotton"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-12-13T21:13:14.000Z","updated_at":"2025-07-04T18:10:03.000Z","dependencies_parsed_at":"2023-02-18T07:45:51.399Z","dependency_job_id":"7c7f891d-b549-4dd5-b4d5-9a15c0c9b406","html_url":"https://github.com/rabbibotton/clog","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/rabbibotton/clog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbibotton%2Fclog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbibotton%2Fclog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbibotton%2Fclog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbibotton%2Fclog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rabbibotton","download_url":"https://codeload.github.com/rabbibotton/clog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbibotton%2Fclog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001275,"owners_count":26083040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common-lisp","gui","html-bindings","html-over-the-wire","javascript-over-the-wire","lisp","webframework","websocket-server"],"created_at":"2024-07-31T03:01:46.537Z","updated_at":"2025-10-09T10:41:45.846Z","avatar_url":"https://github.com/rabbibotton.png","language":"Common Lisp","readme":"# CLOG - The Common Lisp Omnificent GUI\n\n## David Botton \u003cdavid@botton.com\u003e\n\n### License BSD 3-Clause License\n\n- [Learn to program Common Lisp and CLOG here - LEARN.md](LEARN.md)\n\n---\n\n![Image of CLOG](https://rabbibotton.github.io/images/clog.png)\n\nThe Common Lisp Omnificent GUI, CLOG for short, uses web technology to\nproduce graphical user interfaces for applications locally or remotely.\nCLOG can take the place, or work alongside, most cross-platform GUI\nframeworks and website frameworks. The CLOG package starts up the\nconnectivity to the browser or other websocket client (often a browser\nembedded in a native application.)\n\n- [CLOG - Reference Manual](https://rabbibotton.github.io/clog/clog-manual.html)\n\nSTATUS: CLOG and CLOG Builder 2.3 released. CLOG API Stable 4 years\n\nThe CLOG Builder is in 100% portable Common Lisp using the CLOG Framework.\n\nCLOG tech was invented (first in Ada) and has been running in commercial\nproduction code and products since 2013 and in Common Lisp since 2022. CLOG\nis used in commerical products, websites, and other opensource projects.\n\nCLOG is being actively extended, the core API is stable and proven,\nthe CLOG Builder is rich in features and is a full featured general purpose\nIDE for Common Lisp and web development (including support for working on\nJavaScript, HTML and more) and includes a GUI Builder for the CLOG Framework.\n\nCheck the github discussion boards for the latest on the project and support.\n\nConsider sponsoring work on CLOG at https://github.com/sponsors/rabbibotton\nit really does help!\n\nSome potential applications for CLOG:\n\n* Cross-platform GUIs and Reports\n* Secure websites and complex interactive web applications\n* Desktop business software (CLOG Runs native on Windows, Mac and Linux)\n* Mobile software (CLOG Runs native on Android and iOS)\n* Massive multiplayer online games\n* Monitoring software for embedded systems\n* A fun way to teach programming and advanced multi-tasking\n  parallel programming techniques. (CLOG is a parallel GUI)\n* And the list goes on\n\nThe key to CLOG is the relationship it forms with a browser window\nor browser control compiled to native code. CLOG uses websockets\nfor communications and the browser to render a GUI that maintains\nan active soft realtime connection. For most CLOG applications all\nprogramming logic, events and decisions are done on the server\nwhich can be local, or remote over the web.\n\nCLOG is developed with ECL, CCL and SBCL, it is tested fairly\nregulary on Linux, Windows, Android, Rasperry Pi, and Mac. It\nis also know to work with the commercial Common Lisps as well.\n\nCLOG works with QuickLisp and with OCICL distribution for builds.\n\nTo install Common Lisp with QuikLisp:\n\n* [Install Common-Lisp for MacOS](MACOS.md)\n* [Install Common-Lisp for Linux](LINUX.md)\n* [Install Common-Lisp For Android (Termux)](ANDROID-TERMUX.md)\n* [Install Common-Lisp for Win64](WINDOWS.md)\n\nFor more advanced users:\n\n* [Install and Using OCICL on all platforms](OCICL.md)\n\nFor those new to Common Lisp or just want to quickly try CLOG use ther\nsimple _EZ_ standalone versions:\n\n* https://github.com/rabbibotton/clog-win64-ez/releases\n* https://github.com/rabbibotton/clog-linux-ez/releases\n* https://github.com/rabbibotton/clog-linux-arm-ez/releases\n* https://github.com/rabbibotton/clog-mac-ez/releases\n\nUnzip, double click setup.bat or ./setup\nRun builder.exe or ./builder\nUpdate (almost daily :) use update.bat or ./update\n\nAs QuickLisp most frequently used - here are instructions:\n\nCLOG v1 is in QuickLisp (ql:quickload :clog), therefore one should\nadd the UltraLisp distribution to use CLOG v2 (alternatively use git)\n\nTo add UltraLisp to QuickLisp:\n\n```\n(ql-dist:install-dist \"http://dist.ultralisp.org/\"\n                      :prompt nil)\n```\n\nYou still need to update often the UltraLisp and QuickLisp distros with:\n\n```\n(ql:update-all-dists)\n```\nIf using the CLOG Builder Options -\u003e Update CLOG Builder will do this for you.\n\n\nQ U I C K   S T A R T\n=====================\n\n\n1) To get started load CLOG and then can load and run the builder:\n\n```\nsbcl --eval \"(ql:quickload :clog/tools)\" --eval \"(clog-tools:clog-builder)\"\n```\nor if using OCICL see [Install and Using OCICL on all platforms](OCICL.md)\nor if using emacs M-x slime then (ql:quickload :clog/tools)(clog-tools:clog-builder)\n\n\n2) In a REPL in the builder Tools -\u003e CLOG Builder REPL\n(can _also_ do all in the slime/sly REPL in emacs)\n\n```\nCL-USER\u003e (clog:run-tutorial 1)\n```\n\n_Tips for Windows WSL linux_ Install \"sudo apt install xdg-utils wslu\" to\ninstall xdg-open so that run-tutorial uses the windows browser. Also create\nor add to your %UserProfile% (home dir) a file .wslconfig with\n```\n[wsl2]\nnetworkingMode=mirrored\n```\n\n\nTo see where the source, tutorial and demo files are:\n\n```\nCL-USER\u003e (clog:clog-install-dir)\n```\n\nAlso in CLOG Builder use HELP -\u003e Tutorials Dir\n\n\nYou can the run the demos with:\n\n```\nCL-USER\u003e (clog:run-demo 1)\n```\n\nYou can also open a \"clog-repl\" browser window to play\nfrom the common-lisp repl:\n\n```\nCL-USER\u003e (in-package clog-user)\nCLOG-USER\u003e (clog-repl)\nCLOG-USER\u003e (setf (background-color *body*) \"beige\")\nCLOG-USER\u003e (create-div *body* :content \"Hello World!\")\n```\n\nThe clog-repl URL is http://127.0.0.1:8080/repl ``*body*`` will always refer\nto the last access of that URL.\n\nTo open the CLOG manual (or in the builder it is under Help):\n\n```\nCL-USER\u003e (clog:open-manual)\n```\n\nWork your way through the tutorials. You will see how quick and easy it is\nto be a CLOGer.\n\nF i r s t   C L O G   A p p\n===========================\n\n** 1 Smallest CLOG App - in a REPL\n\n```lisp\n(ql:quickload :clog)\n(in-package :clog-user)\n(initialize (lambda (body) (create-div body :content \"Hello World\")))\n```\n\nOpen browser to http://127.0.0.1:8080/ \nOr launch with (open-browser)\n\n** 2 Minimal CLOG App - Quick Lisp\n\n(in common-lisp or another asdf reachable location)\n\n```\ncd ~/common-lisp\nmkdir agui\ncd agui\n```\n\nCreate a project file agui.asd\n\n```lisp\n(asdf:defsystem #:agui\n  :description \"Hello World\"\n  :author \"some@one.com\"\n  :license  \"BSD\"\n  :version \"0.0.0\"\n  :serial t\n  :depends-on (#:clog)\n  :components ((:file \"agui\")))\n```\n\nCreate the agui.lisp file\n\n```lisp\n(defpackage #:agui\n  (:use #:cl #:clog)\n  (:export start-app))\n\n(in-package :agui)\n\n(defun on-new-window (body)\n  (create-div body :content \"Hello World\"))\n\n(defun start-app ()\n  (initialize 'on-new-window)\n  (open-browser))\n```\n\n** 3 Minimal CLOG App - OCICL - Best Method\n\nTo install ocicl -\n\nhttps://docs.google.com/presentation/d/16egmnPGA88RVOl0zhurxw6uLnA86v-lBe_SHZA7CWOg\n\nCan be anywhere on your system any OS\n\n```\nmkdkir helloworld\ncd helloworld\nocicl setup \u003e init\nocicl install clog\n```\n\n(If on Windows you will need the open source dlls in any project dir:\n  https://rabbibotton.github.io/clog/clogframe.zip )\n\nRun bash run-ocicl or run-ocicl.bat on Windows\n\nEdit helloworld.lisp with bash edit-ocicl or edit-ocicl.bat\n\nM o r e   I n f o\n=================\n\n![Image of clog-builder](https://rabbibotton.github.io/images/clog-builder.png)\n![Image of clog-builder-web](https://rabbibotton.github.io/images/cb-web.png)\n![Image of demo1](https://rabbibotton.github.io/images/clog-demo1.png)\n![Image of demo2](https://rabbibotton.github.io/images/clog-demo2.png)\n![Image of demo3](https://rabbibotton.github.io/images/clog-demo3.png)\n![Image of clog-db-admin](https://rabbibotton.github.io/images/clog-db-admin.png)\n![Image of clog-web-containers](https://rabbibotton.github.io/images/clog-web-containers.png)\n\n\nHere is a very simple sample CLOG app (from Tutorial 1):\n\n```lisp\n(defpackage #:clog-user               ; Setup a package for our work to exist in\n  (:use #:cl #:clog)                  ; Use the Common Lisp language and CLOG\n  (:export start-tutorial))           ; Export as public the start-tutorial function\n\n(in-package :clog-user)               ; Tell the \"reader\" we are in the clog-user package\n\n\n;; Define our CLOG application\n(defun on-new-window (body)           ; Define the function called on-new-window\n  \"On-new-window handler.\"            ; Optional docstring to describe function\n\n  (let ((hello-element                ; hello-element is a local variable that\n                                      ; will be bound to our new CLOG-Element\n\n      ;; This application simply creates a CLOG-Element as a child to the\n      ;; CLOG-body object in the browser window.\n\n      ;; A CLOG-Element represents a block of HTML (we will later see ways to\n      ;; directly create buttons and all sorts of HTML elements in more\n      ;; lisp-like ways with no knowledge of HTML or JavaScript.\n      (create-child body \"\u003ch1\u003eHello World! (click me!)\u003c/h1\u003e\")))\n\n    (set-on-click hello-element      ; Now we set a function to handle clicks\n          (lambda (obj)              ; In this case we use an anonymous function\n            (setf (color hello-element) \"green\"))))))\n\n;; To see all the events one can set and the many properties and styles that\n;; exist, refer to the CLOG manual or the file clog-element.lisp\n\n\n(defun start-tutorial ()   ; Define the function called start-tutorial\n  \"Start tutorial.\"        ; Optional docstring to describe function\n\n  ;; Initialize the CLOG system\n  (initialize #'on-new-window)\n  ;; Set the function on-new-window to execute\n  ;; every time a browser connection to our app.\n  ;; #' tells Common Lisp to pass the function\n  ;; to intialize and not to execute it.\n\n\n  ;; Open a browser to http://12.0.0.1:8080 - the default for CLOG apps\n  (open-browser))\n```\n\nOther samples of CLOG on the web:\n\n- [Moldable Inspectors](https://codeberg.org/khinsen/clog-moldable-inspector)\n- [CLOG + cl-collider](https://github.com/byulparan/clog-collider-experience)\n- [CLOG on iOS and Android](https://www.reddit.com/r/lisp/comments/tl46of/would_it_be_cool_to_run_a_clog_app_on_mobile_you/)\n- [Learn CLOG Dashboard](https://gist.github.com/mmontone/3a5a8a57675750e99ffb7fa64f40bc39#file-clog-learn-lisp)\n- [CLOGPower.com](http://clogpower.com)\n\nGet started learning CLOG and the CLOG Builder with\n* [Learn CLOG](LEARN.md)\n\nTool Summary\n\n- clog-builder  - Rapid visual interactive development for Web and GUIs\n- clog-db-admin - SQLite3 admin tool\n\nHigh Order Extensions to CLOG\n\n- clog-gui - Desktop over the web\n  - Menus\n  - Windowing system\n  - Modal windows, Keep-on-top windows\n  - File Load / Save dialogs\n  - Alert, Input and Confirmation dialogs\n  - Form dialogs\n\n- clog-web - Webpage creation\n  - Auto column layouts\n  - 12 Point Grid System layouts\n  - Content containers\n  - Panels\n  - Sidebar menus\n  - Compositor containers\n  - Menus\n  - Alerts\n\n- clog-web-site - Instant themed websites with plugins:\n  - clog-web-page    - create a theme based page\n  - clog-web-dbi     - database driven websites (uses clog-auth)\n  - clog-web-forms   - Instant web forms\n  - clog-web-themes  - basic themes for clog based websites\n  - clog-web-content - database driven content,tags, comments (in progress)\n  - clog-web-blog    - instant blogs (in progress)\n  - clog-web-cart    - instant shopping carts (future)\n\n- clog-panels - Quick application layouts\n\n- clog-tree - Collapsable tree control\n\n- clog-presentations - bi-directional linking of Lisp Objects and CLOG\n                       Objects\n\n- clog-jquery - DOM queries\n\n- clog-data - Move data to and from groups of controls\n  -  SQL writer helpers for basic SQL\n  -  CLOG-Database - Database control for CLOG Builder\n  -  CLOG-One-Row  - One row at a time table access auto\n                     binds to controls in CLOG Builder\n  -  CLOG-Lookup   - Version of the select control (dropdown and listbox)\n                     that are database connected\n  -  CLOG-DB-Table - Version of html table that are database connected\n\n- clog-auth - Authentication and authorization framework\n\n- clog-plugin - Custom Control Plug-in template for Builder and CLOG\n","funding_links":["https://github.com/sponsors/rabbibotton"],"categories":["Common Lisp","REPLs ##","Interfaces to other package managers"],"sub_categories":["CLOG","Isomorphic web frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabbibotton%2Fclog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frabbibotton%2Fclog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabbibotton%2Fclog/lists"}