Raven - A fast IDE for Golang

Raven is a fast IDE for Golang, designed to be as performant as a video game. It's written in C++ with a custom OpenGL renderer, and currently runs at about 500 FPS.

Download link here. Currently only works on MacOS. On startup, select the folder you want to work in, then:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
cmd p   file fuzzy searcher
cmd 1   open split 1
cmd 2   open split 2
cmd 3   open split 3
cmd 4   open split 4
cmd w   close split
cmd 9   toggle imgui demo (for my own reference)
cmd 0   toggle debug window
cmd e   toggle file explorer
cmd -   decrease font size
cmd =   increase font size
cmd ,   toggle settings (none yet)
cmd s   save file


Vim keybindings are mostly working. You can get around.



Motivation

Many existing IDEs are slow and bloated, use 200 MB of memory, and lag every few seconds. There is no good reason for this to be the case. Raven is an attempt to start over and design a code editor from scratch, containing the essential features programmers actually need -- a text editor with (complete) vi keybindings, code completion/navigation, integrated debugger, autorefactor, boilerplate generation -- in a fast, seamless, integrated, batteries-included software package. It starts up instantly, almost never lags, and tries to assist your thought process instead of interfering with it.

Not A Text Editor

Raven is an IDE, not just a text editor, because code editing is a superset of text editing that requires a specialized power tool with code-aware capabilities. It's possible to program in Vim or even a dumb notepad, but this is like cooking everything with a rice cooker, or cutting everything with a fruit knife.

I want to avoid starting as a text editor and then expanding featurewise through plugins to become an IDE, because I don't think that works. It's hard to write great, performant software when you only have access to an API instead of the full stack (most IDE-style plugins end up just wrapping third-party tools like clang). Plus I think the whole premise of plugins is kind of flawed: important features should have first-class support, and unimportant ones can probably be excluded; giving users options about unimportant things just degrades their experience.

I will add a plugin system, but it'll be a configuration system that happens to be Turing complete, and serve mostly as a measure of user dissatisfaction. If I see users repeatedly hacking something together, I'll try to add it to core.

Roadmap

Currently in alpha. Trying to reach a point where I can efficiently write Go apps and spend most of my time in the IDE. This means:

  • A text editor with vi keybindings (half-done)
  • Syntax highlighting (done)
  • Autocomplete with parameter hints
  • Boilerplate generation, which is a sort of autocomplete
  • Jump to definition
  • Integrated debugger
  • Automatic refactor
  • Run at more than 144 FPS (done)

Right now I've got ~6 kloc containing half of a bad vim implementation, syntax highlighting, a file explorer, ctrl+p. Next goals are writing a Go parser (which gets us all our code-aware features), integrating LLDB/Delve (writing a debugger is currently too hard for me), and fixing all the bugs in the vim implementation.

Raven is written mostly from scratch, with only single-header libraries except GLFW, no STL, one giant call to malloc, then custom memory all the way down. I'm starting with Go because it's a simple, well-defined language with a limited feature set and one way to do everything. After that succeeds I'll expand languagewise.

Edited by bh on
Sounds cool!

It's missing Sparkle.framework in the bundle, so it crashes on startup:

1
2
3
4
Dyld Error Message:
  Library not loaded: @rpath/Sparkle.framework/Versions/A/Sparkle
  Referenced from: /Volumes/VOLUME/*/Raven.app/Contents/MacOS/raven
  Reason: image not found


Also, I'd suggest code signing using developer ID to avoid the security warning. It's super important that your project is easy to run.