Upload failed. Maybe wrong permissions?

User Tools

Site Tools

A Short Best’s Board Tutorial

This document was updated 2021.2.27., 15:43:47

What’s Best’s Board?

Simply, the best keyboard for Android tablets and phones, developed by Thon.
  Why? Because

  • you decide how many keys do you want to see on your keyboard, how should they look like, what should they do, and you can change all of these any time, on board of your Android or from your PC,
  • thanks to the Short Swipe Method, it’s faster and more reliable than keyboars based on a different method.

What’s New

December 9, 2020

Added STICKY and JOY.

April 7, 2020

A new version created for Android 8.0 Oreo compatibility.


Best’s Board works in any Android app that uses the normal keyboard selected in the settings of your Android device.
  Using Best’s Board, you have

  • a hexagonal grid of buttons, as large as you wish (of course, if you define too many of them and/or you have a small screen, your buttons will be very small, but wasted screen area is nearly none);
  • I mean, several grids of buttons of the same or different sizes;
  • each button has a background color, two functions (when touched and when the finger or stylus is moved on it for a longer distance) and even several titles written on it;
  • I mean, any button may have up to 13 (yes, thirteen) function without switching layouts;
  • functions may be a character or a string of any length, switching to another grid or some special function;
  • titles written on buttons may contain one or more characters, may be of any color, and may be placed anywhere on the button;
  • of course, full Unicode is supported, both in the characters typed by the buttons and in the titles.

Short Swipe and Other Methods

To enter text on a touchscreen, apps know three methods (each app knows either one of them).

  • The Touch Type Method. Many onscreen keyboards, mostly the older ones work this way: typing BEAR needs four touches. This is simple but slow.
  • The Long Swipe Method. Most newer onscreen keyboards work this way: typing BEAR needs a single swipe, placing your finger on button B then swipe to the other letters, without rising your finger from the screen. This means touching several additional buttons on the way, but the app should recognize the word you want. This is very fast, except when the app fails to recognize your word. This happens frequently to proper nouns and for words of languages where a word may have a lot of forms, and some of them are unknown to the app. And, of course, the app must have a dictionary for your language at the first place. If the app can’t recognize your word you have to delete the wrong word and retry or retype the word by touch-typing. If you notice the mistake, this is slow and annoying. If you don’t notice it, it isn’t slow but very-very annoying later.
  • The Short Swipe Method. This is how Best’s Board works. The letters are arranged in the beehive lattice. You can touch-type. But you also can swipe when your letters are in neighboring places. This may be slower than the Long Swipe Method, but more reliable and flexible since there’s no prediction and no need for prediction. The key factor is the arrangement of the letters. If they are in a pattern where letters which frequently appear together in your language are at neighboring positions, it may be faster than Long Swipe.

Space Travel

Space Travel is a very important feature in Best’s Board. You can define a special kind of a space button which doesn’t type a space character when touched between other buttons, in the middle of a swiping movement. A space character will be typed only when the button is touched at the beginning or the end of the swiping, or when touched alone.
  This increases the number of neighbors a key may have.

Rim Travel

The “rim” is the area at the edge of a button. Its width can be changed in the Settings. It is insensitive to touches when you’re drawing with your finger or stylus between other buttons.


Any character may be typed with the “autospace” feature that can add a space either or both before and after the character. This is useful for many punctuation marks. It can remove any space previously being there and thus avoid double spaces.


Computers are using that old arrangement of letters:

 A S D F G H J K L
  Z X C V B N M

(or a variant of it, like QWERTZ and AZERTY).
  This was inherited from 19th century typewriters and it’s absolutely not the best way to arrange letters on a touchscreen where you “type” with a single finger or stylus. However, nearly all Android keyboard apps insist on QWERTY.
  With Best’s Board, you can design your own layout. You can arrange your letters and other symbols completely freely. See our gallery.

Installing Best’s Board

Best’s Board is a work-in-progress app, so it’s not so easy to install it as with most apps that can be downloaded from the Play Store.

  1. By default, Android devices allow installing apps from the Play Store only. Since Best’s Board is not on Play Store, you need to allow installing apps from “unknown sources” (if you didn’t do it previously). You have to find this option in Settings / Security, or search Google with the brand of your device.
  2. You’ll need a file manager app. There are a lot of them in Play Store. It has to be able to create a folder and unzip a zip.
  3. Download Best’s Board to your Android device and unzip it to a folder.
  4. Tap on app########.apk (the app). The # signs represent here the date (in YYMMDD format) the app was built.
  5. Android will install it. From now on, you can delete the apk to free up space.
  6. Go to Settings and locate the menu where available keyboard apps are located. Add Best’s Board to the list and make it the default entry method. (The actual steps depend on the brand of your device.)
  7. Activate the Settings page of Best’s Board. Set the working directory and load a keyboard file.


