vibe.d beta banner
get vibe.d

Asynchronous I/O that doesn’t get in your way, written in D

vibe.d 0.7.30 release

vibe.d 0.7.30 release

Header image
Mon, 31 Oct 2016Following the latest DMD release, this version adds build support for DMD 2.072.0. A new authorization framework for the web interface generator has been implemented, the new diet-ng module can be used as a modern and improved replacement for the existing Diet template compiler, and as usual, a bunch of minor and major improvements and bug fixes is included.

Features and improvements

  • General changes
  • Compiles on DMD 2.068.2 up to 2.072.0
  • Added runApplication as a single API entry point to properly initialize and run a vibe.d application (this will serve as the basis for slowly fading out
  • Started using an SDLang based DUB package recipe (upgrade to DUB 1.0.0 if you haven't already)
  • Defining both, VibeDefaultMain and VibeCustomMain, results in a compile-time error to help uncover hidden build issues (by John Colvin) - pull #1551
  • Web/REST interface generator
  • Added vibe.web.auth as a generic way to express authorization rules and to provide a common hook for authentication
  • Added @noRoute attribute for registerWebInterface to keep methods from generating a HTTP endpoint
  • Added @nestedNameStyle to choose between the classical underscore mapping and D style mapping for form parameter names in registerWebInterface
  • Serialization framework
  • All hooks now get a traits struct that carries additional information, such as user defined attributes - note that this is a breaking change for any serializer implementation! - pull #1542
  • Added beginWriteDocument and endWriteDocument hooks - pull #1542
  • Added (begin/end)WriteDictionaryEntry and (begin/end)WriteArrayEntry hooks - pull #1542
  • Exposed publicly
  • HTTP server
  • Added HTTPServerSettings.accessLogger to enable using custom logger implementations
  • Added support for the "X-Forwarded-Port" header used by reverse proxies (by Mihail-K) - issue #1409, pull #1491
  • Added an overload of HTTPServerResponse.writeJsonBody that doesn't set the response status (by Irenej Marc) - pull #1488
  • Can now use the new diet-ng package in render()
  • To force using it on existing projects, simply add "diet-ng" as a dependency
  • "diet-ng" is an optional dependency of vibe.d that is chosen by default - to avoid that, remove the "diet-ng" entry from dub.selections.json.
  • Related issues issue #1554, issue #1555
  • Added partial Unix client socket support, HTTP client support in particular (use http+unix://...) (by Sebastian Koppe) - pull #1547
  • Removed Json.opDispatch and Bson.opDispatch
  • Added Bson.remove to remove elements from a BSON object - issue #345 the use of VibeDefaultMain)
  • Added support for tables in the Markdown compiler - issue #1493
  • Added MongoCollection.distinct()
  • The std.concurrency integration code now let's the behavior of spawn() be configurable, defaulting now to runWorkerTask instead of the previous runTask
  • Using VibeNoSSL now also disables Botan support in addition to OpenSSL (by Martin Nowak) - pull #1444
  • Use a minimum protocol version of TLS 1.0 for Botan, fixes compilation on Botan 1.12.6 (by Tomáš Chaloupka) - pull #1553
  • Some more URLRouter memory/performance optimization
  • Corrected the naming convention of vibe.db.mongo.flags.IndexFlags - issue #1571
  • Added connectRedisDB, taking a Redis database URL
  • FileDescriptorEvent.wait() now returns which triggers have fired (by Jack Applegame) - [pull #1586][issue1586]

Bug fixes

  • Fixed a compile error that happened when using the JavaScript REST interface generator for sub interfaces - issue #1506
  • Fixed protocol violations in the WebSocket module (by Mathias Lang) - pull #1508, pull #1511
  • The HTTP client now correctly appends the port in the "Host" header - issue #1507, pull #1510
  • Fixed a possible null pointer error in HTTPServerResponse.switchProtocol - issue #1502
  • Fixed parsing of indented Markdown code blocks (empty lines don't interrupt the block anymore) - issue #1527
  • Fixed open TCP connections being left alive by download() (by Steven Dwy) - pull #1532
  • Fixed the error message for invalid types in Json.get (by Charles Thibaut) - pull #1537
  • Fixed the HTTP status code for invalid JSON in the REST interface generator (bad request instead of internal server error) (by Jacob Carlborg) - pull #1538
  • Fixed yielded task execution in case no explicit event loop is used
  • Fixed a memory hog/leak in the libasync driver (by Martin Nowak) - pull #1543
  • Fixed the JSON module to output NaN as null instead of undefined (by John Colvin) - pull #1548, issue #1442, issue #958
  • Fixed a possible deadlock in LocalTaskSemaphore (by Etienne Cimon) - pull #1563
  • Fixed URL generation for paths with placeholders in the JavaScript REST client generator - issue #1564
  • Fixed code generation errors in the JavaScript REST client generator and added JSRestClientSettings (by Oleg B. aka deviator) - pull #1566
  • Fixed a bug in FixedRingBuffer.removeAt which potentially affected the task scheduler (by Tomáš Chaloupka) - pull #1572
  • Fixed validateEmail to properly use isEmail (which used to be broken) (by Stanislav Blinov aka radcapricorn) - issue #1580, pull #1582
  • Fixed yield() to always return after a single event loop iteration - issue #1583
  • Fixed parsing of Markdown text nested in blockquotes, code in particular
  • Fixed a buffer read overflow in OpenSSLContext - issue #1577


Posted at 21:15:05 +0100 by Sönke Ludwig

Comments for the post are currently disabled.