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.jsonto work on linux. @Borwe #330 - Added Crow license to
crow_all.h. #165
Framework
FeatureAllowed multiple source files for projects using Crow without the need for#define CROW_MAIN. #280 #186 @danielytics #192 @nekoffski #354FeatureAdded a type of middleware that runs per route rather than globally. @dranikpg #327FeatureReplaceddumb_timer_queuewith newtask_timer. #278FeatureReplaced the round robin approach to assigning connections to threads to a load balancing system. @belugum #289FeatureImproved and optimize filename sanitization function. @neumannt #321FeatureAdded Middleware to handle CORS rules. @dranikpg #348Bugfixed issue where absolute unix paths were not sanitized. #334FeatureAdded function to run the Crow app asynchronously. #359FeatureAdded unsafe file loading functions. @zefrenchy #339FeatureAdded Base64 decoder. #260 @neumannt #324FeatureAdded function to get the port Crow is using. @nx10 #276BugWorked around GCC 8.3 bug that prevented Crow from compiling. @nx10 @CircuitCoder #287FeatureUpdated Crow's thread count process to reflect the actual number of threads being used. #307
Websockets
BugFixed Issue where Crow assumes a single masked message means all other messages are masked as well. #282FeatureEnforce Websocket protocol (opt-in). #282FeatureAdded functionality to get the remote IP address connected to the Websocket. #263
HTTP
FeatureImplemented Blueprints for project organization (similar to Flask's Blueprints). #181 #205 #208 #242FeatureUpgraded, better integrated, and optimized the HTTP Parser Crow uses. #294 @navidcity #303 #349 @nekoffski #354 #371FeatureRe-implemented the Trie crow uses to match rules with URLs. #166BugFixed problem where streaming a response would abruptly close the connection. #332FeatureCrow now uses an enum for HTTP status codes (200orstatus::OKcan be used). #230FeatureAdded several HTTP status codes. @Zhavok92 #227 @kingster #367BugFixed issue where enabling SSL but not using it caused incorrect redirects. #281FeatureAdded app option to set threshold beyond which Crow streams a response. #245FeatureCatch-all Routes now have receive the error code in theirresponseobject. #205BugAPI BreakingModified Parser to only allowGETmethod on HTTP/0.9. #262BugFixed problem where static file info wasn't being cleared if no file was found. #338FeatureAdded Automatic UTF-8 support through a middleware. #202FeatureAdded content type constructor forresponse. @hg333 #212BugReplacedHTTPMethod::GETwithHTTPMethod::Getinrouting.h. @d35ha #191FeatureRecognized cleartext and SSL versions of HTTP/2 upgrade header. #332API BreakingFixed incorrect styling in forremote_ip_address. @himanshu007-creator #200
Multipart
FeatureAPI BreakingPart headers are now in a map rather than a vector. #358FeatureAdded function to get a part by name. #358BugFixed a problem where Crow failed to parse a multipart request made using .NetHttpClient. #332FeatureAPI BreakingAdded a boundary to the default content-type (gets set to the request's boundary if constructed from a request). #358FeatureParts and headers can be cast to integer or double. #358
Mustache
FeatureAdded support for C++ lambdas in Mustache. #299FeatureAPI BreakingAdded function to set a templates directory. #362BugFixed missing;in mustache escaping. #342FeatureAPI Breakingreturningpage.render()from a route now setsContent-Typeheader to HTML. #346BugEnsured const correctness in template_t. @neumannt #325
JSON
FeatureJSON values can now be initialized using initializer lists. @lcsdavid #190 #203 #242BugFixed problem where JSON would outputnanorinfvalues. @Vhuynh25 @rremigius #328BugFixed problem with excess recursion when reading JSON. @neumannt #326BugMade JSON float output faster and more accurate. #203
Logging
FeatureAPI BreakingSimplified creating a custom logger. #288 #290FeatureAdded 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
mastercoverage 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_COMPRESSIONbeing defined. #209 - Added Tests for HTTPS (SSL) version of Crow. #228 #130
BugFixed 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