2.3.8 - Dec 3, 2015

    compatiblity with PHP 7, supports Throwable etc…
    Route: action is mandatory when defined as 'Presenter:'
    UIMacros: better error message
    TracyBridge: prints template name although is not file
    Configurator: DI container cache key depends on PHP minor version
    Cache: fixed deadlock when exception is thrown in fallback nette/caching#36
    CacheMacro: added warning Modifiers are not allowed here
    Selection::insert() fixed delimiting of FQN sequence name like 'aaa.bbb' nette/database#108
    ActiveRow: optimization
    tested on AppVeyor
    DI: Compiler, CompilerExtension: shows suggestions for unexpected config items and extensions, better error message
    FormMacros: added warnings Modifiers are not allowed here
    Form::$onSuccess and Container::$onValidate must be array of Traversable
    netteForms: updated regexp for URL and email validation nette/nette#1539 nette/nette#1540
    SmtpMailer: used stream_socket_client instead of fsockopen nette/mail#19
    Messages: fixed regexp for propagating links nette/mail#18
    PhpGenerator: ClassType, Method: class types are not resolved when namespace is not specified nette/php-generator#21
    Strings::toAscii() optimization
    ObjectMixin::getSuggestion() better balance, replacement of prefix get|set|add|has|is costs 20
    Callback::invokeSafe() removes function name also with arguments from error message
    Latte Parser: used possessive quantifiers and atomic grouping (prevents 500 error)
    Engine: throws CompileException when template contains parse error
    CoreMacros: {else if} throws warning "Did you mean {elseif}"
    Macroset: checks for allowed arguments
    Latte Filters: improved HTML comments escaping nette/latte#87
    Debugger: reserves some memory that is used when error "Allowed Memory Exhausted" occurs
    Debugger: cleans output buffers on strictMode error
    Debugger: error exit code changed from 254 to 255 for Error
    Debugger: more readable exceptions in console
    Helpers::editorUri default $line is 1; line is required by open-editor.js
    Dumper: fixed live-dumping of floats like '1.0'
    bluescreen: bigger exception/error message


2.3.7 - Oct 14, 2015

„Did you mean?“ feature

    Database Row, ActiveRow: shows suggestions for undeclared columns
    Tracy: shows suggestions for some errors and notices (see)
    Nette\Object: suggestions for undeclared methods and properties (see)
    Latte: missing macros and filters
    component Container: shows suggestions for missing components

Application

    RoutingPanel: redesign, added HTTP method
    Presenter: better exception messages
    PresenterComponentReflection::convertType() support for all built-in PHP typehints
    PresenterComponentReflection::convertType() converts NULL to appropriate type
    added Nette\Application\Responses\CallbackResponse
    ErrorPresenter: returns CallbackResponse
    removed rarely used @property phpDoc

Database

    Selection: Fixed infinite loop when accessing to deleted row
    SqlsrvDriver: support for limit and offset on SQL Server 2012
    drivers: fixed applyLimit for $limit = 0
    drivers: applyLimit() throws exception for negative values (but not when you use page())
    Selection: fixed bug with zero in primary key
    Selection: referenced cache cleared only for root selection (not in GroupedSelection)
    SqlsrvDriver::applyLimit(): supports keywords DISTINCT and ALL after SELECT
    SqlBuilder: removed "AS" keyword in JOINs
    Structure: added columns analyze for views

DI

    ContainerBuilder: added support for PHP7 type hints
    DecoratorExtension: implemented decorating by factory interface
    PhpExtension: NULLs are skipped.
    NeonAdapter: fixed dump() for data with simple Nette\DI\Statement

Forms

    CheckboxList: added containerPrototype and itemLabelPrototype
    FormMacros: added warnings Modifiers are not allowed here
    Form::$onSuccess and Container::$onValidate must be array or Traversable
    netteForms: updated regexp for URL and email validation

Mail

    Message: propagates links target from HTML message to plaintext version

PhpGenerator

    added support for anonymous classes
    Method, Parameter: added support for PHP 7 type hints
    Method, Parameter, Property: added constructors
    PhpNamespace::unresolveName() supports for built-in types and PHP 7 types

Tracy

    Debugger::barDump() dumps basic location by default
    Helpers::editorLink() improved way how file names are shortened
    Logger: fixed severity in formatMessage()
    fixes for PHP 7, added new examples

Latte

    added warnings: Modifiers are not allowed here
    BlockMacros: fixed trimming of block
    BlockMacros: fixed child template without block
    Parser: fixed substr_count() error on empty string

Utils

    Random: use random_int() on PHP 7
    Random: charlist now contains only unique characters
    Random: rejects openssl_random_pseudo_bytes result when it is not cryptographically strong
    Image: fixed color allocation in palette-based images
    ObjectMixin: added getExtensionMethods()
    ObjectMixin: added warning when method-getter is used by mistake (for getters without parameters) (BC break) See note.

Sandbox

    Error & Error4xx presenters


2.3.6 - Oct 12, 2015


2.3.5 - Aug 23, 2015

    Presenter: fixed signal in POST in ajax request
    Selection: added fetchField()
    Structure: added rebuild when table not exists in cache
    Structure: throws proper exception when table doesn't exists
    Neon\Encoder: added support for entity chaining
    PhpGenerator, added support for build-in types callable, self, parent, better whitespace usage
    Strings: added const for trim method whitespace charset
    Json: accept whitespace-surrounded "null" for decode() as it is a valid JSON text
    Image: fix exception message
    Html, Latte: chars '<' in attributes are encoded in XHTML
    Latte\Engine: added warmupCache()
    Debugger Bar: fixed dragging in Firefox when cursor leaves the browser window
    BlueScreen: collapse paths usable with files
    Logger: better readability of exception file name


2.3.4 - Jul 20, 2015

    improved coding style
    travis: migrating to container-based infrastructure
    travis: testing with lowest dependencies
    Control: global snippet changed from NULL to \0 to be distinguished from ''
    UIMacros: {snippet} and {snippetArea} without name has name '' in both PHP 5 and PHP 7
    UIMacros: runtime helpers moved to UIRuntime
    ApplicationExtension: missing RobotLoader throws exception
    Database\Helpers::loadFromFile() uses native exec() without logging and creating result set
    Selection: fixed exception namespace
    Forms\Helpers::createSelectBox: added parameter $selected
    ChoiceControl, MultiChoiceControl: added $checkAllowedValues
    ChoiceControl, MultiChoiceControl: renamed 'range' to 'set' in exception
    Session: session ID is not regenerated when not set
    added Mail\SendException
    Callback::invokeSafe() workaround for HHVM bug facebook/hhvm#4625
    Callback::invokeSafe() removes function name from error message
    Random: /dev/urandom is not used on Windows
    PhpWriter, CoreMacros: microoptimizations
    Tracy: support for PHP7 Throwable
    Logger::getExceptionFile() is public
    Bar: live data for previous request are stored in session
    bar.css: added text-shadow reset


