Skip to content
This repository

The OK Web Server

branch: master

This branch is 0 commits ahead and 0 commits behind master

Merge pull request #33 from Sidnicious/patch-output-events

Add optional callbacks to output_hdr and output_fragment
latest commit 58e629f7a6
Mike Maxim mmaxim authored April 23, 2014
Octocat-spinner-32 build Accommodate perl in either usr/local or usr, for the benefit of new f… January 06, 2009
Octocat-spinner-32 client Made the conversions from str to char* explicit. September 19, 2013
Octocat-spinner-32 conf clean hose December 12, 2011
Octocat-spinner-32 contrib I think this fixes the coredumps in https clients when the caller tim… October 25, 2011
Octocat-spinner-32 dist small tweak for gnu autotools December 17, 2005
Octocat-spinner-32 docs test checkin March 20, 2007
Octocat-spinner-32 examples clean hose December 12, 2011
Octocat-spinner-32 ezdb Improve error reporting of timeouts February 20, 2014
Octocat-spinner-32 htdocs clean hose December 12, 2011
Octocat-spinner-32 libahttp Check for request line too-big-ness later, fix spurious 414s March 20, 2014
Octocat-spinner-32 libamt Added replyref in amt::req_t (useful for rpcc generated servers) March 26, 2012
Octocat-spinner-32 libamt_pthread svn merge -r5765:5774 svn+ssh://… September 13, 2011
Octocat-spinner-32 libamysql Made the conversions from str to char* explicit. September 19, 2013
Octocat-spinner-32 libaok Add optional callbacks to output_hdr and output_fragment April 23, 2014
Octocat-spinner-32 libokssl okssld: don't use SSL_pending before the handshake is done. April 11, 2013
Octocat-spinner-32 libokxml Made the conversions from str to char* explicit. September 19, 2013
Octocat-spinner-32 libpub Merge pull request #31 from jeffljones/master April 21, 2014
Octocat-spinner-32 librfn json2pub function that can fail louder March 27, 2014
Octocat-spinner-32 libweb initialize our bools March 31, 2014
Octocat-spinner-32 logd Made the conversions from str to char* explicit. September 19, 2013
Octocat-spinner-32 m4 need empty file to get git to checkin empty dir, for mnahas November 08, 2011
Octocat-spinner-32 notes svn merge -r5280:5301 svn+ssh://… April 30, 2010
Octocat-spinner-32 okd okd: Don't use peek to route requests since, on Linux, it may not exp… February 19, 2014
Octocat-spinner-32 pub fix coredumps for pubd under linux January 07, 2013
Octocat-spinner-32 py Fix error reporting April 10, 2014
Octocat-spinner-32 ssld add support for ecdh key exchange stuff December 11, 2013
Octocat-spinner-32 test Fix uint function when called on uints July 08, 2013
Octocat-spinner-32 tmp a failed attempt at a pipelined client (useful for testing) January 17, 2009
Octocat-spinner-32 tools clean house December 12, 2011
Octocat-spinner-32 xmlrpcc Add a "compressed" flag for RPC args and responses January 22, 2014
Octocat-spinner-32 .gitignore pub function for parsing a string as CGI January 15, 2014
Octocat-spinner-32 AUTHORS more authors! December 12, 2011
Octocat-spinner-32 COPYING license updates, etc. November 09, 2004
Octocat-spinner-32 ChangeLog Initial revision September 25, 2003
Octocat-spinner-32 no need for own lib, jam it through July 29, 2011
Octocat-spinner-32 fix teh news December 12, 2011
Octocat-spinner-32 Update November 20, 2012
Octocat-spinner-32 acinclude.m4 merge 2411:2412 from devel/1.1 December 16, 2006
Octocat-spinner-32 acokws.m4 Add a "compressed" flag for RPC args and responses January 22, 2014
Octocat-spinner-32 autoconf.sed svn merge -r5280:5301 svn+ssh://… April 30, 2010
Octocat-spinner-32 cfg Switched cfg over to bash to enable using printf to handle quoting pr… October 12, 2012
Octocat-spinner-32 version bump April 07, 2014
Octocat-spinner-32 setup.gnu This was just a typo. More things like this exist in this file, I'll … February 23, 2012

OKWS -- The OK Web Server

OKWS is a Web server, specialized for building fast and secure Web services. It provides Web developers with a small set of tools that has proved powerful enough to build complex systems with limited effort. Despite its emphasis on security, OKWS shows performance advantages relative to popular competitors. Commercial experience with OKWS suggests that the system can reduce hardware and system management costs, while providing security guarantees absent in current systems.

As of 8 Dec 2011, OKWS is still being maintained and worked on, with 3.1 being the active development version. There are no big feature-development plans on the horizon, but we're regularly committing bugfixes and extensions.


1 Dec 2011

  • Move everything over to GitHub for primary project hosting!

See our News file for a fuller list of updates.

A Better Architecture

The basic idea behind OKWS is that each Web service you write (such as ''search'' or ''newsletter-subscribe'') should run as a single process. There is no reason to sprinkle the same program across hundreds of address spaces just to get client concurrency. OKWS is built with this principle in mind. A Web service in OKWS is compiled into a free-standing process, calling upon our boilerplate libraries. Other standard helper processes run on the system, to direct traffic, to launch and relaunch applications should they crash, to log HTTP transactions to disk, and to access static HTML templates.

Programming in OKWS follows the single-threaded, event-driven model. No need to worry about the synchronization snafus that creep up when using multi-threaded or multi-process Web servers.

Who Runs OKWS?

Some example sites include:

Platform Support

OKWS runs on most Unixes, and has been tested extensively on FreeBSD and Linux.

Software Tools

Though OKWS is event-based at its core, A new tool, that is entirely compatible with existing libasync-based code, is [[sfslite::tame2]], which we urge you to read more about. It's a simple C++-level rewriter that makes your event code look more like threaded coded. I.e., you can make a sequence of serial blocking functions within one function body.


OKWS is freely available under a GPL v2 license.

Academic Publications

  • Building Secure High-Performance Web Services With OKWS. Maxwell Krohn, in Proceedings of the 2004 USENIX Annual Technical Conference USENIX 2004, Boston, MA, June 2004. [ ps | ps.gz | pdf ].

  • Events Can Make Sense. Max Krohn, Eddie Kohler and M. Frans Kaashoek, in Proceedings of the 2007 USENIX Annual Technical Conference USENIX 2007, Santa Clara, CA, June 2007. [ ps | ps.gz | pdf ].

Our GitHub Wiki Documentation Center

Active People

  • Max Krohn
  • Mike Maxim
  • David Koh
  • Eli Gwynn

Patch Contributors

  • Ben Hollenstein
  • Ian Rickard (Apple Darwin Patches)
  • Michael Walfish (various patches and fixes for API problems).
  • Benjie Chen
  • OkCupid team, including Tom Quisel, Mike Maxim, Tom Jacques, and Eli Gwynn.
Something went wrong with that request. Please try again.