Version: 1.5.0
Date: 2005/10/18
features | limitations | demo | requirements | install | changes | credits | contact

b. is a Web-based manager for Web bookmarks. Bookmarks are stored in an XML file. Operations on the data are done with Perl scripts.


Collaborative bookmarks

A new and powerful feature is the ability to share bookmarks. These shared bookmarks may be publicly viewed by all, while a certain set of users have the ability to add or change them. These users can also add comments to the shared bookmarks, as in a bulletin-board. The display of the shared bookmarks is highly configurable: one can show extra information associated with a bookmark, such as its popularity, when it was last visited, when it was added, etc. With these new features, b. becomes a collaborative space for sharing discoveries of the Web.

Old-style b. functionality is not lost however: one can still maintain a set of private bookmarks just as before. What's new is the option to exchange bookmarks between the private and shared sets.

Accessible from any Web browser

The main advantage for storing your bookmarks on the Web is to have them accessible from any Web browser. b. produces XHTML 1.0 code, doesn't use any Javascript, and is best viewed with a CSS1-compliant browser such as Netscape 6+ / Mozilla, Internet Explorer 5+, and Opera 5+.

Bookmark data stored in XML format

XML has quickly become an acknowledged standard for the management of data transmitted over the Internet. Its foundation as a markup language like HTML gives it a wide base of users, and its precept of separating data from its display provides XML versatility for the many possible uses of the data.

I'm using a DTD for collaborative bookmarks called XBEL-collab. It's a slight modification of the XBEL DTD for bookmarks, to allow for features like comments and hit counts. The original XBEL DTD was created by python.org.


In a themes/ subdirectory, one can determine the look of b. with CSS stylesheets, custom graphics, and HTML templates. There are more customization options with this new release.


b. supports multi-user environments. Using basic Web server user authentication (i.e. by password-protecting the b./ directory), only certain users can have access to b.. Each user has his/her own bookmarks and optionally can have his/her own theme, welcome message, etc.


Must close browser to log off

This is a limitation of basic HTTP user authentication: once you have access to a directory, you always have access until your browser session has ended.

Modify bookmarks from one machine at a time

Problems can result if one attempts to modify bookmarks from two different machines at the same time. (Viewing and accessing the data from more than one machine is fine.) Although a backup of the XML file is written every time it is modified, something more secure could be implemented.


View an example of shared bookmarks >>. This would be the publicly accessible view open to all.

Also view a version of the same bookmarks from a contributer's perspective >>. This is the same set of bookmarks, but with additional buttons for adding / editing the bookmarks (crippled for this demo). For fun, I've specified a different theme for this view. It is recommended that these pages be viewed with a CSS1-compliant browser like Netscape 6+ / Mozilla, Internet Explorer 5+, or Opera 5+.

Finally, here is a view of an example set of personal bookmarks >>.

Installation Requirements

Must be able to run Perl scripts on your Web server. For multi-user environments, must be able to password-protect the b./ directory.

Installation Instructions

Note: If you have a pre-existing installation of b., save a copy of it so that you don't lose your bookmarks or themes! I would move all existing directories and begin with a fresh installation. After everything's working, you may copy your old b.xml bookmarks and themes back.

new | upgrade | password-protect | customize | collab | tips

New installation

Beginning with version 1.4.0, CGI scripts have been separated from themes and templates, so hopefully installation will be easier for most users.

Unzipping creates two folders cgi-bin/ and b.themes/. Copy the contents of cgi-bin/ to your web server's cgi-bin/ directory, and the b.themes/ directory to where your HTML documents reside, usually public_html/. For example, a typical directory structure on your web server would look like


. If the Web host is Unix, make sure all of the *.cgi files are executable.

chmod 755 cgi-bin/b./*.cgi chmod 755 cgi-bin/b.shr/*.cgi

The following files and directories must be writable by the Web server.


To test that your initial setup is working, go to


Your URL may look slightly different from this one, but you get the idea. You should see a welcome message and some buttons at the top. Click on see. If you get an error, then check to make sure you've made cgi-bin/b./b.xml readable by the web server. If you don't get an error, then you're at a good place. Next, you'll probably want to password-protect the cgi-bin/b./ directory. This will allow for multiple users as well as collaborative bookmarks. To set up password-protection, see notes >>. Once you've done this, b. will create a new starter bookmark file in the cgi-bin/b./users/ subdirectory, obsoleting the b.xml bookmark file in the root b./ directory. If you want to preserve any changes you've made to this file, follow these steps: 1) close your browser; 2) download the bookmark file you wish to save, usually b./b.xml; 3) upload this file into the b./users/<user_name>/ directory, overwriting the starter bookmark file.

To view the publicly accessible collection of bookmarks, go to http://<some_domain>/b.shr/index.cgi. Note there are no buttons to add or modify the bookmarks. Also note that the look of b.shr can be quite different from b.!

Upgrade from previous version

It is recommended that you first save a copy of your old installation of b., especially the b.xml bookmark files, the b.conf> configuration files, as well as any custom themes. If you are upgrading from a version prior to 1.1 (eg from 1.0 -> 1.1), don't bother retaining any b.conf files, as the format for those files has changed. After archiving, clear out or delete the b./ folder on the web server to begin fresh. Follow the New installation instructions above /\. Once things seem to be working properly, you may upload your saved b.xml files. If there's a problem, check that the b.xml files are still writable by the web server.

Note on password-protecting b.

For user authentication, b. uses the basic HTTP/1.0 security mechanisms standard with most Web servers. So you must set up your Web server to do this in order to take advantage of the multi-user features. I'm not going into how this is done since this differs among Web servers. If you're the admin of your Web server, then you may already know how to do this. If you are setting up b. on a remote server, then your host provider will probably have some Web-based configuration tool which allows you to specify certain directories as accessible to certain users. You'll need to provide a user name and password for each b. user.

Customize b.

Many customization options have been localized in various b.conf files. The b.conf file in the main b./ directory provides default options for the private bookmarks. View that file to see what options are available. Users may override these default options with a b.conf in his/her own user directory. The b.conf file in the b.shr/ directory allows many of the same options as the b./b.conf file, except that they apply to the b.shr bookmarks.

New themes may be added by adding subdirectories under the themes/ directory. Use the existing themes as examples. You may specify alternate bookmark and folder icons, as well as custom HTML templates.

The files b.template.xml and b.template.conf in the b./ directory are the starter files created for new users if they don't already have those files. You may modify these templates to customize starter environments for new users.

Collaborative bookmarks

By default, the collaborative bookmarks feature is off. To turn it on, set


in your cgi-bin/b./b.conf directory. Now you will have a few more menu buttons available, all prefixed with shr:. Use shr:add to move a personal item to the shared file. Click on shr:see to see your (and other's) changes. From the shared bookmarks view, you may modify and delete your own contributions, add comments to any item, and copy any item to your personal file.

Tips and troubleshooting

Situation: You want to skip the welcome message and go straight to your personal bookmarks.

Link to cgi-bin/b./b.see.cgi instead of cgi-bin/b./index.cgi.

Situation: You'd like an easier way to add a page to your b. bookmarks.

See the main b. page under User Contributions >>.

Situation: You want to convert b. bookmarks into other formats, or vice versa.

See the main b. page under User Contributions >>.

Situation: You have set up password protection but your private b.xml is not being written to, although your private directory inside users/ has correctly been created.

Possibly your Web server is not authenticating POST requests. If you're running on an Apache server, then check to see that there is not a directive <limit GET> for your b./ directory. If there is, change it to <limit GET POST>. Thanks to Wilson Li for figuring this one out.

Situation: You wish to customize the HTML above and below the bookmarks.

For your theme, create or modify HTML templates in its theme folder. For example, in the folder b.themes/<theme_name>/, the HTML template files would be


See the b.themes/blum/ for examples.

Situation: You want to insert the shared bookmarks as a server-side include (SSI).

In the file b.shr/b.conf, look for the two variables ssi_caller and scripts_path. Set ssi_caller to the .shtml file which includes cgi-bin/b.shr/index.cgi as a server-side include. For example,


. Then set scripts_path to the web path of the cgi-bin/b.shr/ directory, such as


. The final thing to do is to eliminate the automatic header and footer HTML which surround the bookmarks. The way to do this is to create empty files named b.shr.header.html and b.shr.footer.html within the theme folder you are using. (You may not want them completely empty; if you wish to include a link to the theme's style sheet, include the line

<link rel="stylesheet" type="text/css" href="___css_path___"/>

within your b.shr.header.html. Leave ___css_path___ untranslated; the correct substitution will be made.)

Situation: You want to add a charset type to the HTTP return headers.

Look for the append_to_content_type variable in the conf files.


1.5.0 2005/10/18
Added interoperability with Firefox Bookmarks Synchronizer >>. This includes workarounds for bookmark id's containing '#' signs and '%3A' entities. Thanks to f_x for bringing this to my attention.
Fix for splicing new items into xbel files using different whitespace.
1.4.4 2005/05/22
Added a confirmation popup when deleting items. Thanks to Flying Albert for this contribution. You may turn this off in b.conf.
1.4.3 2004/04/08
Thanks to Ronald Tin for his patch yielding the following improvements: more CGI fields HTML-encoded to interface better with scriplets; general HTML-encoding improvements; added 2-digit time format. Additional changes include: new configuration parameter 'link_target' allows one to target links to another window or frame (suggested by Robert Schmid); removed option of exporting shared bookmarks if not necessary (suggested by Martin Olsson).
1.4.2 2003/09/20
Code contribution from Deb Bassett: addition to b.mod.cgi to auto-fill href and title. Useful in conjunction with her bookmarking JavaScript (see User Contributions > Integration into your browser on the main b. page >>) for more on this.
1.4.1 2003/08/24
Minor addition suggested by John Mellor: add 'mailto:' to beginning of URI if an '@' sign is detected. (This feature may be turned off in the b.conf files.)
1.4.0 2003/08/10
Separated CGI scripts from themes. Renamed all executable scripts to have .cgi extension. Allow default view mode for personal bookmarks. Version 1.3.3 upgraded to stable.
1.3.3 2002/03/17
Fixed more bugs from 1.3.1. Thanks to Alan Schussman and Tomki for identifying these bugs.
1.3.2 2002/03/14
Nasty bug introduced in 1.3.1: modifying a folder/bookmark's description would also modify the descriptions for all subsequent items! This has been fixed.
1.3.1 2002/03/11
Version 1.3.0 broke the display for Internet Explorer on the Mac. This has been fixed. (Sorry Mac users.) Fixed a bug where a populated folder could not be moved under another folder. A new bookmark without a title is given a default name of "Untitled". If a URI is submitted without a protocol type (eg http://), then a default protocol of http:// is prepended automatically. Finally, added a 'Tips and techniques' section /\ to the README. Thanks for Tomki for pointing out some of these bugs.
1.3.0 2002/02/01
Several new features this time. A search utility allows you to quickly access your bookmarks and folders. New viewing options enable you to display your bookmarks in two additional viewing modes: 'all' to view all bookmarks on one page, and 'sngl' to view one open folder at a time. Buttons have also been added so that you can shift items up and down within a folder. A nice convenience is the ability to 'wrap' movements around the ends of a folder, so that shifting down the last item will move it to the beginning of the folder. Finally, you can now export your bookmarks into raw XML or simple HTML to easily archive them. Other changes with this version are a few bug fixes, and theme changes to accomodate the new features. Also removed theme semaphore-ssi as its presence was purely pedagogical and furthermore unnecessary since HTML templates are supported. Credit goes to E. Lev for some of the ideas for this release.
1.2.0 2001/11/18
New feature is add-on scripts. Using add-on scripts, one can insert custom info for a bookmark / folder, such as a thumbnail image or a link to Google's "Find similar" feature. In fact, these examples are already implemented in the default add-on script which comes with the distribution. The b.css style sheets have new rules to cope with the new add-ons. Finally, added ability to open / close folders by clicking on the folder name. Thanks to Will Norris for these ideas and some code.
1.1.4 2001/11/12
I stupidly trusted a search-and-replace utility, which left some text garbage in two files b.link.pl and b.usrnfo2.pl. These have been cleaned.
1.1.3 2001/11/11
Corrected for include files not being found on Microsoft IIS servers (code contributed by Andy Low). Adjustments to semaphore theme due to weird IE6 CSS handling.
1.1.2 2001/10/19
Fixed b.shr/themes/blum/b.css again; there was a problem with this style sheet in Mozilla / Netscape 6. This is the only file changed from version 1.1.1. Incidentally, this fix also makes this theme correctly render for IE5 on Windows.
1.1.1 2001/10/18
Consistent EOLs for all files. This fixes CSS problem for Macs. Most other fixes are in the theme style sheets: theme semaphore now constrained to width 320px as in old 1.0 version; theme blum now has correct wrapping of bookmark and folder titles (unfortunately this means theme blum does not work for IE5 on Windows due to its faulty CSS compliance. Lastly, replaced 'target="_new"' with 'target="_blank"' in b.display.pl for correctly popping links into new windows.
1.1.0 2001/06/05
Major development release with many new features. The major new features are: support for collaborative bookmarks; greater control of bookmark display with HTML template files; timestamping of created/modified/accessed times for bookmarks; record of hits for shared bookmarks; each user has own informational page; new theme; et.al.
1.0 2001/05/15
Version 0.4.1 below upgraded to stable version 1.0. No different in other respects.
0.4.1 2000/12/19
Bug fix for Apache complaints of "Not enough arguments for mkdir...". Thanks to Sean McGrath for catching this. Sean also suggested a clarification for the installation instructions.
0.4.0 2000/11/15
Can support multiple users when used in conjunction with basic HTTP user authentication. This feature is optional and no script modification is necessary if you wish to stay single-user, or if you wish not to use password-protection.
Fixed bug which disallowed the deletion of bookmark/folder descriptions. Thanks to Mark Jordan for pointing this bug out.
Some minor code cleanup and fixes.
0.3.0 2000/09/15
Added the ability to open and close folders. By hiding rarely-used bookmarks, one can speed up the bookmark display.
Fully compliant with the XHTML 1.0 >> strict specification. XHTML is an XML-ization of HTML 4 for broader accessibility among various browsers, present and future.
Folders and bookmarks can now have the characters &, ", <, > in their titles/descriptions. Other special characters may be inserted by inserting the appropriate HTML codes (e.g. &copy; for ©).
0.2.1 2000/07/03
Fixed bug: When deleting an item, the parser code would incorrectly mark the end of the range to be deleted. The result would be the unintended deletion of extra items. This bug has been fixed.
0.2.0 2000/06/28
Initial release


The initial parsing of the XML data was aided by the regular expressions in REX >>, written by Robert D. Cameron. The XML spec for bookmarks, XBEL >>, was created by python.org.


Check for the latest at http://www.n-gon.com/freshmeat/b./. You can also e-mail me at victor@n-gon.com regarding comments, suggestions, bugs, and some assistance.