2.3.3 - Jun 17, 2015

    Configurator: DecoratorExtension is called after ApplicationExtension to allow decorate presenters
    Component: attached() is called only once for each object
    Database: Selection: Related prototype depends on specific cache key
    DI: ContainerBuilder::removeDefinition() removes definition from $classes
    netteForms.js: works only with Nette forms, fixed toggle in IE < 9
    Checkbox, CheckboxList, RadioList: fixed rendering of and
    Nette\Http\Helpers: fixed bug in ipMatch() for IPv4
    SmtpMailer: improved exception message on write failure
    Nette\Mail\Message: added getAttachments()
    Image::fromString() undeprecated argument $format
    Arrays: added pick() - picks element from the array by key and return its value
    Strings: added after() and before()


2.3.2 - May 6, 2015

    PresenterComponent::redirect() fixed compatibility with func_get_args() in HHVM & PHP 7
    ApplicationExtension: changed linkGenerator dependency from Nette\Http\Request to Nette\Http\IRequest
    Presenter: "query" link syntax is un-deprecated
    SQLiteStorage: fixed transaction execution
    ResultSet: parameters are passed to statement via bindValue with correct type
    Selection::fetchAssoc fix
    Database: fixed infinite recursion when using StaticConventions and trying to access undefined column
    ContainerBuilder: fixed reseting of $currentService
    netteForms.js: a lot of fixes
    FormMacros: <label n:name></label> is rendered as is, without caption
    Form::fireEvents() calls onError even after last onSuccess handler
    RadioList & CheckboxList: getControlPart() normalizes key type
    Url: fixed isEqual() for same param values & regular sorting on numbers
    Latte: HtmlNode::$isEmpty is TRUE for shortcuts like in HTML mode
    Logger: added fromEmail option to set From header
    Logger: suppress timezone warning
    Bar: info bar show HHVM version if is running on HHVM


2.3.1 - Mar 27, 2015

    FileResponse: encodes filename in Content-Disposition according to RFC 5987
    ApplicationExtension: uses file in temp dir to invalidate container
    CacheMacro: createCache has support for defining dependencies as a fallback
    ActiveRow: added support to update primary columns via update()
    MySQL: added support for objects DateInterval in column TIME
    Revertes "SqlPreprocessor: fixed IN (?) with empty array" (possible BC break)
    Table: fixed Selection::getReferencedTable() always refetching when primary is NULL
    ContainerPanel: displays compilation time when container is compiled
    FormMacros: empty <label n:name /> displays caption, as {label /} does
    FormMacros: added support for <button>
    netteForms.js: supports Common.JS and AMD loading
    Neon::encode: removed trailing spaces
    Latte: <script> with type text/json is escaped as javascript
    Latte: improved macro {dump}
    Tracy: fixed compatibility with MooTools and some plugins
    TracyExtension: added option logSeverity
    added tool ClassUpdater
    and some fixes


2.3.0 - Feb 25, 2015

Application

    all presenters are created by Dependency Injection container
    added LinkGenerator
    Presenter: changed handling of invalid link, they triggers warnings on production and are configurable on development via 'silentLinks'
    Routing: speed optimization & caching
    added bridges for Nette DI
    added Request::getParameter(), deprecated Request::isPost()

BC breaks:

    routes and presenter names are case sensitive. Nette will warn you if you use the wrong case in presenter name. But due to performance limitation it is not checking Route mask - you should check them manually. Correct is <presenter=UpperCasedDefaultValue> and <presenter url-cased-regexp-mask>.
    Route::addStyle() & Route::setStyleProperty() are deprecated and now will trigger E_USER_DEPRECATED
    removed support for deprecated Nette\Templating, template extension .phtml and old link syntax

Bootstrap

    in config file you can move all sections placed in nette to one level up. If you move up one of the sections container, mailer or debugger, rename it to di, mail and tracy.
    added Configurator::addServices()
    uses new DI\ContainerLoader
    removed deprecated constants Configurator::DEVELOPMENT & PRODUCTION (BC break)
    Configurator::setDebugMode() accepts only bool / string / array

Caching

    FileStorage: removed usage of realpath()
    added bridge for Nette DI
    ancient and deprecated ArrayAccess syntax $val = $cache[$key] or $cache[$key] = $val triggers E_USER_DEPRECATED. Use please $cache->load($key) and $cache->save($key, $val)

Database

    throws own exceptions:
        DriverException, ConnectionException
        ConstraintViolationException, ForeignKeyConstraintViolationException, NotNullConstraintViolationException and UniqueConstraintViolationException
    added support for += and -= in UPDATE statement
    added support for operators in WHERE & AND
    implemented ?and ?or ?set ?values ?order ?name
    added support for '.' in column names
    forbidden syntax 'sql', 'sql', ..., i.e. after every SQL string must be at least one parameter
    SqlLiteral is parsed using SqlPreprocessor
    table and column names in joins can begin with number or underscore
    classes *Reflection split into with *Conventions & Structure
    added IRowContainer::fetchAssoc(), ISupplementalDriver::convertException() (BC break)
    PgSqlDriver: fixed formatLike() #46
    MySqlDriver by default uses utf8mb4 encoding for MySQL >= 5.5.3 instead of utf8 (possible problem)
    Connection: undeprecated some methods
    DatabaseExtension: added alias 'database.x.connection' for 'database.x'
    to ensure that new SQL translator do the same job as older one, you can install special tool named CompatibilityChecker22

Deprecated

new package for deprecated stuff
DI

    parameters auto-resolution for generated factories
    service aliases
    removed ServiceDefinition & Statement magic methods (makes it 3× faster)
    added DecoratorExtension, DIExtension and InjectExtension
    added CompilerExtension::validateConfig()
    ExtensionsExtension: allows to pass params
    dynamic services
    chained syntax Class::method()::method()::method()
    removed dependency on nette/reflection
    ContainerFactory replaced with light ContainerLoader
    ContainerBuilder: implement escaping of '@' at the beginning of string
    Compiler: added addConfig() & loadConfig(), compile() returns ClassType[]

