{"id":13442601,"url":"https://github.com/xh4/web-toolkit","last_synced_at":"2025-03-20T14:31:38.492Z","repository":{"id":133803656,"uuid":"187932344","full_name":"xh4/web-toolkit","owner":"xh4","description":"Lisp Web Toolkit","archived":false,"fork":false,"pushed_at":"2024-07-28T14:32:49.000Z","size":10318,"stargazers_count":74,"open_issues_count":8,"forks_count":2,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-14T20:49:45.040Z","etag":null,"topics":["client","css","dom","html","http","javascript","json","lisp","parser","serializer","server","uri","web","websocket"],"latest_commit_sha":null,"homepage":"https://lisp-web-toolkit.com","language":"Common Lisp","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xh4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2019-05-22T00:17:32.000Z","updated_at":"2024-12-22T18:40:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"8e5022ff-bf6c-487d-8b36-20c9f1c61cd0","html_url":"https://github.com/xh4/web-toolkit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xh4%2Fweb-toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xh4%2Fweb-toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xh4%2Fweb-toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xh4%2Fweb-toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xh4","download_url":"https://codeload.github.com/xh4/web-toolkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244630205,"owners_count":20484336,"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","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":["client","css","dom","html","http","javascript","json","lisp","parser","serializer","server","uri","web","websocket"],"created_at":"2024-07-31T03:01:47.859Z","updated_at":"2025-03-20T14:31:36.486Z","avatar_url":"https://github.com/xh4.png","language":"Common Lisp","readme":"\u003ch2 align=\"center\"\u003eLisp Web Toolkit\u003c/h2\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://lisp-web-toolkit.com\"\u003elisp-web-toolkit.com\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nObject-Oriented Reactive Lisp Systems for Rapid Web Application Development\n\u003c/p\u003e\n\n### Status\n\n**Layer 1**: (*Work in Progress*) Rich set of features for fundamental Web-related technologies\n\nHTTP, WebSocket, URI, JSON, DOM, HTML, CSS, JavaScript\n\n**Layer 2**: (*Experimeltal*) Component abstraction and reactive behavior\n\nComponent, Live\n\n**Layer 3**: (*Planning*) Integration with enterprise-class vendor libraries\n\n[Ant Design](https://ant.design/), [Ant Vision](https://antv.vision/en), ...\n\n### Systems\n\n#### [HTTP](https://lisp-web-toolkit.com/#http)\nWT.HTTP provides HTTP functionality based on [RFC 7231 Hypertext Transfer Protocol (HTTP/1.1)](https://www.ietf.org/rfc/rfc7231.txt), together with implementation of server and client.\n\n#### [WebSocket](https://lisp-web-toolkit.com/#websocket)\nWT.WEBSOCKET provides WebSocket functionality based on [RFC 6455 The WebSocket Protocol](https://tools.ietf.org/html/rfc6455), with interface inspired by [JSR 356, Java API for WebSocket](https://www.oracle.com/technetwork/articles/java/jsr356-1937161.html). The system is tested against the [Autobahn WebSocket Testsuite](https://github.com/crossbario/autobahn-testsuite).\n\n#### [HTML](https://lisp-web-toolkit.com/#html)\nWT.HTML implements HTML constructor, parser and serializer. The parser is designed to conform to the [WHATWG HTML Specification](https://html.spec.whatwg.org/multipage/), as is implemented by all major web browsers. It uses the Document Object Model (DOM) provided by WT.DOM.\n\n#### [JSON](https://lisp-web-toolkit.com/#json)\nWT.JSON implements JSON encoder and decoder based on [ECMA-404 The JSON Data Interchange Standard](https://www.json.org/json-en.html). It distinguishes `null`, `false` and `[]` from Lisp's `NIL` thus supports identical transformation between JSON values. It provides object constructor and accessor to build and access nesting JSON objects. The system is tested against [JSONTestSuite](https://github.com/nst/JSONTestSuite).\n\n#### [URI](https://lisp-web-toolkit.com/#uri)\nWT.URI provides URI parser, render and constructor with support for UTF-8 characters, IPv6 addresses and query parameters handling. It utilizes recursive descent [parser combinators](https://www.cs.nott.ac.uk/~pszgmh/monparsing.pdf) to provide a concise implementation that is close to the definition in [RFC 3986 Uniform Resource Identifier (URI): Generic Syntax](https://tools.ietf.org/html/rfc3986).\n\n#### [CSS](https://lisp-web-toolkit.com/#css)\nWT.CSS implements CSS constructor, parser and serializer based on specifications introduced in [CSS Snapshot 2018](https://www.w3.org/TR/css-2018/#css).\n\n#### [JavaScript](https://lisp-web-toolkit.com/#javascript)\nWT.JAVASCRIPT implements JavaScript parser and serializer based on [ECMAScript 2016 Language Specification](https://www.ecma-international.org/ecma-262/7.0/) (ECMA-262 7th Edition) with support for [JSX](https://reactjs.org/docs/introducing-jsx.html) syntax extension. It utilizes syntax tree components from the [ESTree](https://github.com/estree/estree) project.\n\n#### [DOM](https://lisp-web-toolkit.com/#dom)\nWT.DOM implements Document Object Model (DOM) based on recent version of [DOM Living Standard](https://dom.spec.whatwg.org/), it covers chapters on [Nodes](https://dom.spec.whatwg.org/#nodes) and [Traversal](https://dom.spec.whatwg.org/#traversal).\n\n#### [Component](https://lisp-web-toolkit.com/#component)\nWT.COMPONENT provices component abstraction, it combines [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) style strong encapsulation and [React](https://reactjs.org/) style declarative DOM synchronization.\n\n### Roadmap\n\n* Overall\n  * Use in production environments\n  * Write [documentation](https://lisp-web-toolkit.com)\n  * Carefully design conditions and errors\n  * Write more tests\n  * \u003cs\u003eAdd project build status graph\u003c/s\u003e\n  * Add code coverage informataion\n* HTTP\n  * Use [Asynchronous I/O](http://www.lispworks.com/documentation/lw71/LW/html/lw-192.htm) in LispWorks\n  * Use [Recursive Event Dispatching (SERVE-EVENT)](https://github.com/sbcl/sbcl/blob/master/src/code/serve-event.lisp) in SBCL \n  * Abandon usocket \u0026 bordeaux-threads, write implementation-dependent code\n  * Implement server statistics and metrics monitoring\n  * Implement traffic throttling and message size limiting\n  * Implement authentication, authorization and access control\n  * Implement static file serving\n  * Implement cache control\n  * Implement compression\n  * Implement logging\n  * Implement [HTTP/2](https://tools.ietf.org/html/rfc7540)\n  * Implement common handlers\n  * Implement virtual host\n  * \u003cs\u003e(Client) Support HTTPS\u003c/s\u003e\n  * (Client) Support compression and decompression\n  * (Client) Support HTTP Proxy\n  * (Client) Support SOCKS Proxy\n  * (Client) Support Basic Auth\n  * (Client) Implement Cookie store\n  * (Client) Support caching\n* WebSocket\n  * Use [Asynchronous I/O](http://www.lispworks.com/documentation/lw71/LW/html/lw-192.htm) in LispWorks\n  * Use [Recursive Event Dispatching (SERVE-EVENT)](https://github.com/sbcl/sbcl/blob/master/src/code/serve-event.lisp) in SBCL\n  * Implement server statistics and metrics monitoring\n  * Implement traffic throttling and message size limiting\n  * Support [Compression Extensions](https://tools.ietf.org/html/rfc7692)\n  * Support WSS for both client and server\n* URI\n  * Test against [Web Platform Tests](https://github.com/web-platform-tests/wpt)\n* HTML\n  * \u003cs\u003eImplement parser\u003c/s\u003e\n  * \u003cs\u003eImplement pretty print(?) (NO)\u003c/s\u003e\n  * Refine element constractor error report\n  * \u003cs\u003eImplement DOM, abandon CXML's DOM implementation\u003c/s\u003e\n  * Test against [Web Platform Tests](https://github.com/web-platform-tests/wpt)\n* JSON\n  * \u003cs\u003eTest against [JSONTestSuite](https://github.com/nst/JSONTestSuite)\u003c/s\u003e\n  * \u003cs\u003eImplement accessors for object\u003c/s\u003e\n  * \u003cs\u003eImplement identical transformation for JSON values (null, false, [])\u003c/s\u003e\n* DOM\n  * Implement common used functions\n  * Implement namespace\n  * Implement XPath\n* JavaScript\n  * Implement JavaScript \u003c=\u003e S-expression code transformer\n* CSS\n  * Parse common used property values and implement CSSOM\n\n### Author\n[Xiangyu He](https://xh.coobii.com) \u003c[xh@coobii.com](mailto:xh@coobii.com)\u003e\n\n### License\nCopyright 2018-2020 Xiangyu He. Released under the 3-Clause BSD License.\n","funding_links":[],"categories":["Common Lisp"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxh4%2Fweb-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxh4%2Fweb-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxh4%2Fweb-toolkit/lists"}