Best’s Board has the following settings:

Show help

Well, this doesn’t work since no one has written the help yet. Sorry.

Use test file instead of main file

Activates a predefined test keyboard with access to the most important things. You can use it for developing your keyboard or for basic use.

File selector

Provides you a file selector list to select the keyboard file you want to use.

Name of working directory

The name of the folder the previous file selector should work in.

Name of descriptor file

You can enter a keyboard file here, instead of selecting it.

File selector
Name of descriptor test file

At these lines, you can change the predefined test keyboard, too.

Force reload of descriptor file

You can reload your keyboard file after modifying it.

Force copy of sample files to working directory

Copies the sample files shipped with the app (inside the apk file) to the working folder.

Hide upper part
Hide lower part

These options tell Best’s Board to hide the small triangles left unused on the top and the bottom edge of the keyboard, respectively. If you switch both on and cover all of your layout with buttons, the screen area used by Best’s Board will be 100% used.

Screen height ratio, which can be occupied by the layout

Specifies (in thousandths) the amount of your screen that may be covered by Best’s Board.

Vertical offset, if non-wide layout is displayed in landscape view

Shifts the layout to the right if it’s too small.

Ratio of buttons’ outer rim

The amount of the area on each button handled as the outer rim.

Monitor row

Adds a row below the keyboard to display information. Currently, it provides access to a writing speedometer only. By touching this area you can switch to the test keyboard, too.

The Coat Language

With Best’s Board, you can create your own keyboard layouts. But there’s no editor or designer app (and there won’t be any until someone takes the effort to create one). To design a layout, you need to write a text file that’s somewhat similar to a program. To do so, you have to use the Coat Language. We call it Coat because it’s full of buttons.
  A complete language description is beyond the reach of this little tutorial. Best’s Board was in use by Thon and Attila for years and still kept unpublished, because we didn’t have the time and energy to create a full documentation. Sorry.


Start a text editor (even on your Android device; if you’re editing on a different computer you’ll need to transfer your file to the device later). Begin typing in an empty document.
  Any line starting with a ; is a comment.
  The first line which isn’t a comment must read

coat (1000)

This lets Best’s Board know this is a keyboard file.

Adding a Layout

A layout is the set of buttons visible at the same time.
  Copy this line in your Coat:


It doesn’t count if you enter it as a single line or several ones.
  Let’s take it apart and discover what is what.
  ADDLAYOUT is a command that adds a layout with the properties following in () parentheses. There needs to be an ID which is now “mylayout” but can be any word. You’re going to refer to the layout by this name.
  START means this layout is the default when Best’s Board is started. You can have a lot of layouts in a Coat file but only one can be the default.
  HALFCOLUMNS (followed by a number) tells the width of the layout, counted in half buttons. On a hexagonal lattice, it’s easier to count this way. 20 means there will be alternating rows with 10 full buttons and with 11 buttons, of which the leftmost and the rightmost one is half the size. This setting will determine the size of the buttons. The more buttons you have in a row, the smaller they will be.
  ROWS tells the number of rows of buttons. You can have as many of them as you wish, but of course, the more rows you have (with the same button size), the larger part of your screen to be covered.
  ALIGN EVENS means that the button in the top left corner will be a half size one. ALIGN ODDS means this one will be a full size one.
  TURNOFF (CAPS) turns the Caps Lock off when switching to this keyboard.
  ASBOARD to be discussed later.
  COLOR tells the color of the unused area of the layout, outside any button.


When specifying the color of something, you have to type COLOR and either

  • 0c and a color code in hexadecimal RGB (for example, 0cff8000 is an orange color)
  • 0n and a Visibone color code (for example, 0nr means red)


If you need something several times in your Coat (e.g., a color or a block), you can define it as a variable and refer to it just by a name. To do so, type

LET (name something)

The name is a single word. The “something” is anything that has a meaning in Coat, even a complex structure.


Buttons are the most important things in Coat. Definition of a button looks like:


