{"id":26119456,"url":"https://github.com/mmontone/cl-forms","last_synced_at":"2026-02-22T18:37:35.145Z","repository":{"id":24257496,"uuid":"27651215","full_name":"mmontone/cl-forms","owner":"mmontone","description":"Web forms handling library for Common lisp","archived":false,"fork":false,"pushed_at":"2025-03-25T13:26:00.000Z","size":1965,"stargazers_count":44,"open_issues_count":7,"forks_count":6,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-25T13:31:42.547Z","etag":null,"topics":["common-lisp","forms","html-forms","lisp","web-form"],"latest_commit_sha":null,"homepage":"http://mmontone.github.io/cl-forms","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmontone.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":"2014-12-06T22:26:03.000Z","updated_at":"2025-02-12T17:46:11.000Z","dependencies_parsed_at":"2025-03-25T13:27:17.311Z","dependency_job_id":"35e44809-e8d8-4d12-973b-ae74fb2bf112","html_url":"https://github.com/mmontone/cl-forms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mmontone/cl-forms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmontone%2Fcl-forms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmontone%2Fcl-forms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmontone%2Fcl-forms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmontone%2Fcl-forms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmontone","download_url":"https://codeload.github.com/mmontone/cl-forms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmontone%2Fcl-forms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280782903,"owners_count":26390267,"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-24T02:00:06.418Z","response_time":73,"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","forms","html-forms","lisp","web-form"],"created_at":"2025-03-10T12:54:58.836Z","updated_at":"2025-10-24T10:32:11.010Z","avatar_url":"https://github.com/mmontone.png","language":"Common Lisp","readme":"# CL-FORMS #\n\nCL-FORMS is a web forms handling library for Common Lisp.\n\nAlthough it is potentially framework agnostic, it runs on top of Hunchentoot at the moment.\n\nIt features:\n\n* Several form field types: String, boolean, integer, email, password fields. And more.\n* Custom fields. CL-FORMS is extensible and it is possible to define new field types.\n* Server and client side validation\n* Rendering backends. Forms can be rendered via CL-WHO, or Djula, or something else; the backend is pluggable. The default renderer is CL-WHO.\n* Themes (like Bootstrap)\n* Control on rendering and layout.\n* Handling of form errors.\n* CSRF protection\n\n## Basics ##\n\nUse `defform` to define a form. Example:\n\n```lisp\n(defform fields-form (:action \"/fields-post\")\n  ((name :string :value \"\")\n   (ready :boolean :value t)\n   (sex :choice :choices (list \"Male\" \"Female\") :value \"Male\")\n   (submit :submit :label \"Create\")))\n```\n\nOn your web handler, grab the form via `find-form`, select a renderer with `with-form-renderer`and then render the form with `render-form`:\n\n```lisp\n(let ((form (forms::find-form 'fields-form)))\n   (forms:with-form-renderer :who\n      (forms:render-form form))\n```\n\nTo handle the form, grab it via `find-form` and then call `handle-request` (you should probably also call `validate-form` after). \nThen bind form fields via either `with-form-field-values`, that binds the form field values; or `with-form-fields` that binds the form fields.\n\n```lisp\n(let ((form (forms:find-form 'fields-form)))\n    (forms::handle-request form)\n    (forms::with-form-field-values (name ready sex) form\n       (who:with-html-output (forms.who::*html*)\n          (:ul\n            (:li (who:fmt \"Name: ~A\" name))\n            (:li (who:fmt \"Ready: ~A\" ready))\n            (:li (who:fmt \"Sex: ~A\" sex))))))\n```\n\nPlase have a look at the demo sources for more examples of how to use the library\n\n## DEMO ##\n\nThere's a demo included. To run:\n\n```lisp\n(require :cl-forms.demo)\n(forms.test:run-demo)\n```\n","funding_links":[],"categories":["Interfaces to other package managers"],"sub_categories":["Form handling"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmontone%2Fcl-forms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmontone%2Fcl-forms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmontone%2Fcl-forms/lists"}