v1.0 Taking Flight
With this release, Crow is production ready. I'm amazed and thankful for how far this project has come and I would like to thank everyone who contributed their time, skills, and money to move this project forward.
A special thanks to Crow's newest member, @luca-schlecker. Without his work, much of this release wouldn't be possible.
Packages / Dependencies
- Proper CMake support (Crow is now a CMake target (library) as opposed to just using CMake to compile examples/tests). #228 #209 #218 #241
- Change Crow CMake dependencies based on downstream project requirements. @Leon0402 #231
- CMake install support. #228 #209 #218
- Crow can now be compiled using C++20. @Leon0402 #265
- Automated release process via release script. #162 #205 #228 #252
- CMake uninstall support. @navidcity #305
- Fixed local VCPKG manifest version. #207
- Fixed
vcpkg.json
to work on linux. @Borwe #330 - Added Crow license to
crow_all.h
. #165
Framework
Feature
Allowed multiple source files for projects using Crow without the need for#define CROW_MAIN
. #280 #186 @danielytics #192 @nekoffski #354Feature
Added a type of middleware that runs per route rather than globally. @dranikpg #327Feature
Replaceddumb_timer_queue
with newtask_timer
. #278Feature
Replaced the round robin approach to assigning connections to threads to a load balancing system. @belugum #289Feature
Improved and optimize filename sanitization function. @neumannt #321Feature
Added Middleware to handle CORS rules. @dranikpg #348Bug
fixed issue where absolute unix paths were not sanitized. #334Feature
Added function to run the Crow app asynchronously. #359Feature
Added unsafe file loading functions. @zefrenchy #339Feature
Added Base64 decoder. #260 @neumannt #324Feature
Added function to get the port Crow is using. @nx10 #276Bug
Worked around GCC 8.3 bug that prevented Crow from compiling. @nx10 @CircuitCoder #287Feature
Updated Crow's thread count process to reflect the actual number of threads being used. #307
Websockets
Bug
Fixed Issue where Crow assumes a single masked message means all other messages are masked as well. #282Feature
Enforce Websocket protocol (opt-in). #282Feature
Added functionality to get the remote IP address connected to the Websocket. #263
HTTP
Feature
Implemented Blueprints for project organization (similar to Flask's Blueprints). #181 #205 #208 #242Feature
Upgraded, better integrated, and optimized the HTTP Parser Crow uses. #294 @navidcity #303 #349 @nekoffski #354 #371Feature
Re-implemented the Trie crow uses to match rules with URLs. #166Bug
Fixed problem where streaming a response would abruptly close the connection. #332Feature
Crow now uses an enum for HTTP status codes (200
orstatus::OK
can be used). #230Feature
Added several HTTP status codes. @Zhavok92 #227 @kingster #367Bug
Fixed issue where enabling SSL but not using it caused incorrect redirects. #281Feature
Added app option to set threshold beyond which Crow streams a response. #245Feature
Catch-all Routes now have receive the error code in theirresponse
object. #205Bug
API Breaking
Modified Parser to only allowGET
method on HTTP/0.9. #262Bug
Fixed problem where static file info wasn't being cleared if no file was found. #338Feature
Added Automatic UTF-8 support through a middleware. #202Feature
Added content type constructor forresponse
. @hg333 #212Bug
ReplacedHTTPMethod::GET
withHTTPMethod::Get
inrouting.h
. @d35ha #191Feature
Recognized cleartext and SSL versions of HTTP/2 upgrade header. #332API Breaking
Fixed incorrect styling in forremote_ip_address
. @himanshu007-creator #200
Multipart
Feature
API Breaking
Part headers are now in a map rather than a vector. #358Feature
Added function to get a part by name. #358Bug
Fixed a problem where Crow failed to parse a multipart request made using .NetHttpClient
. #332Feature
API Breaking
Added a boundary to the default content-type (gets set to the request's boundary if constructed from a request). #358Feature
Parts and headers can be cast to integer or double. #358
Mustache
Feature
Added support for C++ lambdas in Mustache. #299Feature
API Breaking
Added function to set a templates directory. #362Bug
Fixed missing;
in mustache escaping. #342Feature
API Breaking
returningpage.render()
from a route now setsContent-Type
header to HTML. #346Bug
Ensured const correctness in template_t. @neumannt #325
JSON
Feature
JSON values can now be initialized using initializer lists. @lcsdavid #190 #203 #242Bug
Fixed problem where JSON would outputnan
orinf
values. @Vhuynh25 @rremigius #328Bug
Fixed problem with excess recursion when reading JSON. @neumannt #326Bug
Made JSON float output faster and more accurate. #203
Logging
Feature
API Breaking
Simplified creating a custom logger. #288 #290Feature
Added Support for using local time in default logger. @kingster #368
Documentation
- Added Landing Page. #197 #201 #228
- Updated Site theme. #197 #228
- Placed financial and code contributors on landing page. #228 #311 #373
- Updated install documentation and separated instructions for different OSes. #228 #238 #293
- Added Social media cards. #197 #203 #270
- Added donate button to site header. #197
- Added indicator for features introduced after
v0.1
. #197 - Added HTTP Authentication tutorial. #293
- Updated documentation to mention new features. #203 #228 #372
- Made API reference more readable by removing parts only intended for internal use. #372
- Improved visibility on readme gitter badge. #228
- Fixed several typos. #297
- Used proper markdown syntax in documentation. #270
CI/CD
- Fixed issue where cpp-coveralls wasn't compatible with newer GCOV versions. #228
- Fixed issue where PR coverage would affect
master
coverage results. #228 - Fixed coveralls branch. #198
- Removed pip3 command from PR workflow. #270
Testing / Examples
- Examples can now compile on Windows. #209
- Tests can now compile without
CROW_ENABLE_COMPRESSION
being defined. #209 - Added Tests for HTTPS (SSL) version of Crow. #228 #130
Bug
Fixed issue where the response stream test would randomly fail. #234- Tests now use Debug build (debug flags + without optimization). #228
- Added unit test for server timeout. #277
- Updated catch2 to v2.13.8. @neumannt #322
- Added tests for content type constructor for
response
. @hg333 #213 - Updated examples and tests to include JSON initializer lists. #190 #203
- Fixed typo in
example_with_all.cpp
. @odeits #161