r2
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
Lightweight multi-platform code editor designed for modern hardware with a focus on responsiveness and performance.
git clone https://github.com/SpartanJ/ecode.gitSpartanJ/ecodeecode is a lightweight multi-platform code editor designed for modern hardware with a focus on responsiveness and performance. It has been developed with the hardware-accelerated eepp GUI, which provides the core technology for the editor. The project comes as the first serious project using the eepp GUI, and it's currently being developed to improve the eepp GUI library as part of one of its main objectives.
For more screenshots checkout running on macOS, running on Windows, running on Haiku, low dpi, code completion, terminal, file locator, file formats, global find, global replace, linter.
.gitignore support *In ecode, folders are treated as projects, similar to other code editors. However, ecode distinguishes itself by using the repository's .gitignore file as a project configuration to streamline file management.
ecode automatically excludes files listed in the .gitignore file when indexing project files. This ensures that only relevant files are considered for project-wide searches and navigation, resulting in faster and more accurate search outcomes.
To override .gitignore filtering, ecode supports two configuration files in the .ecode/ subfolder:
.prjallowed: Add glob patterns to include files ignored by .gitignore, making them available for indexing and searching..prjdisallowed: Add glob patterns to exclude files that are not ignored by .gitignore, providing precise control over file visibility.By default, ecode indexes only file types it officially supports. Unsupported files are excluded unless their patterns are explicitly added to the .ecode/.prjallowed file.
This approach ensures an efficient and tailored project management experience with flexible customization options.
Some points to illustrate the project philosophy:
ecode can be compiled to WASM and run in any modern browser. There are no plans to focus the development on the web version (at least for the moment) since there are plenty of good solutions out there. But you can give it a try:
Currently, the source code is located at the eepp project repository. ecode editor source is located at src/tools/ecode. ecode is being used to actively improve and iterate the eepp GUI library. At some point, it will be migrated to this repository. The ecode repository should be used for issues and documentation. PRs for ecode will be accepted at the eepp repository.
There are scripts for each supported platform ready to build the application.
For Linux and macOS it is trivial to build the project, you'll just need to have GCC/Clang installed
and also the development library from libSDL2. Windows build script is currently a cross-compiling script and it uses mingw64.
But it also can be easily built with Visual Studio and libSDL2 development libraries installed.
For more information on how to build manually a project please follow the eepp build instructions.
The project name is always ecode (so if you are building with make, you'll need to run make ecode).
build.app.sh will try to build the AppImage package and tar.gz with the compressed application. ecode folder will contain the uncompressed application.build.app.sh will create ecode.app. Run create.dmg.sh to create the dmg file. ecode.app folder will contain the uncompressed application.build.app.sh will create a zip file with the zipped application package. ecode folder will contain the uncompressed application. To build from Windows follow the instructions here.build.app.sh will try to build a tar.gz with the compressed application. ecode.app folder will contain the uncompressed application.build.app.sh will try to build a tar.gz with the compressed application. ecode.app folder will contain the uncompressed application.Nightly builds are being distributed here for the more impatient users. ecode is being developed actively, nightly builds may not be stable for daily usage unless there's a pending unreleased fix required for the user.
Plugins extend the base code editor functionality. Currently all plugins are enabled by default, but they are optional and they can be disabled at any time. ecode implements an internal protocol that allow plugins to communicate with each other. The LSP protocol is going to be used as a base to implement the plugin communication. And, for example, the Linter plugin will consume the LSP to improve its diagnostics. Also the Auto Complete module will request assistance from the LSP, if available, to improve the completions and to provide signature help.
Linter support is provided by executing already stablished linters from each language.
ecode provides support for several languages by default and can be extended easily by expanding the
linters.json configuration.
For more information read the linter documentation.
LSP support is provided by executing already stablished LSP from each language.
ecode provides support for several languages by default and can be extended easily by expanding the
lspclient.json configuration.
For more information read the lsp client documentation.
Debugger support is provided by the implementation the Debug Adapter Protocol. ecode is able to debug any language implementing this protocol, although the protocol is generic sometimes requires to support some of the languages some specific adaptation is needed, so initially the support is limited to the languages mentoined in the support list.
For more information on how to use the debugger read the debugger documentation.
ecode provides some basic Git integration (more features will come in the future). Its main purpose is to help the user to do the most basics operations with Git. Some of the current features supported: git status and stats visualization (files states), commit, push, checkout, pull, fetch, fast-forward merge, creating+renaming+deleting branches, managing stashes. All stats will be automatically updated/refreshed in real time. There's also some basic configuration available.
For more information read the git integration documentation.
The formatter plugin works exactly like the linter plugin, but it will execute tools that auto-format code.
ecode provides support for several languages by default with can be extended easily by expanding the
formatters.json configuration.
For more information read the formatter documentation.
The auto-complete plugin is in charge of providing suggestions for code-completion and signature help.
For more information read the auto-complete documentation.
The AI Assistant is a simple but effective LLM Chat UI. You'll be able to chat with different models from within the editor.
For more information read the AI assistant documentation.
The spell checker plugin uses the typos specialized tool for code spell checking.
For more information read the Spell Checker documentation.
The XML Tools plugin (disabled by default) provides some nice to have improvements when editing XML content.
For more information read the xml tools documentation.
ecode respects the standard configuration paths on each OS:
XDG_CONFIG_HOME, usually translates to ~/.config/ecode/pluginsApplication Support folder in HOME, usually translates to ~/Library/Application Support/ecode/pluginsAPPDATA, usually translates to C:\Users\{username}\AppData\Roaming\ecode\pluginsAll plugin configurations are designed to be overwritable by the user. This means that the default configuration can be replaced with custom configurations from the user. For example, if the user wants to use a different linter, it just needs to declare a new linter definition in its own linter configuration file. The same applies to formatters and LSPs servers. Plugins will always implement a "config" for plugins customization, and will always implement a "keybindings" key to configure custom keybindings.
ecode is highly customizable and extendable thanks to its several configuration files. If you're interested in creating new color schemes for the editor or terminal, or in creating new UI themes please check our documentation:
For more information read the UI Customization documentation.
ecode is constantly adding more languages support and also supports extending it's language support via configuration files (for every feature: syntax highlighting, LSP, linter and formatter).
| Language | Highlight | LSP | Linter | Formatter | Debugger |
|---|---|---|---|---|---|
| .htaccess | ✓ | None | None | None | None |
| .ignore file | ✓ | None | None | None | None |
| [x]it! | ✓ | None | None | None | None |
| ada | ✓ | ada_language_server | None | None | None |
| adept | ✓ | AdeptLSP | None | None | None |
| angelscript | ✓ | None | None | None | None |
| arm assembly | ✓ | None | None | None | None |
| awk script | ✓ | None | None | None | None |
| bat | ✓ | None | None | None | None |
| bazel | ✓ | None | None | None | None |
| bend | ✓ | None | None | None | None |
| blade | ✓ | None | None | None | None |
| blueprint | ✓ | None | None | None | None |
| bolt | ✓ | None | None | None | None |
| brainfuck | ✓ | None | None | None | None |
| buzz | ✓ | None | None | None | None |
| c | ✓ | clangd | cppcheck | clang-format | gdb / lldb-dap |
| c2 | ✓ | None | None | None | None |
| c3 | ✓ | c3-lsp | None | None | None |
| carbon | ✓ | None | None | None | None |
| clojure | ✓ | clojure-lsp | None | None | None |
| cmake | ✓ | neocmakelsp | None | None | None |
| cmakecache | ✓ | None | None | None | None |
| covscript | ✓ | None | None | None | None |
| cpp | ✓ | clangd | cppcheck | clang-format | gdb / lldb-dap |
| crystal | ✓ | crystalline | None | None | None |
| csharp | ✓ | OmniSharp | None | None | None |
| css | ✓ | emmet-language-server | None | native | None |
| csv | ✓ | None | None | None | None |
| curry | ✓ | None | None | None | None |
| d | ✓ | serve-d | None | None | gdb |
| dart | ✓ | dart language-server | None | None | dart |
| diff | ✓ | None | None | None | None |
| dockerfile | ✓ | docker-langserver | None | None | None |
| ec | ✓ | None | None | None | None |
| elena | ✓ | None | None | None | None |
| elixir | ✓ | elixir-ls | None | None | None |
| elm | ✓ | elm-language-server | None | None | None |
| environment file | ✓ | None | None | None | None |
| fantom | ✓ | None | None | None | None |
| fennel | ✓ | None | None | None | None |
| fixscript | ✓ | None | None | None | None |
| flow9 | ✓ | None | None | None | None |
| fortran | ✓ | fortls | None | None | gdb |
| freebasic | ✓ | None | None | None | None |
| fstab | ✓ | None | None | None | None |
| gdscript | ✓ | None | None | None | None |
| gemini | ✓ | None | None | None | None |
| gleam | ✓ | None | None | None | None |
| glsl | ✓ | glsl_analyzer | None | None | None |
| gn | ✓ | None | None | None | None |
| gnuplot | ✓ | None | None | None | None |
| go | ✓ | gopls | None | gopls | gdb / delve |
| graphql | ✓ | None | None | None | None |
| groovy | ✓ | None | None | None | None |
| hare | ✓ | None | None | None | None |
| haskell | ✓ | haskell-language-server | hlint | ormolu | None |
| haxe | ✓ | None | None | None | None |
| hlsl | ✓ | None | None | None | None |
| html | ✓ | emmet-language-server | native | prettier | None |
| idl | ✓ | None | None | None | None |
| ini | ✓ | None | None | None | None |
| ispc | ✓ | None | None | None | None |
| jai | ✓ | None | None | None | None |
| janet | ✓ | None | None | None | None |
| java | ✓ | jdtls | None | clang-format | None |
| javascript | ✓ | typescript-language-server | oxlint | prettier | node |
| javascriptreact | ✓ | typescript-language-server | None | None | None |
| json | ✓ | None | native | native | None |
| jule | ✓ | None | None | None | None |
| julia | ✓ | LanguageServer.jl | None | None | None |
| koka | ✓ | None | None | None | None |
| kotlin | ✓ | kotlin-language-server | ktlint | ktlint | None |
| l.b. stanza | ✓ | None | None | None | None |
| latex | ✓ | texlab | None | None | None |
| lisp | ✓ | None | None | ros | None |
| lobster | ✓ | None | None | None | None |
| lua | ✓ | lua-language-server | luacheck | None | None |
| m4 | ✓ | None | None | None | None |
| makefile | ✓ | None | None | None | None |
| markdown | ✓ | marksman | None | None | None |
| meson | ✓ | None | None | None | None |
| modula2 | ✓ | None | None | None | None |
| modula3 | ✓ | None | None | None | None |
| moonscript | ✓ | None | None | None | None |
| msbuild solution | ✓ | None | None | None | None |
| nelua | ✓ | None | nelua | None | None |
| nim | ✓ | nimlsp | nim | None | None |
| nix | ✓ | None | None | None | None |
| objc | ✓ | None | None | None | None |
| objeck | ✓ | None | None | None | None |
| objective-cpp | ✓ | clangd | None | clang-format | None |
| ocaml | ✓ | OCaml-LSP | None | None | None |
| odin | ✓ | ols | None | None | lldb-dap |
| openscad | ✓ | None | None | None | None |
| pascal | ✓ | None | None | None | gdb |
| perl | ✓ | PerlNavigator | None | None | perl-ls |
| php | ✓ | phpactor | php | None | None |
| pico-8 | ✓ | None | None | None | None |
| pkg-config | ✓ | None | None | None | None |
| plaintext | ✓ | None | None | None | None |
| po | ✓ | None | None | None | None |
| pony | ✓ | None | None | None | None |
| postgresql | ✓ | None | None | None | None |
| powershell | ✓ | None | None | None | None |
| python | ✓ | pylsp | ruff | ruff | debugpy |
| qb64 | ✓ | None | None | None | None |
| qbs | ✓ | None | None | None | None |
| qmake | ✓ | None | None | None | None |
| r | ✓ | r languageserver | None | None | None |
| racket | ✓ | racket-langserver | None | None | None |
| rave | ✓ | None | None | None | None |
| rc script | ✓ | None | None | None | None |
| rescript | ✓ | None | None | None | None |
| ring | ✓ | None | None | None | None |
| rpm spec | ✓ | None | None | None | None |
| ruby | ✓ | solargraph | None | None | None |
| rust | ✓ | rust-analyzer | None | rustfmt | gdb / lldb-dap |
| sass | ✓ | emmet-language-server | None | None | None |
| scala | ✓ | metals | None | None | None |
| scheme | ✓ | None | None | None | None |
| shellscript | ✓ | bash-language-server | None | None | None |
| smallbasic | ✓ | None | None | None | None |
| solidity | ✓ | solc | solhint | None | None |
| sql | ✓ | None | None | None | None |
| squirrel | ✓ | None | None | None | None |
| svelte | ✓ | None | None | None | None |
| swift | ✓ | sourcekit-lsp | None | None | None |
| tcl | ✓ | None | None | None | None |
| teal | ✓ | None | tl | None | None |
| toml | ✓ | None | None | None | None |
| tsv | ✓ | None | None | None | None |
| typescript | ✓ | typescript-language-server | oxlint | prettier | node |
| typescriptreact | ✓ | typescript-language-server | None | None | None |
| typst | ✓ | Tinymist | None | None | None |
| v | ✓ | v-analyzer | None | v | None |
| v1 | ✓ | None | None | None | None |
| vala | ✓ | vala-language-server | None | None | None |
| verilog | ✓ | None | None | None | None |
| viml | ✓ | None | None | None | None |
| visual basic | ✓ | None | None | None | None |
| vue | ✓ | vls | None | None | None |
| webassembly interface types | ✓ | None | None | None | None |
| webassembly text format | ✓ | None | None | None | None |
| wren | ✓ | None | None | None | None |
| x86 assembly | ✓ | None | None | None | None |
| xml | ✓ | emmet-language-server | native | native | None |
| xtend | ✓ | None | None | None | None |
| yaml | ✓ | yaml-language-server | native | None | None |
| yuescript | ✓ | None | None | None | None |
| zephir | ✓ | None | None | None | None |
| zig | ✓ | zls | zig | zig | lldb-dap |
| ü | ✓ | Ü language server | None | None | gdb / lldb-dap |
Native tag means that the feature is supported natively by ecode and it doesn't need any external tool to function.
ecode brings a tool to display the current language support health. From ecode you can check its health
status from Settings -> Tools -> Check Language Health, and from CLI you can use the --health flag: ecode --health.
Use the health check flag to troubleshoot missing language servers, linters and formatters.
Check the health of all languages with ecode --health or ask for details about a specific language
with ecode --health-lang=<lang>.
Users can add support for new languages with a very simple JSON file format.
For more information read the custom languages documentation.
Listed in no particular order:
The author is more than open to collaborations. Any person interested in the project is invited to participate. Many features are still pending, and the project will grow much more over time. Please, collaborate. =)
Some Unicode characters won't be rendered in the editor out of the box. You'll need to change the default monospace font in favor of a font that supports the characters you want to see that are not being rendered. You could also change the default fallback font in the case you want to use a traditional monospaced font. The default fallback font should cover a wide range of languages but you could need some special font (currently covers CJK languages).
*1 Current eepp feature limitations.
*2 I'm not a fan of sub-pixel hinting. But I'm more than willing to implement it, I'm not very versed in the matter, so any help will be appreciated.
*3 I'm not a VIM user, and I'm not qualified to implement the VIM mode or any modal editing. PRs are welcome to support this.
This editor has a deeply rooted inspiration from the lite, lite-xl, QtCreator and Sublime Text editors. Several features were developed based on the lite/lite-xl implementations. Some features can be ported directly from lite: color-schemes and syntax-highlighting patterns (eepp implementation expands original lite implementation to add many more features).
ecode is being used mostly in Linux and macOS, it's not well tested in Windows. If you find any issues with the editor please report it here.
This is a work in progress, stability is not guaranteed. Please don't use it for critical tasks. I'm using the editor daily and is stable enough for me, but use it at your own risk.
Niels Lohmann for JSON for Modern C++
Neil Henning for subprocess.h
All the authors of the suckless terminal emulator
Fredrik Aleksander for Hexe Terminal
rxi for lite
franko and all the collaborators for lite-xl
Andreas Kling for SerenityOS
And a lot more people!
more like this
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
Vim/Neovim debugger plugin providing a terminal interface to the Debug Adapter Protocol
A to-do list that runs your Claude Code agents — capture anywhere, dispatch in parallel, review from your phone.
search projects, people, and tags