A cross-Langauge cross-Terminal Framework which targets to make ansii control a explainable, understandable, and workable without excessive mental load.
- What is EXCII?
- Why EXCII?
- Design Philosophy
- Features
- Documentation
- Roadmap
- License
EXCII is a framework which targets to make ansii explainable with verbose and proper naming, proper division, trees and more.
Throughout the evolution of terminal emulators, one thing has remained constant: ANSI escape sequences.
From early VT-series terminals to modern terminal emulators such as GNOME Terminal, Windows Terminal, Kitty, Alacritty, and others, terminal control has always been built on the same primitive—escape sequences.
Over time, higher-level frameworks such as ncurses emerged to simplify terminal application development. Rather than replacing ANSI sequences, they abstract them while understanding terminal capabilities and compatibility.
However, most existing libraries focus on building terminal applications, not on providing a clear, explainable, and language-independent abstraction of ANSI control itself.
EXCII exists to fill that gap.
Its goal is to serve as a lightweight middle layer that organises ANSI escape sequences into logical, reusable components, making terminal control easier to understand, implement, and extend across programming languages.
many of questions are already got their answers on Q&A.md
so before talking about main design, let me put constraints with escape sequence:
- escape sequence get's triggered by codes, for example famous example is \033 which also be called
ESC[which means opening escape sequence window - each
ESC[work as single byte. means a single character in a way - each instructions combines
ESC[and other codes such as 48;2 for 256 color pallete. - but in 48;5 each digit is a single byte character in itself.
indirectly each instruction is a stream of mini codes. the philosophy design use is make them what they are - pre existing string and make methods which return string and later:
- each string == one mini instruction
- combined instructions == instruction set
one big instruction set is work as a command to display to do something. which keep it efficient. the biggest bottleneck is Terminal memory bandwidth because each code is using few bytes which scales so fast.
each function in EXCII does return this instruction as string for later instruction sets.
excii shares dna with unix philosophy, which is to make each function do one thing and do it well. this is the core value of excii. what excii does is to make each function do one thing and do it well, which is to return a string of ansi escape sequence. this is the core value of excii. as a wrapper it behaves very well and introduce a well explainable and understandable interface to work with ansi escape sequence. this is the core value of excii.
for now escii is under developement and it is not yet stable. but the future of excii is to make it a cross language framework which can be used in any programming language and any terminal emulator (mostly). the future of excii is to make it a cross platform framework which can be used in any operating system and any terminal emulator. the future of excii is to make it a cross platform framework which can be used in any programming language and any terminal emulator. the future of excii is to make it a cross platform framework which can be used in any programming language and any terminal emulator.
features of excii depends mostly on the language and terminal support. but the core features of excii are:
- cross language framework (almost)
- cross terminal framework (almost)
- cross platform framework (almost)
-> almost because few languages and terminals are not yet supported but they will be supported in future.
excii is well documented and the documentation is available in repository as well. mostly questions are answered in Q&A.md file. but for more detailed documentation, please refer to the documentation folder.
the thing is that excii is combination of both: wrapper and philosophy arround it to provide a better experience to work with ansi escape sequence. wihich makes documentation more tricky.
to be honest there is no roadmap for excii. you can do it the way you prefer. but i suggest to follow below path:
- learn the bassics of ansi escape sequence and how it works - graphical part, like what it show, don't learn exact codes yet.
- understand the naming and philosophy of naming, like why names are this way.
- understand trigger and how it works, like what is trigger and how it works along side other trigger methods.
- work with exciistr lib which is given in example to understand how it works and how to implement it in your own language.
there is apache 2.0 license for excii. you can use it in your own project and modify it as you like. but it is recommended to give credit to excii and its author. you can find the license in LICENSE file.
feel free to report any issue or bug in the repository. you can also contribute to excii by forking the repository and making a pull request. any contribution is welcome and appreciated.
rules are strictly followed in this repository because excii is a framework which targets to make ansii explainable with verbose and proper naming, proper modeling - so each decision becomes important and should be taken seriously to develop it further.
excii is not really something you can copy or paste right - it's a process to make a thing understandable - it is all about decisions and how to make them. so if you want to contribute to excii, please read the documentation and understand the philosophy behind it. then you can make your own decisions and contribute to excii.
"a contribution to excii is a 10 times better than copy paste it and try to steal it - communities remember the decisions behind the code, not the code itself. feel free to reach intrixlabs for any questions or suggestions. we are always happy to help and discuss about excii and its future."