{"id":19904576,"url":"https://github.com/risoflora/brookframework","last_synced_at":"2026-01-28T15:30:41.175Z","repository":{"id":47194763,"uuid":"166061544","full_name":"risoflora/brookframework","owner":"risoflora","description":"Microframework which helps to develop web Pascal applications.","archived":false,"fork":false,"pushed_at":"2026-01-18T04:00:16.000Z","size":832,"stargazers_count":265,"open_issues_count":5,"forks_count":58,"subscribers_count":27,"default_branch":"main","last_synced_at":"2026-01-18T15:33:12.220Z","etag":null,"topics":["delphi","embedded","freepascal","gzip","http","iot","lazarus","pcre","rest","tls"],"latest_commit_sha":null,"homepage":"https://risoflora.github.io/brookframework","language":"Pascal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/risoflora.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"silvioprog"}},"created_at":"2019-01-16T15:17:52.000Z","updated_at":"2026-01-18T04:00:25.000Z","dependencies_parsed_at":"2024-01-09T01:01:24.537Z","dependency_job_id":"0f02eaa9-5608-469d-b02b-51b60c670237","html_url":"https://github.com/risoflora/brookframework","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/risoflora/brookframework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risoflora%2Fbrookframework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risoflora%2Fbrookframework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risoflora%2Fbrookframework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risoflora%2Fbrookframework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/risoflora","download_url":"https://codeload.github.com/risoflora/brookframework/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/risoflora%2Fbrookframework/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846337,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["delphi","embedded","freepascal","gzip","http","iot","lazarus","pcre","rest","tls"],"created_at":"2024-11-12T20:28:57.118Z","updated_at":"2026-01-28T15:30:41.170Z","avatar_url":"https://github.com/risoflora.png","language":"Pascal","readme":"# `Brook framework`\n\n[![Support this project via PayPal][paypal-badge]][1]\n[![GitHub releases][releases-badge]][22]\n[![License: LGPL v2.1][license-badge]](LICENSE)\n\n## Overview\n\nBrook is a cross-platform microframework which helps to develop web Pascal\napplications built by [Delphi][5] or [Lazarus IDE and Free Pascal][6].\nIts core has been developed using the [Sagui library][7], that's why it is so\nfast, compact and useful to run on embedded systems.\n\n## Features\n\n- **Three threading modes:**\n  - Event-driven - single-thread + polling.\n  - Threaded - one thread per request.\n  - Polling - pre-allocated threads.\n  - Isolated request - request processed outside main thread.\n- **Fast path routing that supports:**\n  - Regular expression with [JIT][8] optimization.\n  - [Binary search][9] for path entry-points.\n- **HTTP compression:**\n  - [Deflate][10] - for static strings and streaming.\n  - [Gzip][11] - for file compression.\n- **HTTP cookies:**\n  - Providing classes which handles server side cookies.\n- **HTTPS support:**\n  - Data encryption through [GnuTLS][12] library.\n- **Dual stack:**\n  - IPv4 and IPv6 on top of a single socket.\n- **Basic authentication:**\n  - For standard login using username and password.\n- **Upload/download:**\n  - Static body and payload.\n  - Content streaming for real-time applications.\n  - Small and large files transferring.\n- **Mathematical expression evaluator:**\n  - Arithmetic, bitwise and logical operators.\n  - Variables allocation at build and/or run time.\n  - Macro support to define functions at run time.\n  - Extendable with custom functions.\n  - Error handling with error kind and position.\n- **Media types:**\n  - Resolving media types ([MIME][13]) in any supported platform.\n- **Logging:**\n  - Allowing to generate logs in console or files.\n- **String buffer:**\n  - For fast operations involving strings.\n- **String map:**\n  - Hashed lists for key-value mapping.\n- **And more:**\n  - Discover more features by playing with our examples.\n\n## Examples\n\nThe example below shows a minimal `hello world` HTTP server:\n\n```delphi\ntype\n  THTTPServer = class(TBrookHTTPServer)\n  protected\n    procedure DoRequest(ASender: TObject; ARequest: TBrookHTTPRequest;\n      AResponse: TBrookHTTPResponse); override;\n  end;\n\nprocedure THTTPServer.DoRequest(ASender: TObject; ARequest: TBrookHTTPRequest;\n  AResponse: TBrookHTTPResponse);\nbegin\n  AResponse.Send('Hello world', 'text/plain', 200);\nend;\n\nbegin\n  with THTTPServer.Create(nil) do\n  try\n    Port := 8080;\n    Open;\n    if not Active then\n      Exit;\n    WriteLn('Server running at http://localhost:', Port);\n    ReadLn;\n  finally\n    Free;\n  end;\nend.\n```\n\nThere are other examples available in the [`Examples`](Examples) directory.\n\n## Downloading\n\nAll stable releases are available to download via [GetIt][20], [OPM][21] and\nGitHub [releases page][22].\n\nWe strongly recommend you to install Brook using GetIt or OPM, however, if you\nwant to download the very latest source from the Git repository, do this:\n\n```bash\ngit clone https://github.com/risoflora/brookframework.git\n```\n\nIt will create a directory named `brookframework` filled with the source code.\n\n## Documentation\n\nThe documentation has been written in [PasDoc][15] and is available in HTML\nformat at [brookframework-docs][16].\n\nSome tutorials are available at [Tutorials for the Brook framework][29].\n\n## Targets\n\nSuccessfully tested on:\n\n- Windows\n- Linux\n- Raspbian/Android\n\ncompiled using:\n\n- Delphi XE family (Rio)\n- Lazarus / Free Pascal (Lazarus 2.0+ / FPC 3.2+)\n\n## Versioning\n\nStarting from the version 1.0.0, Brook follows the [SemVer][14] rules regarding\nAPI changes with backwards compatibility across major releases.\n\n## Contributing\n\nBrook framework is totally open source and would not be possible without our\n[contributors][17]. If you want to submit contributions, please fork the project\non GitHub and send a pull request. You retain the copyright on your\ncontributions.\n\n## Donations\n\nMany open source projects, large and small, receive donations to encourage their\nauthors, therefore, it would be not different in Brook.\n\nAll money collected from donations are invested to the purchase of study\nmaterials. This way, directly or indirectly, all knowledge acquired in the\nstudies influence the spread of this project.\n\nIf you want to support this project, please choose one\nof the options below to make a donation.\n\n[![Support this project via PayPal][paypal-gif]][1] [![Support this project via PagSeguro][pagseguro-gif]][2]\n\n(For those who would like to donate in Brazilian BRL, it can be done by a\n[identified bank deposit][3] or via [PayPal Brazil][4].)\n\nCheck the list of [all donors](DONORS) that lovely supported this idea! :heart:\n\n## Community\n\nWould you like to ask questions and talk to more Brook users?\n\nJoin us to the [official group at Telegram][19] and be welcome!\n:slightly_smiling_face:\n\n## Support\n\nThis project values being simple, direct and self-explanatory. However, if you\nneed some help to integrate Brook to your application, we have the option of a\npaid consulting service. [Contact us][18]!\n\n## Projects using Brook\n\n- [Brook Telegram][25] - Telegram plugin for Brook framework. [[MIT][26]]\n- [Aproveita.App][27] - [PWA][24] application for supermarket products\n  sales. [Comercial]\n- [Client Web Portal][28] - Application to manage appointments,\n  update demographics, download previous invoices from the RUBI medical records\n  system. [Commercial]\n\nWould you like to add your project to that list above? Feel free to open a\n[new issue][23] requesting it! :-)\n\n## Licensing\n\nBrook framework is released under GNU Lesser General Public License v2.1. Check\nthe [LICENSE file](LICENSE) for more details.\n\n[license-badge]: https://img.shields.io/badge/License-LGPL%20v2.1-lemmon.svg\n[paypal-badge]: https://img.shields.io/badge/donate-paypal-brightgreen\n[paypal-gif]: https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif\n[pagseguro-gif]: https://stc.pagseguro.uol.com.br/public/img/botoes/doacoes/120x53-doar.gif\n[releases-badge]: https://img.shields.io/github/v/release/risoflora/brookframework?color=lemmon\n[1]: https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=silvioprog%40gmail%2ecom\u0026lc=US\u0026item_name=brookframework\u0026item_number=brookframework\u0026currency_code=USD\u0026bn=PP%2dDonationsBF%3aproject%2dsupport%2ejpg%3aNonHosted \"PayPal link\"\n[2]: https://pag.ae/7WgS8EENR \"PagSeguro link\"\n[3]: https://drive.google.com/file/d/1CQWoDVLnepbs29enY5CylAw_omNvit5M/view?usp=sharing \"Nubank link\"\n[4]: https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=GE9VT768TLP74\u0026item_name=brookframework\u0026currency_code=BRL\u0026source=url\n[5]: https://en.wikipedia.org/wiki/Delphi_(software) \"Delphi software\"\n[6]: https://en.wikipedia.org/wiki/Lazarus_(IDE) \"Lazarus \u0026 Free Pascal\"\n[7]: https://risoflora.github.io/libsagui \"Sagui library\"\n[8]: https://www.pcre.org/current/doc/html/pcre2jit.html \"PCRE2 JIT\"\n[9]: https://en.wikipedia.org/wiki/Binary_search_algorithm \"Binary search algorithm\"\n[10]: https://en.wikipedia.org/wiki/DEFLATE \"DEFLATE compression\"\n[11]: https://en.wikipedia.org/wiki/Gzip \"Gzip compression\"\n[12]: https://www.gnutls.org \"GnuTLS library\"\n[13]: https://en.wikipedia.org/wiki/MIME \"Multipurpose Internet Mail Extensions\"\n[14]: https://semver.org \"Semantic Versioning\"\n[15]: https://github.com/pasdoc/pasdoc \"PasDoc documentation tool\"\n[16]: https://risoflora.github.io/brookframework-docs/index.html \"Brook online documentation\"\n[17]: https://github.com/risoflora/brookframework/blob/master/THANKS \"Thanks to the people who help to maintain this project\"\n[18]: mailto:silvioprog@gmail.com \"silvioprog at gmail dot com\"\n[19]: https://t.me/brookframework \"Official Telegram group\"\n[20]: https://getitnow.embarcadero.com/brook-framework \"Delphi GetIt\"\n[21]: https://wiki.lazarus.freepascal.org/Online_Package_Manager \"Lazarus OPM\"\n[22]: https://github.com/risoflora/brookframework/releases\n[23]: https://github.com/risoflora/brookframework/issues/new?labels=documentation\u0026template=project_using_brook.md\n[24]: https://en.wikipedia.org/wiki/Progressive_web_application \"Progressive web application wiki\"\n[25]: https://github.com/Al-Muhandis/brook-telegram \"Telegram plugin for Brook framework\"\n[26]: https://github.com/Al-Muhandis/brook-telegram/blob/master/LICENSE \"Telegram plugin license\"\n[27]: https://supermercadosprimavera.com.br \"PWA application for supermarket products sales\"\n[28]: https://github.com/risoflora/brookframework/issues/29\n[29]: https://github.com/DomenicoMammola/brookframework_tutorials\n","funding_links":["https://github.com/sponsors/silvioprog","https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=silvioprog%40gmail%2ecom\u0026lc=US\u0026item_name=brookframework\u0026item_number=brookframework\u0026currency_code=USD\u0026bn=PP%2dDonationsBF%3aproject%2dsupport%2ejpg%3aNonHosted","https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=GE9VT768TLP74\u0026item_name=brookframework\u0026currency_code=BRL\u0026source=url"],"categories":["Pascal","Network"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frisoflora%2Fbrookframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frisoflora%2Fbrookframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frisoflora%2Fbrookframework/lists"}