I'm really excited about Darklang

I've been working on Darklang for a bit over 2 years, and I'm really excited about it. I'm posting this along with a status update that I wrote for the Darklang blog. It's probably best to read that first, for context.

This post is meant to be less formal – just thinking out loud about something I'm interested in. In it, I:

I love software

My earliest memories of computers involve my dad – surrounded by monitors, computers, and books, nerding out.

The story goes that in ~1998 when I was 6, the two of us were living in a trailer in central Pennsylvania, and he had just won some money gambling in Atlantic City. With that cash, he immediately splurged it on all on that equipment and books, set out to learn as much as he could.

Throughout my life, I've seen him build an impressive career in software and databases, quickly moving on up as he intentionally and joyously pursued that world, in its earlier days.

He had genuine passion for it all, and as I grew I gained that passion as well. It generally seemed that his hobbies – computers, chemistry, woodworking, electronics, R/C vehicles, etc – were the primary source of his joy, and he wasn't sure what to make of the rest. While he wasn't always 'there' to talk about life at large, he would always be available for some software BS chat. So, that's where we aligned, and where so many of our conversations went. At least we could always talk about software.

I grew to love software. I used it, wrote it in my spare time related to hobbies, traded software to skip quizzes and projects, sold USB sticks of software to classmates in high school, etc. It became this organic passion, part of my life.

So, I got my first tech internship, doing web dev for my university. And then moved on to work on a scheduling app somewhere else, and HR/Payroll software, and education software, and ecomm software, etc.

Along with the love of software came a growing connection between that world and my father. The two topics became increasingly entwined, and I'd be excited to have something to talk to him about after a workday. "Oh, I've been working on this cool API that (blah blah)," or "ugh you should see this monstrosity of a stored procedure this idiot at work wrote."

At some point, I guess doing software for a day job wasn't enough, and I started going to and speaking at conferences and local user groups for fun. My first time attending a major conference was TechEd in New Orleans – my dad took me with him for my 21st birthday. Anyway, whenever I got interested in various technical things, I signed myself up to talk about them, and traveled as much as needed just to find folks who would listen. For a while, I seriously entertained becoming a Microsoft "technical evangelist" or some other form of developer advocacy.

I especially loved the F# community, hosted an F# podcast for a while, and ended up speaking on the topic at quite a few user groups, along with a few conferences. During one of my F# talks, I ended up meeting my now-wife, Olya – talk about a nerdy "meet cute."

All that to say, my career has always brought me joy, and I've had excess "software energy," bleeding until late hours in the evening. "Software nerd" was a big part of my self-identity.

My dad died, and I burnt out

At the end of 2018, my dad passed away, somewhat suddenly, somewhat expected, definitely tragically.

I was lost – I spent the next year picking up the pieces of a life, selling his stuff, and scraping by at work (thank you, Locai, for supporting me during that time).

With that death, my worldview of software felt weird, as though 40% of my 'software brain' had just been deleted. The passion was gone, the work was slowed, I stopped giving talks, and generally wasn't sure if I even cared about software. Maybe that sounds dramatic, but at the time it felt like a very real struggle and concern to me.

Or, maybe I just needed a few years to deal with grief and logistics.

I first looked into Darklang in Nov 2020

The Darklang team had just announced that they were porting their backend from OCaml to F#, and as a fan of both, that really caught my attention – are they building a cloud-native "F#," in F#?

Naturally, I posted it to my then-work Slack channel and started digging in.

I ended up playing with it for a bit, studying its source, and imagining what it could be. For the first time in a few years, some tech really caught my attention.

A few months later, I asked Paul (the founder) if he'd be up to record an episode of WTF#, which we recorded, but I never ended up publishing. (I felt like I did a bad job in the interview, and couldn't salvage the recording...)

I continued to use Darklang where I could, mostly for hobby projects, along with a few one-off uses at work.

Eventually, though, my excitement faded a bit. As I felt many of Darklang's limitations, it became just a tool I'd use where its pain points weren't too noticeable – after learning where those were.

I joined the Darklang team ~2 years ago

Three years into that post-trauma depression, a year after that initial Darklang nerd-out, I got an email from Arc. It's a job board I had signed up for years prior, and this randomly showed up in my inbox:

This was a neat surprise. At the time, I was still feeling pretty burnt out at work – before my dad's death, I had set a pace for myself, of how much software I can produce. And since his death, I felt so much slower at everything, like I couldn't compare to that 'past productivity.' So, a job hop was tempting – maybe a change of scenery would help.

In any case, the job seemed really interesting. Cloud stuff, F# kinda language, written in F#/ReScript, fully remote, pretty async, Paul seemed cool, and I believed in the product.

So, I pinged Paul, applied, and started porting Darklang's HTTP Client functions from OCaml to F#, as an interview project. A bit later, I officially left my job to work on Darklang.

It's been fun

It's been a bit over 2 years since I joined Darklang full-time, and I've learned a lot.

Working on dev tools has allowed me to nerd out a lot

