Table of Contents


Managed vs Unmanaged

fTelnet comes in both Managed and Unmanaged versions, and I can't stress enough how much I recommend using the managed version.

Why do I recommend the managed version? Because it's pretty much foolproof (no offense intended!), and doesn't require you to keep anything up to date, I do all that for you.

So if you want to stop reading now and go try the managed version instead, head on over to the Embed Wizard. Seriously, you'll be up and running in under 5 minutes. It's awesome.


I see you're still reading, so I guess you don't want to use the managed version...that sucks because I put a lot of effort into getting that up and running!

Anyway, before you 100% decide which version to run, check of these differences:

  Managed Unmanaged
Installing Dead simple Lots of reading
Customizing Limited, but easy to do Full, but even more reading
Upgrading I keep everything up to date with the latest bugfixes and improvements You update as necessary. And don't forget to RTFM to see what I broke between versions
Support I'm there for you I'm there for you, but if it sounds like you didn't RTFM, or if you're in way over your head, my answer to your support request may be Use the Managed version!
Price Free, but the public proxies cost money to run so I'll only keep the ones that see a lot of use. If I decide to deactivate your preferred proxy due to low usage, a donation will be required to keep it up and running Free

Here's the Embed Wizard link again, just in case you changed your mind!

Back to top

How to get support

Email is the only way to get ahold of me. Usually I'm pretty good about answering quickly, but sometimes I need a break from the computer and it may take a day or two.

Don't forget to read this entire document and check out the demos before contacting me. I created the managed version to make things easy for you, so if you're deciding to use the unmanaged version that tells me you're looking for a challenge, and so you need to put some effort into said challenge before asking for help.

If you're truly stuck, click here for my contact form.

Back to top

How to install

Installing is pretty simple. If you're reading this that means you've already downloaded and extracted the archive, so just put all these files into an fTelnet directory on your webserver and you're good to go.

Back to top

How to use

Using fTelnet is almost as easy as installing it was. First you need to include the correct files. Assuming you have an index.html in your document root, and fTelnet in a subdirectory called fTelnet, you can do that by putting this in your <head> section:

<!-- CSS used to style the buttons/statusbar/keyboard/etc -->
<link href="fTelnet/fTelnet.css" rel="stylesheet">
<link href="" rel="stylesheet" id="fTelnetKeyboardCss">
<!-- Javascript used to power fTelnet -->
<script src="fTelnet/fTelnet.min.js" id="fTelnetScript"></script>

Now that you have the support files loading, you need to create a placeholder where you'll render the client, and then initialize it:

<div id="fTelnetContainer"></div>
<script>
    fTelnet.Init(); </script>

That should now get you up and running. Want a more complete example? Check out the demos

Back to top

How to customize

Ahh, now we get to the meat of the document. You've installed fTelnet, you've got it up and running, and now you want to customize it (what, you mean you DIDN'T want it to just connect to my server?!?)

So here's a complete (at the time of this writing, hopefully I'll remember to keep it up to date in the future!) list of variables that you can customize. You should assign values to these variables right before you call fTelnet.Init(). You should be able to assign them after you call fTelnet.Init(), but some of them may cause flicker (ie font or screen size changes), so best to do it before.

Variable Type Default Notes
BareLFtoCRLF boolean false

true: a BARE LINE FEED (one that is not preceded by a CARRIAGE RETURN) from the server will be treated as a CARRIAGE RETURN + LINE FEED pair

false: no translation of LINE FEED occurs (BARE or not)

Useful for servers that break the telnet spec and send "\n" instead of "\r\n" to end a line

BitsPerSecond number 57600 Lets you emulate a given connection speed. I don't recommend you use a value higher than this as it causes problems with painting (ie entire screens get drawn at once after a small but noticeable delay, rather than a couple lines at a time)
Blink boolean true

true: Characters are allowed to blink

false: Characters do not blink (instead the high background colours are enabled, like Windows command.com/cmd.exe do)

ButtonBarVisible boolean true

true: The connect/disconnect/download/upload/etc button bar is visible

false: The button bar is hidden

ConnectionType string telnet

rlogin: You're going to be making an rlogin connection (see other RLogin* settings below)

tcp: You're going to be making a raw tcp connection (no protocol will be used)

telnet: You're going to be making a telnet connection

Enter string \r The character(s) that get sent when the user hits the Enter key. Most BBSes expect a CARRIAGE RETURN only, but if your server follows the telnet spec and wants both CARRIAGE RETURN + LINE FEED, then change this to \r\n
Font string CP437 The character set to use. TODO need to add a popup that lists the available options
Hostname string bbs.ftelnet.ca The hostname (or ip address) of the server you want to connect to
LocalEcho boolean false

true: User input is echo'd to the screen

false: User input is not echo'd to the screen

Most BBSes handle echoing input back to the user, which is why the default is false

Port number 1123

If the server you are connecting to DOES SPEAK WebSocket, then you want to specify the port of the server here. I've arbitrarily chosen 1123 as the default WebSocket port in the server software I wrote because it (A) is > 1024, (B) has 23 in it, and (C) is the start of the fibonacci sequence

If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the port of the telnet server you'll be proxied to. This is usually going to be 23

ProxyHostname string blank

If the server you are connecting to DOES SPEAK WebSocket, leave this alone

If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the hostname (or ip address) of the WebSocket-to-telnet proxy that you'll be connecting to

ProxyPort number 1123

If the server you are connecting to DOES SPEAK WebSocket, leave this alone

If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the port of the WebSocket-to-telnet proxy that you'll be connecting to

ProxyPortSecure number 11235

If the server you are connecting to DOES SPEAK WebSocket, leave this alone

If the server you are connecting to DOES NOT SPEAK WebSocket, then you want to specify the secure port of the WebSocket-to-telnet proxy that you'll be connecting to. Some server software listen for wss:// connections on a different port than ws:// connections, hence the two port numbers. If your proxy listens on the same port for both types, then you can specify the same ports for both settings.

RLoginClientUsername string blank

The string to send for the client-user-name portion of the connection establishment packet

If using Synchronet's auto login feature, this should be your password

RLoginServerUsername string blank

The string to send for the server-user-name portion of the connection establishment packet

If using Synchronet's auto login feature, this should be your username

RLoginTerminalType string blank

The string to send for the terminal-type/speed portion of the connection establishment packet

If you leave this blank, the default of ansi-bbs/BitsPerSecond (ie ansi-bbs/57600) will be used

ScreenColumns number 80 The number of columns making up the client area
ScreenRows number 25 The number of rows making up the client area
SplashScreen string base64 data A base64 encoded string containing the ANSI screen that will be displayed to the user after the client initializes
StatusBarVisible boolean true

true: The status bar is visible

false: The status bar is hidden

VirtualKeyboardVisible boolean true

true: The virtual keyboard is visible

false: The virtual keyboard is hidden

Additionally, there is that fTelnet.css that you can customize to control the appearance of the buttons / statusbar / etc.

Back to top

Internet Explorer 8 (and older) Support

Internet Explorer 8 (and older) do not support the Canvas element, and while there are polyfills, none of them have support for the features fTelnet needs. So unfortunately IE8 (and older) will never be supported.

To prevent javascript errors from being shown to IE8 (and older) visitors, you should include this snippet on your page:

<!-- Stop IE8 and below from complaining about Object.defineProperty -->
<!--[if lt IE 9]>
    <script>
        Object.defineProperty = function () { /* Do Nothing */ };
    </script>
<![endif]-->

Common Problems

There's a few things that are easy to miss that make a big difference between fTelnet working and not working. So a few of them are:

I don't see the client anywhere

Did you call fTelnet.Init(); at the bottom of your page/in an on document ready event?

I get a popup error that says "fTelnet Error: Element with id="fTelnetContainer" was not found"

You need a placeholder element (usually a div) with id="fTelnetContainer" on your page somewhere. When you call fTelnet.Init(), it'll put the fTelnet client into that placeholder element.

The button bar links/status bar look plain

Did you add a reference to ftelnet.css?

The virtual keyboard looks ugly

Did you add the placholder stylesheet element with the id="fTelnetKeyboardCss"? And also use id="fTelnetScript" when referencing the ftelnet.min.js script?

I get an error/don't see anything with Internet Explorer 8 and older

Did you add the <!-- Stop IE8 and below from complaining about Object.defineProperty --> code to your page? That fixes the error. It still doesn't fix the client though, IE8 and older don't support Canvas, so all you'll see is "fTelnet Error: Internet Explorer < 9 is not supported."

Uploading and downloading don't work

Those features work for me in all the desktop browsers (well not IE9, but it doesn't use real WebSockets), so if you're using a desktop browser get ahold of me and let me know what browser+version. I haven't had as much luck with the mobile browsers though, so don't bother reporting problems there because there's probably not much I can do.
Back to top

I need more help

First, re-read this document

Second, check out the demos

Third, consider using the managed version

And if after all that you still need more help, then see the support section above

Back to top