Welcome to Hypershell

Hypershell is a collection of concepts and frameworks that redefine the way web application is built. Using Hypershell, a web application is split into many small components called Hypershell scripts that communicate with each other solely through HTTP requests.

Fork on GitHub

Fireshell is a prototype Firefox extension to demonstrate the concepts in Hypershell.


Fireshell on GitHub »

Working in Progress

This project is still actively under development so no release is available yet. Please wait patiently for the meanwhile.

Contribute

Hypershell is currently a solo project. Please contact the author Soares Chen if you'd like to help out or have any suggestion or feedback.

Send An Email

Inspiration

Hypershell brings the concept of Unix shell and combine it with RESTful web services. This creates two new concepts: Hypershell pipeline and HTTP subrequest, which allow web services to be used in a way similar to traditional shell scripts.

Hypershell Pipeline

Hypershell pipeline is similar to the Unix pipeline except that the pipeline is operated through HTTP instead of STDIN/STDOUT. Through Hypershell pipeline the HTTP response returned by one web service becomes the POST body in the HTTP request of another web service in the pipeline.

HTTP Subrequest

HTTP subrequest is a HTTP request sent within a web server to itself. It is equivalent as issuing HTTP request to http://localhost/. HTTP subrequest can be nested indefinitely, making it possible to issue HTTP subrequest within another HTTP subrequest.

Motivation

Hypershell aims to solve a hard problem in web development: component reusability. Web applications today are developed as monolithic pieces with very few modular components that can be shared across different applications. It is hard enough to write components that are reusable across different web frameworks, let alone across different programming languages.

The fact that web components are not reusable just doesn't make sense to me. I want to look at web applications as software that web developers can simply install and run, just like traditional desktop software. PHP has actually done a very good job at making the installation of web applications extremely easy. For instance, it is just a matter of few clicks before a Wordpress blog or a Mediawiki site is up and running. However, there is just one thing that I cannot understand: Why is it still so hard to install two different applications and have them integrated seamlessly? Say that I want to build a website that have both the feature of blog and wiki, why is it not possible to just install Wordpress together with Mediawiki and make them work together like software packages do?

I see the whole problem of poor reusability in web applications lies deeply in the architecture behind the software is written. Today we have many sophisticated web frameworks that solve the architecture problem in elegant ways. Most of these frameworks have a way to make web applications written on it both modular and scalable. However the problem is that there are so many web frameworks out there, and every one of them have different approaches to solve the same problem. The end result is that web components are so tightly coupled with their underlying framework that it is not possible to efficiently share components written in different frameworks. For example, a comment component cannot be used with a video player component if the two use different user management system; A blogging component cannot be used with a photo gallery component if the two use different templating and theme system; A wiki component cannot be used with a CMS component if the two use different URL routing system.

I don't like the idea of writing something from scratch just because the web component that I want is written in a different framework or language that I am using. I don't want to be restricted to a particular language, such as Python, just because the majority of existing web components are already written in that language. My goal is to enable component reusability, so that I can develop web components using my own desired language and framework. To achieve my goal, I need to design a universal web architecture that is both scalable and compatible with all programming languages.

I finally found the solution for the universal web architecture, and this architecture is called Hypershell. The reason I believe that it can solve the problem is because Hypershell is a web architecture that is purely based on HTTP. The main inspiration behind Hypershell is by applying the concept of Unix pipeline to HTTP, so that we can pipeline the HTTP response of one web servie to the HTTP request of another web service. This is the foundation of applying the shellscript programming paradigm to web development.

(To be continued..)

Hypershell Scripts

Hypershell scripts are very much similar to traditional Unix shell scripts, except that they accept a HTTP request instead of STDIN and return a HTTP response instead of STDOUT.

A Hypershell script can call another Hypershell script through HTTP, even when both Hypershell scripts are located on the same server. Similar to Unix pipeline, Hypershell scripts can be pipelined except that the pipeline happens through Hypershell pipeline instead of through the operating system's STDIN/STDOUT.

Note: It is important to not be confused Hypershell with Unix shell emulators on webpages. Even though Hypershell borrows a lot of concepts from the Unix shell, the technology and architecture behind Hypershell is completely different from the Unix shell.

Under Construction

I appologize that the rest of this website is still under construction. For more information, please refer to the GeekCamp presentation slides or contact me direct at crf@hypershell.org.

2011 Geek Camp Presentation

First Presentation Draft made in 2010