There are many things I've learned working on Darklang that I've had no experience with before: ReScript, OCaml, interpreters, parsers, WASM and Blazor, Figma, language server innards, writing VS Code extensions, a bunch of terminal/CLI stuff, GCP, terraform, etc.

I get to nerd out about software every day. Not just software – a programming language and environment, like the ones I've loved before, and I can point it in the directions I prefer.

Maybe I'm feeling what every geek has felt when they wrote a programming language. But I think there's something special here.

In any case, I think I've learned more about software in the past ~2 years than in the previous several jobs.

As a software nerd, I'm really excited by the product

I actively resent most things between code and software. I just want to model things in code and walk away, without waiting for compilations, dancing with git, or sitting around hoping CI doesn't fail.

Darklang solves for these problems and more – regardless of Darklang (the company)'s success, I plan to be a super-user of the product long-term, using it for websites, APIs, CLIs, and managing my life.

I like working in the open

All of our code and communications are in the open, in Discord and on GitHub.

I feel like this provides a pretty neat public pressure. Even if no one is looking, I'll feel guilty if I take bad shortcuts in code, and this has led to me being more disciplined than I might usually be.

As a nice bonus, if/when I have to look for a job next, I can point to all of my Darklang PRs to provide a perspective on the work I can get done.

As of 2 months ago, I've been running Darklang

At this point, the Darklang team is composed of Paul (the founder), myself (Stachu), and Feriel. As of the start of the year, Paul has stepped away to focus on Tech for Palestine. While focused on TFP, he continues to act as an advisor for Darklang as much as he has the capacity for. Since that point, I have taken over when it comes to the day-to-day operations of Darklang, and steering the ship.

