All Versions
32
Latest Version
Avg Release Cycle
92 days
Latest Release
555 days ago

Changelog History
Page 2

  • v0.25.1 Changes

    November 05, 2018
    • ๐Ÿ›  Fix params.files memoization #503. Thanks @mamantoha ๐Ÿ™
  • v0.25.0 Changes

    November 04, 2018

    ๐Ÿ‘ Crystal 0.27.0 support.

    [breaking change] Added back env.params.files.

    Here's a fully working sample for reading a image file upload image1 and saving it under public/uploads.

    post "/upload" do |env| file = env.params.files["image1"].tmpfile file\_path = ::File.join [Kemal.config.public\_folder, "uploads/", file.filename]File.open(file\_path, "w") do |f| IO.copy(file, f)end"Upload ok"end
    

    โœ… To test

    curl -F "image1=@/Users/serdar/Downloads/kemal.png" http://localhost:3000/upload

    • ๐ŸŽ Cache HTTP routes to increase performance ๐Ÿš€ #493
  • v0.24.0 Changes

    August 14, 2018

    ๐Ÿ‘ Crystal 0.26.0 support

    [breaking change] Removed env.params.files. You can use Crystal's built-in HTTP::FormData.parse instead

    post "/upload" do |env| HTTP::FormData.parse(env.request) do |upload| filename = file.filename if !filename.is\_a?(String) "No filename included in upload"else file\_path = ::File.join [Kemal.config.public\_folder, "uploads/", filename] File.open(file\_path, "w") do |f| IO.copy(file.tmpfile, f) end"Upload OK"endend
    
    • [breaking change] From now on to access dynamic url params in a WebSocket route you have to use:

      ws "/:id" do |socket, context| id = context.ws_route_lookup.params["id"]end

    [breaking change] Removed _method magic param.

    โž• Added new exception page #466. Thanks @mamantoha ๐Ÿ™

    ๐Ÿ‘Œ Support custom port binding. Thanks @straight-shoota ๐Ÿ™

    Kemal.run do |config| server = config.server.not\_nil! server.bind\_tcp "127.0.0.1", 3000, reuse\_port: true server.bind\_tcp "0.0.0.0", 3001, reuse\_port: trueend
    
  • v0.23.0 Changes

    June 17, 2018
    • ๐Ÿฑ Crystal 0.25.0 support ๐ŸŽ‰
    • โž• Add Kemal::Context.get? to safely access context storage ๐Ÿ˜Ž
    • ๐Ÿ”’ [Security] Don't serve 404 image dynamically ๐Ÿ‘
    • ๐Ÿฑ Disable X-Powered-By header #449. Thanks @Blacksmoke16 ๐Ÿ™
  • v0.22.0 Changes

    December 29, 2017
    • ๐Ÿฑ Crystal 0.24.1 support ๐ŸŽ‰
    • ๐Ÿฑ Only return string from route.#408 thanks @crisward ๐Ÿ™
    • ๐Ÿš€ Don't crash on empty path when compiled in --release. #407 thanks @crisward ๐Ÿ™
    • ๐Ÿ“‡ Rename Kemal::CommonLogHandler to Kemal::LogHandler and Kemal::CommonExceptionHandler to Kemal::ExceptionHandler.
    • ๐Ÿ‘ Allow videos to be opened with correct mime type. #406 thanks @crisward ๐Ÿ™
    • โž• Add webm mime type.#413 thanks @reindeer-cafe ๐Ÿ™
  • v0.21.0 Changes

    September 05, 2017
    • ๐Ÿฑ Dynamically insert handlers ๐Ÿ’ช Fixes #376.
    • โž• Add context to WebSocket. This allows one to use HTTP::Server::Context in ws declarations ๐Ÿ˜ Fixes #349.

      ws "/:room_name" do |socket, env| env.params.url["room_name"]end

    • โž• Add support for customizing the headers of built-in Kemal::StaticFileHandler ๐Ÿ”จ Useful for supporting CORS for single page applications ๐Ÿ‘

      static_headers do |response, filepath, filestat| if filepath =~ /.html$/ response.headers.add("Access-Control-Allow-Origin", "*") end response.headers.add("Content-Size", filestat.size.to_s) endend

    ๐Ÿ‘ Allow %w in Handler macros #385. Thanks @will ๐Ÿ™

    ๐Ÿ”’ Security: X-Content-Type-Options: nosniff for static files. Fixes #379. Thanks @crisward ๐Ÿ™

    ๐ŸŽ Performance: Remove tempfile management to OS. This brings %10 - 15 performance boost to Kemal ๐Ÿš€

  • v0.20.0 Changes

    July 01, 2017
    • ๐Ÿš€ Crystal 0.23.0 support! As always, Kemal is compatible with the latest major release of Crystal ๐Ÿ’Ž
    • Great news everyone ๐ŸŽ‰ All handlers are now completely _ customizable _!. Use the default Kemal handlers or go wild, it's all up to you โ›

      Don't forget to add Kemal::RouteHandler::INSTANCE or your routes won't work!Kemal.config.handlers = [Kemal::InitHandler.new, YourHandler.new, Kemal::RouteHandler::INSTANCE]

    You can also insert a handler into a specific position.

    # This adds MyCustomHandler instance to 1 position. Be aware that the index starts from 0.add\_handler MyCustomHandler.new, 1
    
    • โšก๏ธ Updated Kilt to v0.4.0.
    • ๐ŸŽ Make Route a Struct. This improves the performance of route declarations.
  • v0.19.0 Changes

    May 09, 2017
    • ๐Ÿ›  Return no body for head route fixes #323. (thanks @crisward)
    • โšก๏ธ Update radix to 0.3.8. (thanks @waghanza)
    • User defined context store types. (thanks @neovitange)
    class User
       property name
    end
    
    add_context_storage_type(User)
    
    • Prevent `send_file returning filesize. (thanks @crisward)
    • Dont call setup in config#add_filter_handler fixes #338.
  • v0.18.3 Changes

    March 07, 2017
    • โœ‚ Remove Gzip::Header monkey patch since it's fixed in Crystal 0.21.1.
  • v0.18.2 Changes

    February 24, 2017