Strobl Industries Logo
Metis Syiro


Metis of the Future

Metis has evolved extensively in its 14 release history. It has endured a plethora of changes, a complete rewrite of both the server-side and client-side code, significant modularity (primarily in the client-side code), and use throughout a multitude of frontend apps and backend infrastructure.

But no matter how much innovation we have put into Metis, we have always been limited by the capabilities and performance of the language the backend was written in, PHP. Where we've wanted to make Metis as modular as possible, the lackluster Class system of PHP has held us back. Where we've wanted native support for not just the Linux ecosystem, the additionally needs of PHP have been a roadblock. We have desired to utilize concurrency to dramatically improve performance, we simply haven't been able to reliably do so without calling upon PHP libraries that we simply can't expect everyone to have.

In order to introduce significant performance improvements, integrate with software such as Memcached, and be able to quickly innovate, we need to separate ourselves from PHP. Today we are announcing that Metis 1.4.7, the current release, will be the last release of Metis in PHP. Starting on March 23rd, 2015, work will begin in a new future branch in a language we have come to love.

Metis 2.0 will be written in Go. Go is a no-compromise, modern programming language that has been fundamental to a lot of incredible technology we know, like Canonical's Ubuntu Juju, or the container software called Docker. Go will provide us the high-performance we need through asynchronous function calls as well as Go's Channels model. Go has incredible support for other operating systems, the ability to compile down the Go code into an executable binary, has a fantastic set of core libraries, and has the community support we feel is needed to ensure we can integrate capabilities not seen before.

Metis 2.0 will have feature parity with the current PHP version, with obvious performance improvements along with changes to how querying the backend would work. We'd have Metis itself be a Go library so backend applications can utilize Metis without the need for the HTTP server.

Metis 2.1 would come roughly 6 weeks later and follow the same release schedule as Syiro. Metis 2.1 would feature a new file synchronization system and Windows Server support. We'd then move on to future versions of Metis and evaluate integrating support with software like Memcached.

We hope this provides some insight into the future of Metis. We're excited to see what this bright future will bring!