A few days after Paul and I discussed that transition, I set a few goals to steer towards, with a "two months in" checkpoint (that's now!) in mind.

I'm pretty happy with the progress we've made on all of those goals:

  • "Self-updating, downloadable exe on major platforms"
    We have shipped our CLI runtime's "exe," and it works and self-updates well! That said, we still have to work through one issue related to Mac support, and we need to briefly circle back to support Windows.
  • "Blog posts out" (...)
    As of today, I'd count that as a success!
  • "Notion -> Github and generally tidy product org"
    We used to have more than 200 unorganized GitHub issues, and a mess of many documents in Notion. Super unapproachable to anyone outside of our team. Now we're at ~50 Issues, all of which are relatively clear and approachable, and I'm still slowly trimming down the mess in Notion.
  • "Decent experience editing local .dark scripts"
    So far the editor (VS Code extension) is pretty minimal, supporting syntax highlighting, basic diagnostics, and code execution. I wouldn't say it's a "decent" experience yet, but it should be in a few weeks.
  • "READMEs and such provide a reasonable on-ramp to contrib on darklang-next"
    Until a month ago, we hadn't really updated our READMEs at all in the past year. I've made some good progress here recently, but there's still work to be done to be more accessible to contributors.

Most of my experience has been strictly as a software engineer, without much of a voice in terms of product direction. Now, suddenly, I have to optimize for something a bit different – I have to zoom out a bit, focusing on the whole product, its roadmap, and our users. I've been enjoying it – in any case, spending the past 2 months organizing work toward releasing these blog posts has been fun.

Here's a peek into the manic experience of me trying to make sense of the past year's progress, to write these two posts:

It's been a bit tough to balance all the product work against dev work, but it's still pretty fresh and think I'll get into a rhythm eventually.

Wildly dreaming of Darklang's future

Here's what I want out of Darklang. It often doesn't align with Darklang (the company)'s goals, and it's been a fun and frustrating thing, trying to resist my wants in favor of Darklang's success and sustainability.

The status update paired with this post better represents the near-term priories we'll carry out, but I've been itching for a place to dream about Darklang more wildly. Please don't interpret this as any sort of formal roadmap.

First off, let's assume that all the baseline experience for writing code in Darklang is completed and stabilized, reaching a point where I can port all of my scripts and cloud apps to it. There's too much to cover there, and I've addressed much of it in the other post, so let's focus on the more adventurous prospects.

I'm going to save a bunch of $ and headaches by porting my 'static' sites to Darklang

I have a few 'static' websites that I'm paying nearly $700/year for. They're not making me money, and I'm not really actively working on any of them. I got ambitious one day, worked on some side project, hosted it, abandoned it, and now I have a bunch of stuff to deal with. And repeat, every year or two.

Specifically, I'm tired of paying for Ghost, Fireside, and AWS.

In a month or so, I'm going to save myself a lot of headaches and money by porting the relevant sites to Darklang. I have a few problems with the noted tools:

  • they're not particularly fun/nice to use – if they were, maybe that'd compensate for the other points.
  • they're managed outside of my normal dev world, and each of them require me learning another new thing. Since I only access each tool once every few months, I end up having to learn the thing again each time.
  • I can't customize them nearly as much as I want – ultimately, I want total control of how my websites look and feel.

Mostly, the costs are too high for me to justify. $661/year for a blog (Ghost - $228/2yr), a podcast (fireside - $19/mo), and another simple static website (hosted on AWS - $26.6/mo, for reasons). It's hard to justify those costs - I barely update the sites, and I doubt any of them are getting much traffic (I should check). I bet I'm not alone, though - surely other devs have side projects that just sit, collecting dust and recurring fees.

I'd like to support a broad landscape of editing environments

So far, we've just been building a VS Code extension that supports editing Darklang code. This extension is powered by an LSP-compliant language server, written in Darklang.

In the future, I'd like to support additional LSP-compliant editors, such as Vim and Zed.

Additionally, our VS Code extension should eventually be usable wholly within your browser. Imagine the following: if you want to edit directly in the cloud, your experience is simple – head to a vscode.dev-like site at a URL like darklang.io/editor, log in, edit your code, and you’re done - your cloud or CLI app is changed, and your team can pick up where you left off, immediately. (this should be roughly equivalent to updating something in Darklang-classic today – no installs, just log in and code)

Finally, it'd be nice to eventually bring back a structured editor, like Fluid we had in Darklang-classic. When it worked, it was really nice. This project and this post make me think it wouldn't be that hard to set up, once our language's grammar stabilizes a bit.

I want to write beautiful, modern CLI apps in Darklang

I recently got a terminal emulator working on my reMarkable e-ink tablet, and suddenly I want to live in the terminal as much as possible.

CDN media

So, I've been diving deeper into the terminal world – learning more core Linux stuff, practicing tmux, and daring to enter Vim. I'm imagining a future where I write and run Darklang code on this little eInk tablet, wherever I go, living my life in CLIs.

Not only do I want to write Darklang code on my reMarkable, I also want to create beautiful terminal-based UIs, in Darklang, to be run on my rM. In the past few months, I've been inspired by projects such as Charm and gui.cs, which provide roughly what I'm looking for. I think we can do this in Darklang at some point.

Get back into AI, and see where it fits within Darklang

Circling back to some more pressing, realistic work – over the past few months, Darklang has been approaching a point where we can start integrating AI where it makes sense. Back in Feb-June 2023, we did a few experiments for how AI and Darklang might fit together. I'm looking forward to slowly revisiting those ideas as Darklang stabilizes.

First, there's the obvious - use AI to write Darklang code, as Copilot and Cursor have shown to be very powerful. Due to Darklang's features being so interconnected, we're positioned to provide a lot of useful structured information in the context window, additionally allowing our users to augment what data is included.

Separately, we want to empower our users to leverage AI in their Darklang programs, using prompts, agents, and connected AI counterparts.

More broadly, we're looking at the whole AI landscape, including features provided by langchain. Much of this should fit well within Darklang, given our tight feedback loop and the meta-level access of users' code that we avail.

I'd like to type a lot less, powered by AI and voice-based controls

A few months ago, I stumbled upon Serenade, a tool that enables developers to code with their voice. While I found the experience a bit limited for now, I think there's a lot of potential for voice-controlled computer usage, for code-writing and beyond.

I also saw this talk about Cursorless, which is in a similar space but feels more like verbal Vim commands, with different modes that you switch between, in speech.

I think these products are a great start to what could be completely hands-free software development, powered partly by AI. In an ideal world, I imagine attaching a lapel microphone to my jacket, putting bluetooth earbuds in, and walking around talking to an AI-powered counterpart that's editing code with me, working through it all. Occasionally I'll walk over to a screen to type a few characters, or get visual clarification on what the counterpart is talking about.

Miscellaneous Ideas

The ideas above might take a bit to get to, but I'm confident we could accomplish all of them given enough time, and I have some reasonably-solid ideas of how we get there. Some other ideas are a bit fuzzier – I'll close out this section with some loose thinking.

A few months ago, I read Geoffrey Litt's writings (1, 2) on "malleable software" – software that you can change, based on your needs, as a user. I think there's a lot of room for this as AI evolves, especially within Darklang, given its cohesive nature and tight feedback / dev loop. This ability to edit the end program could apply very well to CLIs, as well as the language server that powers the editing experience.

I've been getting into home automation a bit lately – I bet a Darklang server running on my local network could provide a very secure and tidy setup in this space.

Finally, the most ambitious, absurdist vision: by combining the previously mentioned potential futures of Darklang, I wish to turn this website (stachu.net) into some sort of a highly-customized cross-platform operating system, built with Darklang, to manage my life and provide a public website. I've used software to empower myself in many aspects of my life – weight training, meal prep, journaling, etc. Centrally managing this all within "one thing" that I can fully customize and access everywhere is some sort of dream, and I think it's within reach. I imagine these ambitions somewhat align with Geoffrey Litt's thoughts on malleable software and "bring your own client," as well as perhaps James' mysterious CLI project. They definitely align with this sentiment: "The internet used to be ✨ fun✨. I remember visiting my friend’s websites. They were ugly and quirky and ... were a labor of love and a medium of self-expression." The vision here is a bit fuzzy, but I'll be working towards it, step by step.

Broadly speaking, my goal is to use Darklang for as much of my development as becomes reasonable. I predict that most of my code will be written in Darklang in a year, anyway.

Follow Along!

If you're interested in following progress on Darklang,