This defines a button that types a letter a. It has a yellow background (0ny means yellow) and a black title color (0nk means black). Anything in a pair of () parentheses after ADDTITLE refers to a title. The text of the title isn’t specified; this means the main text (the letter a) will appear.
  You can display a different text than the one typed:


This button will wear a letter x on it but type a letter a.
  You can also add several titles by repeating the ADDTITLE part. To relocate them on the surface of the button, type XOFFSET and/or YOFFSET followed by a number which tells the amount the title should be moved to. 1000 means the edge of the button.


You can use the single quote ' character for specifying single characters to be typed or displayed. For strings of two or more characters, you must use the double quotes ".

Special Buttons

Instead of the word BUTTON, you can use different words (all the parameters are the same).
  SPACETRAVEL creates a “travelling space” (see above).
  ENTER creates an Enter key which can listen to Android system messages and display a different title for different contexts. To change the titles, add a separate command SHOWTITLES (ENTERTEXT "something" …). Additional titles include GOTEXT, SEARCHTEXT, SENDTEXT, PREVTEXT, NEXTTEXT, DONETEXT, NONETEXT and UNKNOWNTEXT.
  META (CAPS …) is the Shift key for uppercase letters. For a Shift key that turns, say, digits to punctuation marks, see Switches.

Special buttons that do require the word BUTTON (these ones work as BUTTON (SETTINGS …) etc.):
  SETTINGS invokes the Settings screen.
  RELOAD reloads the Coat file.
  WORD LEFT and WORD RIGHT moves the cursor to the previous or next word, respectively. PARA LEFT and PARA RIGHT does the same with paragraphs.
  KEY sends a key hard code to simulate a key press on a hardware keyboard. BUTTON (KEY should be followed by a key code like KEYDPADLEFT, KEYDPADRIGHT, KEYDPADUP, KEYDPADDOWN (these are the cursor keys, note the letter D after KEY).


Switching to another layout is done by a button defined this way:

SWITCH (BOARD id_of_layout LOCK …)

Specify the ID of the layout you want to switch to (defined in the ADDLAYOUT command). If LOCK is added, the layout will remain active until you switch to another layout. (Make sure to add a way to get back.) Without LOCK, you’ll return to the previous layout after a keypress.


Buttons are arranged into blocks. A block is defined by a command

LET (block_id (BLOCK (contents_of_the_block)))

It can contain two kinds of commands: those that create a button (BUTTON, SWITCH etc.) and commands for placement.
  The LET command doesn’t display the block. Just defines it by the name you assign to it. To display it, you have to put it on a layout, by specifying a coordinate pair for the first button of the block. Placement commands inside the block relocate following buttons. You can use as many placement commands before a button as you wish.
  Placement commands include:
  R (right) – this is the default. If a button is defined after another one with no placement command, the second one will be to the right from the first one.
  L (left)
  UL (up left)
  UR (up right)
  DL (down left)
  DR (down right)
  SKIP number – skips the given number of places to the right (if the number is negative, to the left)
  CRL (carriage return left) – goes to the first place of the next row, to the half place if there’s a half place there
  CRR (carriage return right) – goes to the first full-size place of the next row

Assembling Layouts

Having at least one layout and one block defined, you need to put the block(s) on your layout.


tells Best’s Board the following commands will work with the layout given, then

BLOCK (block_id ROW number COLUMN number)

will place the block on the layout, starting with the coordinates given. Top row and leftmost positions are numbered 1.


A modifier is a special button that modifies the character before the cursor. This way you can type characters without assigning them an own button. You can have as many modifiers as you wish.
  To have a modifier, you have to define it and put it on a button. To define a modifier, use

ADDMODIFY (ID modifier_id ROLLS (list))

The list looks like this:

"aáàâä" "eĕȇ" "sß" 

You can have any number of such elements (“rolls”), and any of them can be of any length. Use double quotes " since these are strings of several characters. When the modifier button is pressed, Best’s Board looks for the character before the cursor. If it’s found in a roll, it will be replaced by the next character of the same roll. So, in this example, if you type a letter e and press the modifier, you’ll see a letter ĕ instead. Pressing the modifier again turns the letter into ȇ, and another press gives back the original e since the roll string is now over. And so on.
  To use your modifier, create a button by

MODIFY (ROLL modifier_id …)

Hint: modifiers aren’t just for diacritics. You can turn any character to any other character. On a small screen, it may be useful to have just a few letters and a modifier that gives access to other letters.


A sticky is a button that can activate up to 13 functions. This works the following way: tap on the button and move your finger or stylus to a direction. This way you can access 12 functions: from the center towards any side or corner of the hexagon. The 13th one is the simple tapping on the button. Sticky buttons cannot act as part of a multi-button stroke.
  A sticky button is made by

direction (action)

The first action is the one activated when just tapping on the button. Directions can be defined by
  – CLOCK1, CLOCK2 etc., till CLOCK12 (think about a clock’s face, CLOCK1 is towards one o’clock, i.e. the upper right side
  – or HEXU, HEXD, HEXL, HEXR, HEXUR, HEXDR, HEXUL, HEXDL (eight directions)
  You can use JOY instead of STICKY. The behavior is a bit different that way.
  Inside the block, you can add a REPEAT clause and several ADDTITLE commands to define titles for your actions.
  Actions may be
  – TEXT "text"
  – MOD modifier
  – KEY keyname

  My Kinesa keyboard, version 63, variant of December 2020, main layout. It’s prepared specially for writing my novel Ninda. Some features:
  – on the top row, 6 memory buttons (currently bearing Sỳÿndoṙeìan names, up to 5 characters displayed but can be of any length);
  – top right: the left, word right and Delete buttons;
  – 2nd row: five sticky keys that give the white character when pressed and one of 12 additional characters when stroked away; the ( and ) keys feature diacritical marks and special letter modifiers;
  – is the Caps Shift key (only for uppercase letters); pressing twice is the Caps Lock;
  – is the Swap Case key (turns fred to Fred and back);
  – the green 4-pointed star is the cursor moving joystick;
  – then comes the Paragraph Up key, and two rows below the Paragraph Down key;
  – bottom row, left corner: the Keyboard key to switch to other layouts;
  – when the Frog key is displaying a frog, the Autospace and Autocaps modes are on; pressing it turns it into a turtle when they’re off.

  Decorated version of the previous layout. Only visual changes; the ZX Spectrum rainbow stripes and the Santa Claus have no function.

  My Kinesa keyboard, version 58, main layout.

  Kinesa 58, Cyrillic layout.

  Kinesa 58, Devanagari layout.

  Kinesa 58, Diacritics layout. Buttons with a black letter and a yellow diacritic are modifiers. The title are actually two titles: a yellow letter with a diacritic, superimposed by a black letter with no diacritic.

  Kinesa 58, Symbols layout.

  The keyboard I’m using on my phone at the time. This image shows all five layouts together. Actually, they can be paged by using the arrows at the left. I don’t like it, it needs a lot of paging just to write a word but I didn’t have the time to design another one yet.

  One of my keyboards used in 2015. On some keys, you can see two titles. Colored images are emojis which appear colored on a Samsung tablet.

  The same keyboard a day later, with some modifications.

  A Finnish keyboard demo to show you can have several Space Travel buttons. Here, letters A T E S Ä L O K I N are all direct neighbors of each other.

  A totally unpractical demo just to show how many buttons may a Best’s Board layout have: in this case, 300. On my 8-inch tablet screen, this many are still not too small to be touched with a stylus.

  An experimental English layout (a sketch of course, just letters and the space). I made some swipe demos with it:

  Here you can see what counts as “neighbors”. All the yellow buttons are neighbors of letter I, thanks to the fact the green space button is a Space Travel Button.

  Thanks to Rim Travel, there are even more neighbors. Here, you can see letter S in red. Yellow letters I M P L A and the green space button are its neighbors. Orange buttons D E T are also neighbors by using Space Travel. Green letters G X Y C are neighbors by using Rim Travel. And blue letters N R H W are neighbors by using Space Travel then Rim Travel.

  How to write “table” on this layout. Not very efficient, but things happen.

  How to write “walking”. Two swipes.

  How to write “born”. One swipe if you use Rim Travel; letters U and D aren’t typed because you were swiping on their edges only.

  How to write “bread” using Space Travel twice.

  A Burmese layout demo. (Demo, I mean, it’s completely working but probably not practical for actual use. I can’t make a better one, speaking no Burmese.)

  A 2017 version of Kinesa, with different colors and a few other things also different.

  Same as the above, just redesigned the bottom row and parts on the top.

A simple demo showing myself typing.

A demo for swiping techniques.