The tiko programming language is out! Developed by myself and José Roca, think FreeBASIC but supercharged.
Your existing FreeBASIC code compiles under #lang "fb", and then you get generics, tuples, lambdas, typed errors, built-in concurrency and so much more on top. It compiles through LLVM to native code with C-class speed, no VM and no garbage collector, on Windows, Linux and macOS.
It ships with tkEdit, a cross-platform code editor, and tkControls, a widget library for building your own cross-platform GUI apps. There's also language server support for VS Code, Zed, Sublime Text and Neovim.
A free online book (https://tiko-lang.net/book/), a comprehensive reference wiki (https://github.com/PaulSquires/tiko-lang/wiki), and learn tiko by example (https://tiko-lang.net/by-example/) will get you started.
Get it at https://tiko-lang.net.
Source and releases are at https://github.com/PaulSquires/tiko-lang.
tiko is young but is extremely feature complete. Try it, break it, and help shape the future of this fantastic new programming language.
good day Paul :)
very interesting project
however, some menus in the tiko editor would be welcome, especially an abort button for run-away builds
I am into numerical stuff and have been toying with multi-precision floating point arithmetic, I wanted to see if there were any performance gains or hits by using LLVM
my program compiled and ran when the precision was set at 120 but it goes into never-land if I set the digits to 10000, even as I write this it's still building ...
that's why we need the abort button
Hi Johan,
Sounds to me like maybe the compile has failed but the editor "build" message has not updated. Not sure.
Maybe try compiling it from the command line to see if that is the case. Once a compile starts it can not be cancelled mid-run, unless your project is set up to have multiple modules.... maybe then an abort button could stop a compile between the compiling of one of the modules.
The editor is intended to be a stripped down basic editor. That's why I chose to not have an extensive menu system. The goal is to do as much editing via the keyboard shortcuts. Developing keyboard muscle memory is a much faster coding experience, but I certainly understand your concern.
You can also use code editor like Visual Studio Code and install the Tiko language server extension. Other editors are also supported: Zed, Sublime and Neovim.
...at one point I wasn't even going to have those tabs across the top for any open files :-)
That tabs feature can be turned off via settings. I use Ctrl+E to switch buffers. Also, split windows in this editor can have different file views in the two panes, whereas my older Tiko Editor only shows two views of the same file.
Paul, I suspect the default clang options are at fault in this case
Quote from: Johan Klassen on November 05, 2026, 04:53:38 PMPaul, I suspect the default clang options are at fault in this case
I believe your suspicions are correct.
Working on a fix now and also reinstating those top menus that I removed from the editor a long time ago (with a setting option to show or hide them).
I post a link to the new toolchain download once this is fixed and all tested (it has to pass Windows, Linux and MacOS test).
thank you Paul ;D
Hi Johan,
Here is the link to the new toolchain: https://github.com/PaulSquires/tiko-lang/releases
It is version 0.1.2
You're code now compiles and runs in about a second on my machine.
If you find anything else that needs fixing then please let me know. Tiko is obviously a very young and new language so there is bound to be things that need fixing.
thanks a million Paul
thumbsup for the menus 👍😁
Lol, you're very welcome ;D
Paul
I wanted to test including C headers, so I wrote a very simple program using libgmp
test-c-include3.bas
#cmdline "-Wl -verbose"
#cinclude "./gmp.h"
#inclib "./gmp"
dim as __mpf_struct x
dim as zstring ptr s=callocate(1024)
__gmpf_init2(@x,512)
mpf_set_ui(@x,3)
mpf_sqrt(@x, @x)
gmp_snprintf(s,1000,"%50.40Fe",@x)
print ">>> ";*s
mpf_clear(@x)
deallocate(s)
Print "press return to quit";
Sleep
if I try to open test-c-include3.bas then I get a dialog:
---------------------------
tkEdit - G:\Desktop-10-23-26\mp64\myLocal64s\include\test-cinclude\test-c-include3.bas: tkedit.exe - Application Error
---------------------------
The instruction at 0x00007FF7035204D0 referenced memory at 0xFFFFFFFFFFFFFFFF. The memory could not be read.
Click on OK to terminate the program
Click on CANCEL to debug the program
---------------------------
OK Cancel
---------------------------
click OK then relaunch and everything works
here are the necessary files
sometimes tkedit will simply vanish without any message
btw, the autocomplete after a #cinclude is fantastic
Hi Johan,
I am not seeing any crash on my computer using your files that you posted. I was able to use tkEdit load, compile, and run the test-c-include3.bas file without any problems. Not sure why I am not seeing any issues other than maybe my tkEdit or tiki compiler has some newer functionality that's not present in your version.
hello Paul
is it possible to use a Visual Studio LLVM installation by setting the environment variables TKO_CLANG and TKO_LIBCLANG?
the current version is 19
You can do a tiko --version and it will print the folder location where tiko automatically found llvm.
You can override the location with the environment variables:
TKO_CLANG points to clang.exe.
TKO_LIBCLANG points to libclang.dll. You only need it if libclang.dll isn't in the same folder as that clang.
Version 19 should work. tiko requires any llvm version 18 or higher.
Don't be fooled by the "clang" requirement. Tiko does NOT produce C code that is later compiled to exe. CLang in llvm is an all in one compiler that takes the source code, produces the llvm IR intermediate code, and then compiles/links that IR code. There is no "C" involved.
thanks Paul
that works, I thought that the variables needed only to point to the folder but they must point to clang.exe and to libclang.dll
Hi Johan, FYI that in the new 0.1.3 toolchain that the TKO_* environment variables are renamed to TIKO_*
thank you Paul :)