BC breaks:

    Container & ContainerBuilder::findByType() returns all services, including non-autowired
    class names are case sensitive
    removed support for placing services inside extension section in configuration file
    removed support for dynamically added extensions

Finder

    Finder::filter() callback always receives as argument (at least) a FilesystemIterator
    Finder is countable

Forms

    fixed some limitations of netteForms.js
    TextBase: input is not silently truncated to max-length
    TextBase::addFilter() is processed during validation, added Rules::addFilter()
    now you can add filters to conditions $input->addCondition(...)->addFilter(...)
    to Container::onValidate callbacks are passed values via second parameter

    added bridge for Nette DI

    internal filtering methods like Nette\Forms\Controls\TextBase::filterFloat was removed
    internal validation methods like Nette\Forms\Controls\TextBase::validateFloat was moved to Nette\Forms\Validator, as well as Rules::$defaultMessages
    Buttons and Hidden fields are generated without HTML ID. Relying on autogenerated ID is very bad, if you want ID, set it via setHtmlId()
    RadioList items are generated without ID too. You can enable it via $radioList->generateId = TRUE. But again: set you base ID via setHtmlId()
    DefaultFormRenderer adds classes to inputs & label only during rendering process (BC break)

Http

    RequestFactory: speed optimizations
    Url: internally stores query parameters as array, improved canonicalize(), etc…
    added briges for Nette DI
    added Helpers::formatDate(), added IResponse::getHeader() (BC break)
    Request::getUrl() is immutable
    Response::date(), Request::isPost() & Request::getFile() with multiple keys are deprecated

