Small vnc library with OS X Authentication support, mostly for sending keystrokes to remote clients.
C++ C Objective-C
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
src Added XCode example, fixed LLVM build issues. Nov 25, 2012
.gitignore Added XCode example, fixed LLVM build issues. Nov 25, 2012
LICENSE-2.0.txt Initial commit. Jul 17, 2012


TinyVNC is a minimalistic VNC library, main part of Blender Keypad ( remote control app. It is oriented primarily on sending keystokes over network to remote computer. It also has ability of capturing a screen of that computer, even though it is not a primary function of the software, so only RAW (warning, huge amount of traffic) encoding is supported.


Easiest way to use tinyvnc is as a static library. Simply include all .cpp files into the project and you should be good to go. You may need to declare CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES macro, in which case exclude ec2n.cpp, eccrypto.cpp, eprecomp.cpp, strciphr.cpp from build to avoid duplicate class and method definitions.

Building for XCode Step by Step

  • Add all library files to your project:

    • des_local.cpp, des_local.h, keysymdef.h, raw_query.cpp, raw_query.hpp, vnc_client.cpp, vnc_client.hpp
    • All files from cryptoppmin directory
  • Exclude following files from the build: ec2n.cpp, eccrypto.cpp, eprecomp.cpp, strciphr.cpp

    • Click on the file in the Project Navigator (Command + 1, on the left by default)
    • Clear checkbox for Target Membership in the File Inspector (Command + Alt + 1, on the right by default)
  • In project Build Settings, define following Preprocessor Macros:

  • Make sure that files from which you are using TinyVNC are compiled as Objective-C++. Easiest way is to change file extension from .m to .mm

Basic Usage

#include "vnc_client.hpp"
#define XK_LATIN1
#include "keysymdef.h"

// Initialize network client. Needs to be done only once, e.g. in viewDidLoad.

// Create and configure client.
Network::VncClient client("", "5900");

// Set username/password pair, if VNC authentication is used, only password will be sent to the server.
client.set_password("username", "password");


// Wait to connect.
while (client.update())
  if (client.connected())

// Send Hello + enter key.

// Send to server.

// More complex keys or combinations require usage of XK_ codes and send_key methods.
// E.g. send $ keystroke.

client.send_key(XK_Shift_L, true);
client.send_key(XK_4, true);
client.send_key(XK_4, false);
client.send_key(XK_Shift_L, false);


XCode static library project file

Threaded example


examples/screenshot contains a small command line test app that will take a screenshot of a remote server and save it to .png file.


TinyVNC supports anonymous access (No authentication), VNC password authentication, or OS X authentication method using embedded Crypto++ library.

Third Party Software and Licenses

TinyVNC is built with the help of and contains portions of:

Crypto++, web site:, license:

D3DES by Richard Outerbridge

/* D3DES (V5.09) -
 * A portable, public domain, version of the Data Encryption Standard.
 * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
 * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
 * code;  Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
 * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
 * for humouring me on.
 * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
 * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.

STB Image Writer

/* stbiw-0.92 - public domain -
   writes out PNG/BMP/TGA images to C stdio - Sean Barrett 2010
                            no warranty implied; use at your own risk