The HN Effect and Our Accidental Launch

Mostly due to the fact that neither Anton nor I are cut out to be movie directors, producers or presenters, we submitted our YC application in the last moment at five minutes to 8pm PST. This was 6am in Moscow on Monday.

Having only slept for 6 hours in the preceding 48, I hit the bunk right away, only to be awoken a few hours later. I stumbled to the computer to check our Clicky logs to see if anybody from YC had already looked at the site. To my surprise, we had 200 visitors - twice the average daily uniques.

At this point it became apparent that @yogstoth had submitted us to HN. I should say resubmitted, because Akshell has been on HN a few times before. In fact, Anton and I "met" in the comments of the first submission.

48 hours later, we have seen 20K+ visitors, with 300+ concurrent users online at peak, average time on site at 4+ minutes, a few investors knocking on the door and bloggers asking for interviews.

What Went Wrong

What Went Right

What We Learned

Where to Next

It looks like accidental launches are becoming a bit of a tradition. Thank you to everyone who helped us get here. Every Hacker News upvote and retweet counts!

March 24, 2011 by olegp View Comments

Akshell 0.3

Akshell 0.3 is out! This release introduces a brand new IDE. It was designed to provide a desktop-like experience in a browser window. It's tightly integrated with the Akshell guts; it doesn't require installation or configuration; you can use it from anywhere without a hassle. And you even don't have to sign up to try it! The coolest IDE feature is Git support: not only you can take your code from GitHub, but you can directly run Git commands, just like on your local machine.

The engine hasn't changed much, but there is good news about it too: it will be open sourced soon. No vendor lock-in anymore, you'll be able to run Akshell apps on your own server.

So here is Akshell 0.3: the open source infrastructure and the sophisticated IDE. Give it a spin!

February 14, 2011 by korenyushkin View Comments

Introducing the json Attribute Type

I'm happy to present a new type of database attributes: json. It makes storing arbitrary JavaScript objects into the database really seamless. Serialization and deserialization are performed automatically; the API makes it impossible to store an invalid JSON. The type is opaque for database queries: it's just coerced to string.

As always, the main goal was simplicity. Here is an example of an evaluation session:

>>> rv.X.create({j: ['json', {prop: 'value'}]})
>>> rv.X.insert({j: [1, 2, 3]})
>>> rv.X.insert({j: 42})
>>> rv.X.insert({}) // use the default {prop: 'value'}
>>> repr(rv.X.all().get({attr: 'j'}))
[[1, 2, 3], 42, {prop: "value"}]
June 07, 2010 by korenyushkin View Comments

Akshell 0.2

Akshell 0.2 is out! Akshell is is intended for rapid development of web applications in JavaScript and problem-free hosting them in the cloud. It features an online IDE; so the only tool required for development is a web browser. Akshell runtime environment enables applications to interact with each other; so they can be really modular and social.

In the 0.2 version the engine has been changed significantly. The framework has been ported to new infrastructure. And the new screencast has been recorded (thanks to Oleg Podsechin for narrating it).

Because there are a number of backward incompatible changes, the 0.1 support is not going to be dropped any time soon. All 0.1 applications are unaffected by this release.

In this post I'll describe the significant 0.2 features and migration from 0.1.


Instead of the custom include() function of 0.1, the 0.2 release features require() compatible with the CommonJS Modules 1.1.1 proposal. It should make Akshell applications more portable and enable you to export existing CommonJS libraries to Akshell.


Now Akshell supports handling of binary data through the Binary class. It's a mutable fixed-length numeric byte storage type. The CommonJS Binary/F proposal inspired its interface.


The new function opens a file and return an fs.File object. It supports common reading, writing, and positioning file stream operations. The uploaded files are also represented by fs.File instances (these ones are read-only).


The Proxy class brings simple means of metaprogramming to JavaScript. Proxy objects intercept property access and react accordingly. For example, the rv object is an instance of Proxy. It transparently maps database relation variables to JavaScript object properties.


The core library has been decoupled from the basic Akshell library. The ak framework is no longer required for development in Akshell; only the core library is a must. It wraps the engine APIs and provides a JSGI interface to request handling. You can bring a JSGI compatible framework or middleware to Akshell or create your own.


If you have an Akshell application, you need to migrate it to 0.2 to experience these new features. Here are some basic steps to perform.

  1. Replace all include() and use() by require(). Require the 0.2 version of the ak framework. Substitute:

    ak.use('ak', '0.1');
    ak.update(this, ak);

    ... by:

    require('ak', '0.2').setup();
  2. All module variables declared by var are now module-local; so you can remove anonymous functions wrapping modules.

  3. Replace the __root__ global variable by exports.root.

  4. Replace the __main__ global variable by exports.main. exports.main defaults to the defaultServe() function; so you can just remove a line like this:

    var __main__ = defaultServe;

  5. Use the create() RelVar method instead of db.create().

  6. Rename __main__.js to main.js.

  7. Change the engine version in the Administrate tab and test the application.

  8. Enjoy!

May 18, 2010 by korenyushkin View Comments

Public Beta

Today, 13 April 2010, I launched the public beta of Akshell. Here is a quick overview of the current Akshell environment.

Ready Tools

These tools should be used in everyday Akshell development.

ak is the basic Akshell library, the foundation of all applications. The documentation describes it in detail.

form is a form-handling library, a port of the Django forms library.

log is a logging utility. It's useful for debugging.

markdown is a library for processing the Markdown language. It's employed in the blog application, which you are using right now. By the way, the blog code is a good example of a common Akshell application.

Work in Progress Tools

These and other tools should make Akshell environment really handy and pleasant.

guard should enable a user to control access of applications to the user's data stored in other applications.

profile should store user profiles and provide an API for accessing them.

config should store configuration information.

All tools are open, their Mercurial repositories are hosted on bitbucket. If you are interested in the development of the environment, you are welcome to join it. Just write me to


April 13, 2010 by korenyushkin View Comments