Latte

    template is wrapped in an class → much faster repeated rendering
    faster loading from cache file
    faster autoloader for non-Composer usage
    {ifset block} & {elseifset block} without #
    parser detects for unclosed / malformed macros (nette/nette#711)
    added support for <script type="text/html"> (#24 & nette/nette#705)
    added macro {php …} as replacement for {? …}
    fills Html::$attrs with actual attribute values
    "words" can contain concatenation dots (i.e. {include $dir . '/template.latte'} #26)
    combination of n:class & class leads to exception

Mail

    added bridge for Nette DI
    variable $mail is not automatically passed to templates, you have to do it yourself (BC break) (but better than {var $mail->subject = "Your new order"} is this <title>Your new order</title>, isn't it?)
    if you have linked images (with relative paths) in template, pass base file path to images as second parameter to setHtmlBody()
    Message: removes from body

Neon

    chained syntax first(a, b)second(1, 2)

Php Generator

    generating PHP files with multiple namespaces & classes
    removed magic methods (makes it much faster)
    splits long lines, uses single-quotes strings when possible
    short phpDoc for properties

Reflection

    added Helpers::getDeclaringClass()
    added bridge for Nette DI

Robot Loader

    added support for loading from Phar
    removed usage of realpath()
    is now case sensitive and will warn you if you use the wrong case in class name

Safe Stream

    it is recommended to change protocol safe://... to namespaced nette.safe://...
    protocol is registered automatically, no longer need to call SafeStream::register()

Security

    added bridge for Nette DI

Tracy

    Bluescreen & Debug Bar: 10× smaller HTML code, 10× faster, deeper depth of dumps
    Debug Bar: redesigned, uses vector icons
    Bluescreen: dumps contain location of class definition (can be opened in editor with ctrl key)
    Bluescreen: added link "skip error" to suppress strictMode
    Bluescreen: added Exception panel
    added Tracy\ILogger and rewritten default Logger
    Debugger::enable() implements checking of cookie (format cookie@ip.address)
    customizable 500 error template via Debugger::$errorTemplate
    Dumper: new options LOCATION_SOURCE, LOCATION_LINK, LOCATION_CLASS
    Dumper: customizable object exportes
    completely rewritten JavaScript, now requires IE 10+ (removed tracyQ.js)
    added bridge for Nette DI

Utils

    added Arrays::normalize(), Callback::invokeSafe(), Html::data(), Strings::firstLower()
    Image::from() throws ImageException when is unable to decode file
    Image::place() fixes support for alpha channel
    Callback::closure() returns native closures since PHP 5.4
    Strings::chr() throws Nette\InvalidArgumentException if code point is not in valid range
    Validators::isUrl() accepts underscores in subdomains


2.3.0-RC - Feb 18, 2015

    deprecated Route::addStyle() & Route::setStyleProperty() trigger E_USER_DEPRECATED
    Cache: deprecated ArrayAccess ($cache[$key] = $val instead of $cache->save($key, $val) etc) triggers E_USER_DEPRECATED
    DI: fixed some bugs, fixed thread-safety issues
    DI: improved ContainerLoader & Compiler & Configurator usability (will be described later)
    Forms: un-deprecated addFilter(), now is integrated to rules
    Forms: fixed some limitations of netteForms.js
    Latte: fixed bug in parser
    Mail: removed deprecation notices for Nette\Templating and Nette\Application\UI\ITemplate
    Mail: if you use in template variable $mail, you have to pass it manually
    removed some deprecated stuff that triggers errors in Nette 2.1 / 2.2


2.3.0 beta3 - Feb 13, 2015

    Application: reverted disabled canonicalization for restored requests
    Http: reverted that script path detection is case-sensitive
    DatabaseExtension: fixed autowiring of multi connections
    Database: SqlProcessor converts objects with __toString to strings
    DI: removed support for dynamically added extensions (BC break!) [Closes nette/di#50]
    DI: removed support for section services inside extensions (BC break)
    DI: InjectExtension is called as the last one [Closes nette/di#53]
    Parser: fixed syntax=off

bonus:

    vector icons on Tracy Bar

All components are finished. Only nette/application is in beta phase, because nette/application#4 is not merged yet.


2.3.0 beta2 - Feb 6, 2015

    Application: reverted that action name can begin with number
    Application: uses native ReflectionClass
    PresenterFactory: fixed compatibility with case mismatched presenter names
    Bootstrap::setDebugMode - argument must be string|array|bool
    DI: removed dependency on nette/reflection
    DI: magic methods replaced with native ones (is 3× faster)
    DI: implemented escaping of '@' at the beginning of string
    DI\Container::findByType() returns all services, including non-autowired (BC break!!)
    Forms: reverted that addText, addPassword, addTextArea: parameter $cols is deprecated
    Forms: added deprecation warning to deprecated addFilter()
    Forms: added RadioList::$generateId that enables generating of ID
    PhpGenerator: magic methods replaced with native ones
    RobotLoaders: warns on case mismatch on class name
    … and some bugs fixed

All components are finished. Only nette/application is in beta phase, because nette/application#4 is not merged yet.


2.3.0-beta - Jan 31, 2015

Application

    all presenters are created in Dependency Injection container
    added LinkGenerator
    Routing: speed optimization & caching, action name can begin with number

BC breaks:

    removed case insensivity for presenter and action names
    removed support for deprecated Nette\Templating, template extension .phtml and old link syntax

not merged yet:

    MessagesStorage & RequestStorage #4

Bootstrap

    added Configurator::addServices()
    removed constants Configurator::DEVELOPMENT & PRODUCTION (BC break)

Caching

    FileStorage: removed usage of realpath()

Database

    throws own exceptions:
        DriverException, ConnectionException
        ConstraintViolationException, ForeignKeyConstraintViolationException, NotNullConstraintViolationException and UniqueConstraintViolationException
    added support for += and -= in UPDATE statement
    added support for operators in WHERE & AND
    implemented ?and ?or ?set ?values ?order ?name
    added support for '.' in column names
    classes *Reflection split into with *Conventions & Structure
    added IRowContainer::fetchAssoc(), ISupplementalDriver::convertException() (BC break)
    MySqlDriver: uses utf8mb4 encoding for MySQL >= 5.5.3
    Connection: undeprecated some methods

Deprecated

new package for deprecated stuff
DI

    parameters auto-resolution for generated factories
    added support for service aliases
    added DecoratorExtension, DIExtension and InjectExtension
    added CompilerExtension::validateConfig()
    ExtensionsExtension: allows to pass params
    dynamic services
    chained syntax Class::method()::method()::method()

not merged yet:

    better CompilerBuilder API

Finder

    Finder::filter() callback always receives as argument (at least) a FilesystemIterator

Forms

    to Container::onValidate callbacks are passed values via second parameter
    added bridge for Nette DI
    Rules::$defaultMessages and all validating methods in BaseControl and it's descendants moved to Nette\Forms\Validator

BC breaks to be discussed:

    addText, addPassword, addTextArea: parameter $cols is deprecated
    buttons and hidden fields are generated without HTML attribute ID by default

not merged yet:

    setTranslator(NULL) will not stop translate label (#58)
    IValidator as base class for own validators

Http

    RequestFactory: speed optimizations
    Url: internally stores query parameters as array, improved canonicalize(), etc…
    added Helpers::formatDate()
    added IResponse::getHeader() (BC break)
    Request::getUrl() is immutable
    Response::date(), Request::isPost() & Request::getFile() with multiple keys are deprecated

Latte

    template is wrapped in an class › much faster repeated rendering
    faster loading from cache file
    {ifset block} & {elseifset block} without #
    added macro {php …} as replacement for {? …}
    faster autoloader for non-Composer usage
    fills Html::$attrs with actual attribute values
    "words" can contain concatenation dots (i.e. {include $dir . '/template.latte'} nette/latte#26)
    parser detects for unclosed / malformed macros (nette/nette#711)
    added support for <script type="text/html"> (nette/latte#24 & nette/nette#705)
    combination of n:class & class leads to exception

Mail

    deprecated support for Nette\Templating

Neon

    chained syntax first(a, b)second(1, 2)

Php Generator

    generating PHP files with multiple namespaces & classes
    short phpDoc for properties

Reflection

    added Helpers::getDeclaringClass()

Robot Loader

    added support for loading from Phar
    removed usage of realpath()

Safe Stream

    added protocol nette.safe://, alias for safe://

Security

    User: bool parameters replaced with flags, i.e. $user->setExpiration('20 minutes', TRUE, TRUE) › setExpiration('20 minutes', $user::BROWSER_CLOSED | $user::CLEAR_IDENTITY)

Tracy

    Bluescreen & Debug Bar: 10× smaller HTML code, 10× faster, deeper depth of dumps
    Bluescreen: dumps contain location of class definition (can be opened in editor with ctrl key)
    Bluescreen: added link "skip error" to suppress strictMode
    Bluescreen: added Exception panel
    added Tracy\ILogger and rewritten default Logger
    Debugger::enable() implements checking of cookie (format cookie@ip.address)
    customizable 500 error template via Debugger::$errorTemplate
    Dumper: new options LOCATION_SOURCE, LOCATION_LINK, LOCATION_CLASS
    Dumper: customizable object exportes
    completely rewritten JavaScript, now requires IE 10+ (removed tracyQ.js)

Utils

    added Arrays::normalize(), Callback::invokeSafe(), Html::data(),
    Image::from() throws ImageException when is unable to decode file
    Callback::closure() returns native closures since PHP 5.4
    Strings::chr() throws Nette\InvalidArgumentException if code point is not in valid range
    Validators::isUrl() accepts underscores in subdomains


2.2.7 - 2015-01-06

    Json: workaroud for PHP fatal error caused by \u0000 at the beginning of key
    RequestFactory: optimized UTF-8 validation performance
    Url::unescape() optimized for performance
    speed optimization for Object, Strings::length(), Strings::substring()
    Tracy: 500 error page is better displayed as part of page
    RoutingPanel: improved dumping of objects
    MemcachedStorage: the key must not include control characters or whitespace
    ExtensionsExtension: Allow passing parameters to extension constructor
    ContainerFactory: rewritten caching mechanism to not use fopen
    BaseControl: allow passing objects to translator in control
    netteForms.js: getValue returns bool for checkbox
    UserPanel: is rendered only when headers are not sent (fixes bug introduced in v2.2.6)
    Strings::toAscii(): unsupported characters are removed instead of being replaced with '?'
    Html: floats in attributes are printed in natural notation
    DI: annotations @inject can be defined in traits
    Neon: support for unicode surrogate pairs, improved encoding of strings


2.2.7 RC - 2014-12-29

2.2.6 - 2014-11-16

    Http\Response: workaround for PHP bugs #61106 and #66375
    Http\Response::redirect() link is printed only for https? protocol
    Tracy: fixed positioning of window
    Tracy\OutputDebugger: stack is printed in title


2.2.5 - 2014-11-15

2.2.4 - 2014-10-26

Forms:

    CsrfProtection: token is expired after regenerateId() (i.e. after logout) security fix!
    CsrfProtection: ignores setValue(), is not erased by Form::setValues
    Form: calling setAction() bypasses creation of 'do' element
    DefaultFormRenderer: support for setOption('id') for groups
    RadioList: added item label prototype
    Container: added addMultiUpload()
    TextBase: added setMaxLength()
    TextInput: removed empty value=""
    TextBase::setEmptyValue() can contain space at the end of the value
    fixes in netteForms.js

Tracy:

    fixed double calling Debugger::enable(), Debugger: $logSeverity in development mode, CSS
    BlueScreen: collapsePaths is set to /vendor dir
    create-phar: minification for JS & CSS
    Debugger: removed error message in non-HTML production mode
    TracyBridge initialization moved from NetteExtension to Configurator

others:

    supported $configurator->addConfig(array(...configuration...))
    Template: added __call() for BC
    Route: %domain% and %tld% works with IP
    SqlPreprocessor: fixed non-associative array detection
    Http\Response: Added missing HTTP status codes as constants
    Url::isEqual: fixed comparing of indexed arrays
    UserPanel: is rendered only when headers are not sent
    DateTime: createFromFormat returns FALSE on failure
    Latte: implemented {elseifset #block}
    Latte: allows load templates from phar file
    Database: strings in Tracy Bar are correctly escaped
    Http: fixes in phpDoc


2.2.4 RC - 2014-10-26

2.2.3 - 2014-08-28

Fixes:

    new way how to detect errors in native PHP function (used in Session, Mail, Strings, …)
    DI: fixed inheritance
    Database & DI: fixes autowiring for multiple connections
    Database: fixed & enhanced support for multiple scheme reflection
    Forms: fixed erasing of manually added errors via addError
    Forms: fixed getHttpData() for multiple file uploads
    Http\Response: added $warnOnBuffer
    Latte: filter |date respects active timezone
    Latte: macro {includeblock} gently trims output
    Mail: fixed headers encoding nette/mail#4
    Mail: setHtmlBody() decodes %XX in URL
    PhpGenerator: ClassType::from processes only own properties
    PhpGenerator: fixed dumping of non-public properties
    Template::registerHelperLoader: removed E_USER_DEPRECATED
    TemplateFactory: added missing filters modifyDate, length & null
    Neon: fixed parsing of:

key1:
- subitem
- subitem

News:

    added support for $configurator->setDebugMode('secret@23.75.345.200'), where secret must match with cookie nette-debug
    added Latte\Engine::invokeFilter(), as a replacement for $template->$filter().
    DI: better exception messages
    NDBT: added support for NULL with operator NOT
    Forms & Latte: prettier output formating
    Tracy: added Debugger::$logSeverity for logging bluescreen for errors/warnings/notices in production mode
    added Validators::isUri()


2.2.3 RC2 - 2014-08-24

2.2.3 RC - 2014-08-13

2.2.2 - 2014-06-26

    Route: allows to use parameters with long names
    FileResponse: send response either as attachment or inline
    UI\Presenter: all services except httpRequest & httpResponse are optional
    Tracy: better error messages when is Tracy unable to log errors
    Latte: added support for empty {var $foo}
    netteForms: toggle related event handler is added only once
    Configurator::setDebugMode(): removed default value
    a lot of bugfixes


2.2.1 - 2014-05-28

    Latte & Nette\Utils\Html: added protection against innerHTML mXSS vulnerability
    Tracy: Dumper prints attribute data-tracy-href only when option 'location' is enabled
    Neon: accepts short bullet syntax:


2.2.0 - 2014-05-11

Nette has been split into small projects:
 - Application
 - Caching
 - ComponentModel
 - Nette Database
 - DI
 - Finder
 - Forms
 - Http
 - Latte
 - Mail
 - Neon
 - PhpGenerator
 - Reflection
 - RobotLoader
 - SafeStream
 - Security
 - Tokenizer
 - Tracy (formerly Nette\Diagnostics)
 - Nette Utils

It also brings complete new Latte API for standalone usage:

    $latte = new Latte\Engine;
    $latte->onCompile[] = function($latte) {
        $latte->addMacro(...);
    };
    $latte->addFilter('money', ...);
    $latte->render('template.latte', $parameters);

Also Nette\Diagnostics was renamed to nice and short Tracy.


2.1.4 - 2014-05-24

    Latte & Nette\Utils\Html: added protection against innerHTML mXSS vulnerability
    Latte: fixed parsing {macro|modifier /}
    Latte: fixed including parent block multiple times
    Latte, DI: improved error messages
    Tracy: Dumper prints attribute data-tracy-href only when option 'location' is enabled
    RadioList: attrs of radiolist label aren't appended to labels of radio
    Database: ResultSet: empty keys are not converted to properties
    Strings::toAscii(): support for czech and french quotation marks
    RobotLoader: works with PHP 5.6 syntax ClassName::class


2.1.3 - 2014-05-12

    Strings::fixEncoding() uses iconv in PHP 5.3, because htmlspecialchars can be very slow
    added option to disable autoloading of annotation classes via AnnotationsParser::$useAnnotationClasses
    Reverted SendmailMailer use CRLF in subject, see comment
    fixed detection of primary keys in SQlite
    Forms: SelectBox works with NULL items and no items


2.1.3 RC - 2014-05-05


2.1.2 - 2014-03-17

    Image: added support for image resource cloning #1329
    Forms: added Form::DATA_KEYS for preserving keys in getHttpData() #1433
    Forms & netteForms.js: fixed bug in negative toggling via toggle(..., FALSE)
    PhpGenerator: Added support for variadics (PHP 5.6 feature) #1414
    Mail: SendmailMailer use CRLF in subject. #1437
    Random: mcrypt_create_iv() crashes with „Fatal error: mcrypt_create_iv(): Could not gather sufficient random data“ in PHP 5.3.3 on Windows
    Latte Macros: n:ifcontent checks for whitespaces (closes #1387)
    Latte: improved HTML comments escaping
    Debugger: fixed HTTPS detection on nginx
    Debugger: error.phtml erases HTML output
    Strings::fixEncoding() removed dependency on mbstring for UTF-8 encoding


2.1.1 - 2014-02-10

    disables safeUrl when |dataStream, {link} or {plink} are used
    adds ability to render checkboxes via n:name without using colon in name
    enables coexistence of annotation @method with extension methods #1344
    fixes SelectBox::setItems without keys
    and doubled DB query after toArray #1332
    multiple service inheritance
    snippetArea with included template
    HTML5 validation of required CheckboxList
    TextInput: min/max input attributes for multiple range rules
    fixes combination of n:name with other n:attributes

Adds:

    CSRF token is protected against BREACH attack
    Application::$onPresenter event
    helper escapeUrl as alias for url
    Strings::random uses openssl_random_pseudo_bytes or mcrypt_create_iv
    supports short <select n:name=... />


2.1.1-RC2 - 2014-02-08


2.1.1-RC1 - 2014-02-03


2.1.0 - 2013-12-30

Application & Presenter

    PresenterFactory: configurable mapping Presenter name -> Class name
    Route: new pseudo-variables %basePath%, %tld% and %domain%
    Presenter: new method sendJson()

Caching

    added SQLite storage (Nette/Caching/Storages/SQLiteStorage)

Database (NDB)

    complete refactoring, a ton of bug fixes
    lazy connection
    much better (dibi-like) SQL preprocessor
    Selection, ActiveRow: insert() & update() methods return row instances with refetched data
    Selection: added placeholder support select(), group(), having(), order() methods
    SqlLiteral: added placeholder support
    Selection: added WHERE conditions consider NOT for IN operator
    new driver for Sqlsrv
    Sqlite supports multi-inserts

Debugger

    Bar: you can see bar after redirect
    Dumper: colored and clickable dumps in HTML or terminal
    Debugger: full stack trace on fatal errors (requires Xdebug)

Dependency Injection (DI)

    auto-generated factories and accessors via interface
    adding compiler extensions via config file
    configurable presenters via config file
    annotation @inject
    bullet syntax for anonymous services

Forms

    setOmitted: excludes value from $form->getValues() result
    implemented full validation scopes
    Form::getOwnErrors() returns only errors attached to form
    Radiolist::getLabel(..., $key) returns label for single item
    added ChoiceControl, MultiChoiceControl and CheckboxList
    SelectBox and CheckboxList: allowes to disable single items
    UploadControl allowes multiple files upload
    validators Form::INTEGER, NUMERIC and FLOAT converts values to integer or float
    validator Form::URL prepends http:// to value
    Form::getHttpData($htmlName) returns data for single field
    supports Twitter Bootstrap 2 & 3 (see examples)
    removed dependency on Environment
    improved toggles
    data-nette-rules attribute is JSON

Latte

    supports <tag attr=$val> without quotes
    new macro n:name for <form> <input> <select> <textarea>
    partially rendered radiolists using {input name:$key} and {label name:$key}
    new modifier |safeurl which allowes only http(s), ftp and mailto protocols
    safeurl is automatically used for href, src, action and formaction attributes (can be bypassed by |nosafeurl modifier)
    new modifier |noescape which is preferred over exclamation mark
    {foreach ...|nointerator} bypasses creating variable $iterator
    new macro n:ifcontent
    {include block} can be written without hash

Http

    added new SessionPanel
    RequestFactory: new method setProxy()

Utils

    new utility class FileSystem
    new utility class Callback
    Arrays: new method isList()
    Arrays: method flatten() supports key preserving
    Strings: new methods findPrefix() and normalizeNewLines()
    Json: supports pretty output
    Validators: new method isType()

Mailing

    SmtpMailer: persistent connection

Others

    minified version is PHAR file
    ObjectMixin: magic methods setProperty(), getProperty(), isProperty() and addProperty() by @method
    SafeStream: supports ftruncate (requires PHP 5.4+)


2.0.14 - 2014-01-01


2.1.0-RC4 - 2013-12-18


2.1.0-RC1 - 2013-11-27 


2.0.13 - 2013-11-05

It fixes security bug in Latte and introduces new form validators NOT_EQUAL & BLANK.


2.0.12 - 2013-08-07

Nette Framework 2.0.12 has just been released and is now available for download. Feel free to update!

It fixes few bugs in Nette\Database discovered in 2.0.11 (#1156, #1175, #1198), in netteForms.js, sanitizes server name in Nette\Mail, adds support for IPv6 in Nette\Http\RequestFactory and has better performance with APC.


2.0.11 - 2013-07-11

    Nette\Database is much faster
    fixed are quotes in sent emails #634
    added new modifier |noescape and n:name in Latte and improved escaping in HTML comments
    new Adminer with better skin & autocomplete plugin in Sandbox, now accessible only from localhost
    and much more (#700, #1026, #900, #1057, …)


2.0.10 - 2013-03-08

It contains a lot of improvements and fixes mostly in FileJournal and Database, contributed by 13 authors.

(Support for constants in config file introduced in 2.0.9 was removed due to BC break.)


2.0.9 - 2013-03-05


2.0.8 - 2013-01-01

Fixes and improvements:

    Database: a lot of fixes, see changelog
    security: String::random() uses even more entropy and now it's great
    Neon: fixed error "Backtrack limit was exhausted" and it removes BOM
    Debugger: "caused by" exception in better visible & some fixes
    Cache: fixed problem with nested {cache} macros
    Forms: added support for #hash part of URL


2.0.7 - 2012-11-28

Fixes and improvements:

    Database: implemented multi primary key support and a lot of fixes (in type detection, …)
    Config: added support for anonymous services defined via bullets
    Latte: added support for {input $control}, {label $control} and n:input=$control, where $control is object IFormControl
    UI\Presenter: invalid URL parameters are ignored and do not throw 404 HTTP error
    MicroPresenter: returns 404 HTTP error when parameter callback is missing
    Session: session ID is not regenerated after 30 minutes
    Mail: fixed sending BCC header via SMTP protocol
    PresenterComponent: to override constructor and not to call its ancestor will not cause error
    Debugger: sends error-code after every errors
    Tests: test are updated to last version of Nette\Tester


2.0.6 - 2012-10-01

Fixes and improvements:

    Database: really a lot of fixes and improvements, added PostgreSQL tests
    Tests: we are moved to Nette\Tester and using Travis CI
    added FTP deployment tool
    RobotLoader: smarter detection of changed files
    Finder: added workaround for PHP bug in AppendIterator
    added some workarounds for PHP 5.4.x and 5.3.16 bugs


2.0.5 - 2012-08-30

Fixes and improvements:

    Database: really a lot of fixes and improvements
    Presenters: dependencies can be passed via inject*() methods
    Latte: fixed {define} and dynamic blocks
    FileResponse: fixed range processing
    Validators: improved URL and email validator (client side & server side)
    Debugger: dumps additional info for resources
    Sandbox contains Adminer 3.5.1 with Nette skin (looks like API doc)


2.0.4 - 2012-07-30

Improvements:

    Database: added support for foreign keys in PostgreSQL driver
    Added support for getting public methods as Closure in PHP >= 5.3. $this->formSubmitted
    Route: slash is not converted to %2F
    Presenter: directory 'templates' may be located inside presenter's directory
    Nette sandbox becomes a Composer package.

Changes:

    Presenter: fixed array-to-string conversion errors in PHP 5.4
    Fixes and improvements in Neon and Latte syntax.
    Improved error messages in Presenter, Latte, DI Container.
    Contains Adminer 3.4.0 with new Nette skin (looks like API doc)


2.0.3 - 2012-04-03

Improvements:

    Added $_SESSION to Debugger bluescreen.
    Added syntax highlighted dump() in Linux.
    Tests runs in parallel (reduce time from 2 minutes to 10 seconds).
    Nette becomes a Composer package.

Changes:

    Default value of header X-Frame-Options is now sameorigin
    Default value of session autoStart changed to smart.
    Introduces method Nette\Config\Configurator::setDebugMode() used to replace setProductionMode().


2.0.2 - 2012-03-30


2.0.1 - 2012-02-24


2.0.0 - 2012-02-01

Nette Framework 2.0 has many innovations, some of them are unique in the PHP world:

    full Dependency Injection support, extensively used in whole framework
    new database layer with integrated awesome library NotORM
    completely rewritten Latte, very handy templating language
    customizable Debugger, developer's little helper with a lot of predefined panels
    new markup language NEON
    new ways to configure framework and applications
    Nette stays to be one of the most secured framework in the world

…and a lot lot lot of enhancements in every part of framework.

Nette Framework also comes with new and great documentation. How to get started? Try Quick Start tutorial.

Nette Framework 2 is released. It's time to celebrate!


0.9.7 - 2012-01-19


0.9.6 - 2010-09-18

Řada 0.9 se uzavírá a souhrn všech bugfixů za poslední 2,5 měsíce najdete ve verzi 0.9.6. Update je doporučený a žádné nekompatibility by se objevit neměly.

Pár dní ještě 0.9.6 považujme za release candidate, kdyby se náhodou objevila nějaká chyba, promptně ji opravím.

Nette 0.9 RIP!


0.9.5 - 2010-06-29

Venku je verze 0.9.5. Ta především opravuje řadu chybiček, jejichž kompletní výčet najdete v changelogu. Velkou interní změnou je, že repozitář byl převeden do PHP 5.3 a teprve z něj se generují distribuce frameworku určené pro PHP 5.2. Což vyřešilo nedostatky v generování prefixované verze. Druhou interní změnou je úprava adresářové struktury frameworku. Přičemž obě interní změny by neměly mít vliv na funkčnost.

Ze všech úprav bych zdůraznil jen několik:

    Nette\Mail by měl mít fixnuté všechny známé nedostatky v kompatibilitě s emailovými klienty
    metody Nette\Mail dále striktně kontrolují, zda jsou všechny parametry kódovány v UTF-8
    SmartCachingIterator (tj. makro {foreach}) nyní umí iterovat i nad SimpleXMLElement
    používejte login(), logout() a isLoggedIn(), volání starších metod vyvolá varování
    nové konstanty NETTE, NETTE_VERSION_ID, NETTE_PACKAGE a také PHP_VERSION_ID pod PHP < 5.2.7


0.9.4 - 2010-04-13

Světlo světa spatřila nová stabilní verze 0.9.4. Ta především opravuje řadu chybiček, jejichž kompletní výčet najdete v changelogu. Zároveň také přináší několik vylepšení:

    podpora vícevláknového kešování pomocí callbacků a dramatické zrychlení RobotLoaderu
    aliasy login(), logout() a isLoggedIn()
    odstraněn Session::$verificationKeyGenerator
    při spuštení Nette\Application se automaticky nastartuje session, je-li přítomno session-ID
    přidáno Identity::__isset()

Formuláře:

    lze používat placeholdery %label, %name a %value ve výchozích chybových zprávách
    vypnutí překladače na určitém prvku nevypne překládání chybových zpráv
    zaměněno <form name="..."> za <form id="...">

Šablony

    v modifikátorech lze používat mezery (např. {$var |truncate : 30}) a klíčová slova true, false, null
    přidáno makro {var ...} jako alias pro {assign ...}
    je podporován zápis {var item => value} i {var $item => value}


0.9.3 - 2010-01-27

Po dvou měsících je tu verze 0.9.3. Přináší poměrně dost novinek a opravuje chybičky.

    vylepšení jazyka o globální funkci callback() a Nette\Callback pro čitelnější zápis a volání callbacků
    zásadního zrychlení dosáhla třída RobotLoader
    opraven bug přehazující pořadí parametrů v URI
    vylepšený RoutingDebugger zobrazuje více informací
    přidána třída DateTime53 opravující zmršený DateTime v PHP 5.2 (podpora serializace & unix timestamp)
    metoda createComponent() může vracet instanci
    sjednoceno chování všech funkcí ve frameworku, kterým se jako parameter předává čas. Ten může být zadán buď jako objekt DateTime, řetězec ve formátu '+ 14 days', jako relativní počet sekund nebo jako UNIX timestamp.
    přidána třída Nette\Web\HttpContext
    přidány funkce String::padLeft() a String::padRight() (obdoba str_pad pro UTF-8)
    deprecated: Uri::setPass() a getPass() nahrazuje Uri::setPassword() and getPassword()
    deprecated: HttpResponse::expire() nahrazuje HttpResponse::setExpiration()
    deprecated: Nette\Object::getClass() (důvodem je příliš obecný název, lze nahradit za $obj->reflection->name)
    odstraněny třídy Nette\Loaders\SimpleLoader, Nette\Config\ConfigAdapterXml, Nette\Forms\RepeaterControl

Formuláře

    InstantClientScript: formuláře generují zgruntu nový validační JavaScriptový kód. Ten by měl být lépe přizpůsobitelný (např. pro live validation) a je nezávislý na HTML ID. V této oblasti bude vývoj pokračovat, nicméně nové chování by mělo být stabilní.
    HttpUploadedFile: příkaz move() řeší problematiku přístupových práv, umí vytvořit adresář a lze jej použít i pro více přesunů.
    Html: vylepšeno chování metod getHtml() a getText(), takže objekty Html lze bez problémů používat v labelech apod.
    deprecated: Form::processHttpRequest() bylo přejmenováno na Form::fireEvents()

Debug

    globální funkce dump() jako ("nejen .(lze dumpovat víc proměnných)") zkratka pro Nette\Debug::dump()
    Debug::enable() lze předat výčet IP adres
    kvůli šetření místem nyní Debug nevytváří HTML logy pro opakující se chyby (zvažuju ukládat soubory komprimované)
    opraveny nedostatky logování chyb na některých hostinzích

Šablony

    isFirst() a isLast() podporuje renderování mřížek
    v šablonách lze psát <?xml ... ?> bez kliček kvůli PHP parseru
    Makro {debugbreak} podporuje XDebug
    deprecated: LatteFilter::invoke potažmo CurlyBracketsFilter::invoke (zpravidla by mělo stačit inicializaci filtru odstranit)

Image

    metoda resize() se zápornými argumenty zrcadlí obrázek (Image i ImageMagick)
    metoda calculateSize() je nyní statická (BC break!)

Nette\Reflection

Asi nejvýraznější novinkou je nový soubor tříd Nette\Reflection, které sjednocují a rozšiřují možnosti meta-programování. Sem byla přesunuta podpora anotací a zpracování extension method. Řekl bych, že tohle bude příští velká věc, nicméně tuto oblast čeká ještě velký vývoj.

    anotace fungují všude, eAccelerator není překážkou
    syntaxe anotací byla rozšířena
    deprecated: Nette\Annotations - podpora se přesunula do tříd Nette\Reflection

Cache a session

    objekty ukládané do session nebo cache lze nyní verzovat pomocí anotace @serializationVersion
    FileStorage pro ukládání tagů a priority používá SQLite databázi

Co ve verzi 0.9.3 není?

Ve verzi 0.9.3 nejsou vývojové záležitosti jako tzv. nové snippety, nezměnila se třída Identity a Presenter používá starou adresářovou strukturu a má stále aktivní přepínače $oldLayoutMode a $oldModuleMode. Zmíněné novinky najdete až ve vývojové větvi 1.0-dev.


0.9.2 - 2009-11-10

Po dvou měsících je tu další setinková stabilní verze. Ta především opravuje řadu odhalených chybiček, ale také nabízí několik nových vlastností:

    Route: volitelné sekvence via [...] (POZOR: místo původních složených závorek jsou ve finální verzi hranaté)
    nový testovací framework pro self-testing Nette
    metoda setDefaultValue() na prvcích formuláře
    nová adresářová struktura pro moduly (aktivuje se přes $oldModuleMode) a s tím související BC break - odstranění proměnných prostředí %templatesDir%, %presentersDir%, %componentsDir%, %modelsDir%
    vylepšení Image::crop() a resize() (thanx to kravčo)
    v presenterech lze k singletonům User a Session / SessionNamespace přistupovat přes metody getUser() a getSession().

Šablony:

    předregistrované helpery: length, substr, number, replace, replaceRE, repeat, implode
    proměnná $basePath nahrazující $baseUri (liší se v absenci pravostranného lomítka)
    makro {status ...} pro odeslání HTTP kódu a {layout ...} jako alias pro {extends ...}
    u definic bloků je nepovinný znak #

Kromě zmíněného BC breaku s proměnnými prostředí by se žádná nekompatibilní změna objevit neměla, takže upgrade na 0.9.2 je doporučený.

Poznámka pro uživatele development verze: OldPresenter a snippety s dvojtečkou jsou součástí jen vývojové verze (tj. 0.9.3-dev) a ve verzi 0.9.2 je nenajdete.


0.9.1 - 2009-09-18

Pouhý měsíc po vydání 0.9.0 je tu další setinková stabilní verze. Co nabízí nového?

    CurlyBrackets se přejmenoval na LatteFilter a byla finalizována podpora n:attributů a dopřána možnost měnit syntax maker via {syntax ...}
    výrazně byl vylepšen životní cyklus formulářů
    úpravy API doznal ServiceLocator a rozšířily se tak možnosti konfigurace přes config.ini
    framework má nyní vlastní testovací framework (code coverage se blíží 80 %)
    funkce presenterů byla formalizována a fungují jako konvertor z PresenterRequest -> IPresenterResponse
    nové podoby se dočkal Requirements Checker
    manipulace s obrázky zachovává poloprůhlednost
    vylepšeno chování cache úložiště FileStorage v prostředí Windows
    opravena řada bugů

Součástí distribuce je i nová verze dibi 1.2, jejíž hlavní novinkou je práce s datem prostřednictvím třídy DateTime, takže netrpí limitem pro UNIX timestamp.

Ačkoliv změn je poměrně dost, v jejich souvislosti jsem nezaznamenal žádné problémy, tudíž je možné je v této podobě považovat za stabilní a pustit se do dalšího vývoje. Ten se bude týkat především podpory AJAXu - ve formulářích, presenterech a šablonách.


0.9.0 - 2009-08-16

Můžete dát sbohem verzi 0.8, má svého stabilního nástupce.

Co přináší verze 0.9.0 nového? Vylepšení je poměrně dost, jaké jsou ty nejdůležitější:

    nová knihovna Nette\Mail pro odesílání emailů
    CurlyBracketsFilter (nyní LatteFilter) prošel velkým vývojem a nově nabízí:
        nová makra {isset ...}...{/if}, {assign ...}, {default ...} a {control ...}
        dynamická dědičnost šablon (zatím experimentální feature)
        v případě chyby zobrazuje číslo řádku v šabloně
    koncept chytrých továrniček pro komponenty nahrazující zapovězené metody prepare
    přímočařejší předávání AJAXových dat přes $presenter->payload
    nová verze Routing Debuggeru, zobrazující se jako widget na stránce
    nový pomocník programátora Nette Debug Console a další ladící novinky
    povinné volání metody startup() v Presenteru zabraňující možným chybám
    cache nabízí uživatelské validátory (via Cache::CALLBACKS)
    cache úložiště FileStorage rozděluje soubory do složek
    přešli jsme na Git

Verze by měla být plně zpětně kompatibilní s v0.8 s výjimkou změn uvedených v tomto fóru (a ty jako vždy hlásí upozornění).


0.8 - 2009-05-04


0.7 - 2006-01-23

Released in 2008 as open source after 4 years of development.
