Click here to Skip to main content
12,289,383 members (73,480 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


104 bookmarked

Webio - An embedded web server

, 20 Jul 2008 BSD
Rate this:
Please Sign up or sign in to vote.
A C-language web server with embedded files and CGI.


Webio is a small-footprint web server, designed to be embedded in an application or an embedded system. It's useful when you want to implement a complex browser based GUI (which can be accessed by everything from PCs to cell phones) in a very efficient manner. Webio compiles and runs equally well under Linux and Windows, and should be easy to port to most other platforms. It comes with a programmer's manual (progman.html) which explains how to use it and how to port it.


In 1996, I wrote one of the first web servers designed for embedded devices. In those days, most embedded devices had no file systems, so I created the "HTML compiler" to embed the files into the code image. Similarly, the lack of a file system led to C-language CGI functions.

Creating basic GUIs with this system was so easy that I started using it in Windows applications in preference to the Windows GUI. Back then, before JavaScript and CSS, it was somewhat limited - for example, it wouldn't make a very good "photo shop" type program - but for basic GUIs, it was great.

As my company started using Linux and Browser-enabled hand-held devices, a really huge advantage became obvious - my new applications worked everywhere, not just on Windows. The user was not tied on one OS or one type of device. They didn't even have to be near the machine running the application.

In 2007, I needed a similar server for an open-source project. I had left the previous company, which still retained the rights to the my old server. They wouldn't open source it, and nothing suitable was available in the public domain. I decided to create a second generation version of the server and release it under the BSD license so I would never have to write it again.

The result is Webio - my second (and hopefully last) embedded web server.

Using the code

The Windows version is probably of most interest to CodeProject readers, and so the .zip file is made available here. Follow these steps:

  1. Unzip it (preserving the directory structure).
  2. Type buildfs to compile the embedded file system.
  3. Open the project file with Visual C++ 6.0 or newer, and click Build.

You should get a little application which, when run, allows your PC to act as a web server - point a browser at it. You can do this in loopback by typing "http://127.1" in your browser's location bar.

Points of interest

Webio has a few improvements over my first embedded web server:

  • The "HTML compiler" is now a full-fledged file system builder, designed from the group up to generate not only file images in your C code, but also generate code for C-language CGI.
  • The server buffers all code-generated output, allowing accurate Content-Length fields on files with variable sized SSIs.
  • A fast path for binary files improves performance.
  • Portability across Windows/Linux/Embedded systems is enhanced.


  • July 2008 - First public release.
  • July 27th - Updated, call this release 1.1. Changes:
    • Added command line option to set the HTTP port (default is still 80).
    • Error message is more helpful if another web server already has port 80.
    • Fixed some typos and omissions in the manual.


This article, along with any associated source code and files, is licensed under The BSD License


About the Author

Chief Technology Officer
United States United States
See my bio here:

You may also be interested in...

Comments and Discussions

QuestionBuilding webio for Linux Pin
Peter Dickinson8-Sep-11 3:12
memberPeter Dickinson8-Sep-11 3:12 
GeneralA couple of allocation/free bugs Pin
jbartas17-Sep-10 13:44
memberjbartas17-Sep-10 13:44 
Questionmultiple user/password request Pin
pbisiac15-Apr-10 9:40
memberpbisiac15-Apr-10 9:40 
AnswerRe: multiple user/password request Pin
jbartas18-Apr-10 16:34
memberjbartas18-Apr-10 16:34 
GeneralRe: multiple user/password request Pin
rcl18-Feb-11 9:09
memberrcl18-Feb-11 9:09 
SuggestionRe: multiple user/password request Pin
Member 15685064-Nov-11 0:37
memberMember 15685064-Nov-11 0:37 
GeneralSegmentation fault Pin
biana26-Nov-09 21:02
memberbiana26-Nov-09 21:02 
GeneralRe: Segmentation fault [modified] Pin
lxlxlx15-Jun-10 2:14
memberlxlxlx15-Jun-10 2:14 
GeneralHeap failure after some time Pin
pbisiac4-Nov-09 5:22
memberpbisiac4-Nov-09 5:22 
GeneralRe: Heap failure after some time Pin
jbartas5-Nov-09 6:47
memberjbartas5-Nov-09 6:47 
AnswerRe: Heap failure after some time Pin
pbisiac9-Nov-09 7:04
memberpbisiac9-Nov-09 7:04 
GeneralRe: Heap failure after some time Pin
jbartas15-Nov-09 16:40
memberjbartas15-Nov-09 16:40 
GeneralRe: Heap failure after some time Pin
PanuO19-Apr-10 1:34
memberPanuO19-Apr-10 1:34 
Generalwi_putfile Pin
pbisiac8-Jul-09 21:20
memberpbisiac8-Jul-09 21:20 
GeneralFile buffering and embedded system Pin
pbisiac7-Jul-09 6:03
memberpbisiac7-Jul-09 6:03 
GeneralRe: File buffering and embedded system Pin
jbartas7-Jul-09 18:32
memberjbartas7-Jul-09 18:32 
GeneralRe: File buffering and embedded system Pin
pbisiac7-Jul-09 21:06
memberpbisiac7-Jul-09 21:06 
GeneralRe: File buffering and embedded system Pin
pbisiac8-Jul-09 20:28
memberpbisiac8-Jul-09 20:28 
GeneralRe: File buffering and embedded system Pin
jbartas9-Jul-09 8:21
memberjbartas9-Jul-09 8:21 
GeneralADDR_ABORT ARM exception on multiple GET Pin
pbisiac3-Jul-09 5:22
memberpbisiac3-Jul-09 5:22 
GeneralRe: ADDR_ABORT ARM exception on multiple GET Pin
pbisiac3-Jul-09 6:06
memberpbisiac3-Jul-09 6:06 
GeneralRe: ADDR_ABORT ARM exception on multiple GET Pin
jbartas6-Jul-09 7:25
memberjbartas6-Jul-09 7:25 
Generalwi_putfile Pin
pbisiac2-Jul-09 6:27
memberpbisiac2-Jul-09 6:27 
QuestionWhat about AJAX ? Pin
pbisiac26-Jun-09 2:37
memberpbisiac26-Jun-09 2:37 
AnswerRe: What about AJAX ? Pin
jbartas1-Jul-09 7:11
memberjbartas1-Jul-09 7:11 
GeneralRe: What about AJAX ? Pin
pbisiac2-Jul-09 20:58
memberpbisiac2-Jul-09 20:58 
GeneralThanks Pin
Zaqro26-Jun-09 0:25
memberZaqro26-Jun-09 0:25 
GeneralMakefile for Linux Pin
jbartas11-May-09 8:36
memberjbartas11-May-09 8:36 
GeneralCompiling with Linux Pin
el06b15027-Apr-09 22:29
memberel06b15027-Apr-09 22:29 
GeneralRe: Compiling with Linux Pin
jbartas11-May-09 8:21
memberjbartas11-May-09 8:21 
GeneralRe: Compiling with Linux Pin
Member 14030153-Sep-09 1:10
memberMember 14030153-Sep-09 1:10 
GeneralRe: Compiling with Linux Pin
Member 362026328-Nov-09 5:57
memberMember 362026328-Nov-09 5:57 
QuestionWhy don't you add webio to wiki? Pin
soltan1-Dec-08 21:45
membersoltan1-Dec-08 21:45 
GeneralReturning file with a dynamically generated URL Pin
asamama14-Nov-08 2:59
memberasamama14-Nov-08 2:59 
QuestionCould we please have this wonderfule cWebio ? Pin
MicroImaging24-Oct-08 12:29
memberMicroImaging24-Oct-08 12:29 
AnswerRe: Could we please have this wonderfule cWebio ? Pin
ravenspoint24-Nov-08 16:57
memberravenspoint24-Nov-08 16:57 
GeneralA new release is ready. Pin
jbartas5-Oct-08 13:43
memberjbartas5-Oct-08 13:43 
GeneralWt -> Pin
pgquiles13-Sep-08 1:23
memberpgquiles13-Sep-08 1:23 
GeneralLink error Pin
Nagrom28-Jul-08 3:02
memberNagrom28-Jul-08 3:02 
GeneralRe: Link error Pin
jbartas29-Jul-08 5:31
memberjbartas29-Jul-08 5:31 
GeneralRe: Link error Pin
Nagrom30-Jul-08 8:14
memberNagrom30-Jul-08 8:14 
Generalthanks for sharing Pin
beejoy26-Jul-08 22:31
memberbeejoy26-Jul-08 22:31 
GeneralA Recipe for displaying dynamic content Pin
ravenspoint23-Jul-08 7:04
memberravenspoint23-Jul-08 7:04 
GeneralRe: A Recipe for displaying dynamic content Pin
ravenspoint23-Jul-08 10:02
memberravenspoint23-Jul-08 10:02 
GeneralRe: A Recipe for displaying dynamic content Pin
ravenspoint23-Jul-08 10:39
memberravenspoint23-Jul-08 10:39 
GeneralRe: A Recipe for displaying dynamic content Pin
ravenspoint23-Jul-08 13:11
memberravenspoint23-Jul-08 13:11 
GeneralRe: A Recipe for displaying dynamic content Pin
ravenspoint24-Jul-08 9:30
memberravenspoint24-Jul-08 9:30 
GeneralUsing Webio in a C++ program Pin
ravenspoint23-Jul-08 4:07
memberravenspoint23-Jul-08 4:07 
GeneralBuild & Run workarounds Pin
ravenspoint22-Jul-08 8:34
memberravenspoint22-Jul-08 8:34 
GeneralRe: Build & Run workarounds Pin
ravenspoint22-Jul-08 9:02
memberravenspoint22-Jul-08 9:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160518.1 | Last Updated 20 Jul 2008
Article Copyright 2008 by jbartas
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid