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 Most options can be set automatically via the wizard, a few have to be set manually All options must be set manually
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!

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

Back to top

How to get support

The fTelnet contact page or the GitHub Issues page are the two best ways to get ahold of me.

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 <body> section where you want the client to appear:

<div id="fTelnetContainer"></div>
<script src="ftelnet.norip.noxfer.min.js" id="fTelnetScript"></script>
<script>
    var Options = new fTelnetOptions();
    Options.Hostname = "bbs.ftelnet.ca";
    Options.Port = 23;
   
    var Client = new fTelnetClient('fTelnetContainer', Options);
</script>

That should now get you up and running.

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
AllowModernScrollback boolean true

true: fTelnet will try to detect desktop vs mobile devices, and use a modern scrollable div for desktop users

false: all users will use the classic scrollback

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)
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

Emulation string ansi-bbs

ansi-bbs: The default, and probably only value you'll ever want to use

RIP: Enable RIPscript mode. Still very experimental, I wouldn't use this in production

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. Check the fonts subdirectory to see supported ones
ForceWss boolean false

true: Always use the secure wss:// protocol for connecting to the server

false: Use the secure wss:// protocol for pages served via https://, and normal ws:// protocol for pages served via http://

If your server supports wss://, then it makes sense to change this to true

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

NegotiateLocalEcho boolean true

true: Your LocalEcho setting is used as the default, but you will allow the telnet server to use negotiation sequences to change this setting

false: Your LocalEcho setting is used, and negotiation sequences sent by the server are ignored

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
SendLocation boolean true

true: If the telnet server sends a negotiation sequence to request the user's IP address, fTelnet will use a 3rd party service to identify the user's IPv4 address, and reply with that

false: A request sent by the server will be ignored

If you're using a public proxy, then all requests will look like they're originating from the proxy's IP address. With this option enabled, you'll be able to query the user's real IP address. Requires your telnet server to support the correct negotiation sequence of course

SkipRedrawWhenSameFontSize boolean false

true: When the Crt font changes, if the new font is the same size as the old font, the screen won't be redrawn. This allows you to display a screen using characters from multiple fonts. NOTE: Any events that force a redraw (selecting text, scrolling with the classic scrollback, etc) will redraw using the new font.

false: When the Crt font changes, the entire screen is redrawn using the new font.

SplashScreen string base64 data A base64 encoded string containing the ANSI screen that will be displayed to the user after the client initializes
VirtualKeyboardVibrateDuration number 25 The number of milliseconds to vibrate for when a virtual keyboard key is pressed. A value of 0 will disable the vibration feature
VirtualKeyboardVisible boolean true

true: The virtual keyboard is visible

false: The virtual keyboard is hidden

WebSocketUrlPath string blank If you are using a proxy, this setting does nothing. If you are not using a proxy, this is the path to append to the WebSocket Url.
For example if your hostname is bbs.ftelnet.ca and port is 80, fTelnet will connect to ws://bbs.ftelnet.ca:80.
If what you really need is ws://bbs.ftelnet.ca:80/plus/some/path, then you want to set WebSocketUrlPath to '/plus/some/path'.
If you're confused by this setting, don't worry, 99.9% of people won't need it and can leave it blank.

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.


I need more help

First, re-read this document

Second, consider using the managed version

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

Back to top