Just recorded this little performance
demo of
@overtone_app
while working on my talk for
@localfirstconf
.
Near-zero query latency enables a magical UX.
🔮 GraphQL prediction for 2019: Resolver-first server frameworks will begin to replace the currently popular schema-first approach.
Main reasons:
◆ No code redundancy (i.e. single definition of resolvers and types)
◆ Better code reuse & type-safety
◆ Superior DX
🤯 Just tried out the upcoming Next.js version (via canary) together with Prisma 2 for type-safe DB access within (!) your React component. Safely. This tech stack feels like a huge leap forward! Expect a demo soon!
🤦♀️ Every time I'm hearing "GraphQL is overkill" I remember the times when people said "React is overkill". Sure it is something you have to initially learn but once you're familiar with it, it's literally the easiest way to build a good API.
I'm starting to give up on React Strict Mode. I've spent dozens of hours fighting subtle state bugs caused by strict mode in development that I'm certain can't happen in production.
React 18 now executing useEffect twice in local development is kind of a breaking point for me.
My 2 big (technological) bets for this decade:
1) Local-first: A different way how apps are architected – mainly how data flows and responsibility of client vs server.
2) Effect: A better foundation to build with TypeScript.
💯 One of GraphQL's biggest superpowers is code-generation and end-to-end type-safety. We're currently working on some pretty neat tooling to get these benefits with a Rails-like developer experience. More soon!
The day has come. I've migrated to the new, official SQLite WASM build in favour of absurd-sql.
Big shoutout to
@jlongster
for pioneering a new era of web apps! 👏
After many recommendations, I finally switched from VSC to
@cursor_ai
and ... wow!
It's absolutely incredible. If you like Copilot (or if you don't), you'll be blown away by Cursor.
There is no going back. 🤯
Only adding an entry to `/etc/hosts` won't be enough as different projects (e.g. running on :3000) might still clash.
Tools like Vite / Next.js should make this more seamless for local development - ideally even with automatic SSL certs.
Finally came around to publish my first Figma plugin last weekend. 🎨
It lets you do VSC-style syntax highlighting directly in your Figma designs (e.g. also useful for presentations). I needed this myself many times so eventually I just built it. 😃
Frontend development is tricky enough. Why do I have to additionally deal with different behaviour in dev vs prod?
Am I the only one experiencing these friction points?
One of the local-first killer features is automatic data syncing.
Similarly how React freed developers from manual view rendering/maintenance, local-first sync engines free developers from manually fetching and pushing data.
This unlocks global reactive data.
I'm very excited to announce the first local local-first meetup in Berlin on Wed, Jun 21.
We'll have some amazing talks by
@_adamwiggins_
,
@geoffreylitt
,
@steveruizok
and others about local-first at scale, CRDTs, high-perf state management & more!
I have a massive amount of respect for VSCode. For me it's the new reference example for steady progress & continuous small improvements that make up a great tool. Big up to everyone working on it! 💪
Fellow software engineers, what's your strategy to "stay ahead" in the coming age of AI? 🤖
What skills are you investing in?
Copiliot, Chat GPT etc is just the beginning and already had a massive impact on "micro" coding tasks. For now I'm doubling-down on system design.
⚡️ esbuild is probably the most underrated tool in modern web development. Works incredibly well and is blazing fast.
🙏 Thanks for this amazing tool
@evanwallace
My
@workerconf
keynote about local-first development is now on YouTube.
I’m very excited about this (potentially) new era of web development. Feedback welcome! 🙏
I've mentioned
@EffectTS_
a lot over the past 2 years but there weren't any resources / docs available. Until now.
Effect now has pretty comprehensive docs and just today
@ethanniser
has created a fantastic 9min intro video. 💯
Intro:
👨🏼💻 I'm very excited to speak about "Layered GraphQL Architectures" on Friday
@graphqleu
. I'm having a hard time fit everything in. Lots of interesting topics incl. GraphQL service-to-service and end-to-end type-safety! 🤯
I’m looking for a UI designer to design (and ideally code) the landing page (and logo) for an open-source project I’ve been working on for the last year. (Excited to share more soon!)
DMs are open if you’re interested or know someone!
Super excited for
@localfirstconf
in Berlin this week! So many amazing talks and fascinating people coming!
And still can't believe we sold out the conference in just over a week. 🤯
Is it just me or are "Suggested Topics" ruining Twitter for anyone else? 🤮
My feed is full of random topics I've never subscribed to - many of them I strongly dislike.
Very excited to launch the beta of
@contentlayerdev
today!
As content is still surprisingly difficult to work with when building modern sites, I've been building a "Prisma for content" over the past few months.
It's already used in over 300 live projects. I hope you like it! 💜
Working with content (Markdown files, CMS, ...) is surprisingly difficult when developing modern sites.
Contentlayer (now in beta) is a content SDK which aims to make content easy for developers with a focus on great DX & performance.
Started working on syncing support for LiveStore. Unlike other syncing solutions, it's not based on CRDTs but uses event sourcing with a rebase approach.
The implementation is combining a BroadcastChannel and WebSockets. Still lots of work ahead but it's a good start.
Super excited to officially announce Local-First Conf 2024 in Berlin!
I'm really happy to see more and more developers building local-first apps. This event will be a great opportunity to meet other builders and get inspired.
Announcing Local-First Conf 2024
The first in-person local-first conference for software builders.
📅 30th May 2024
🌍 Berlin, Germany
Get your ticket today. Only 150 available. 👇
I had the great privilege to talk to one of my absolute heros in software: Rasmus Andersson aka
@rsms
.
We go deep on software quality, app performance and how local-first is a fundamental part of his new operating system called Playbit.
I hope you enjoy this conversation!
Episode
#6
is out.
@rsms
on software quality, the data models behind Spotify/Figma and an overview of
@playbit_
, a local-first operating system built from scratch.
🤯 Very exciting to see a new generation of client-side data fetching tools.
Just recently the following new tools have launched 🙌
◆ by
@zeithq
◆ by
@thesamdd
◆ by
@tannerlinsley
Really excited to see (almost) all local-first data layers aligning around Effect Schema (incl. LiveStore, ElectricSQL, DXOS, Jazz, Automerge, ...)
It not only provides the best DX but also will result in a cross-compatible ecosystem which is better for everyone.
Is anyone using SWR by
@zeithq
with GraphQL? I'm very curious to hear opinions on how it deals with state handling compared to other GraphQL clients like Apollo, Relay or urql.
♻️ RT for visibility would be appreciated
The Effect community has more momentum than ever. 🔥
We've come a long way since the first releases more than 4 years ago and we're just getting started.
So many exciting improvements and new features in the pipeline! 🤤
Making sure a web app works well with multiple tabs is a distributed systems problem I severely underestimated. 😮
Luckily I think I'll be able to absorb most of that complexity as implementation details of
@livestoredev
.
Agree. Will post my version with Trellix some time later this year combining local-first and RSC.
Hoping to push the limit on:
- no frame drops
- works completely offline
- undo/redo
- persistent state across reloads
- realtime sync (also across tabs when offline)
📚 For everyone asking: Here are my slides for last weeks talk at
@graphqleu
about "Breaking up the Monolith: Layered GraphQL Architectures". The recorded talk will be online soon as well!
What's harder than "offline-support"? Making sure that apps work well in bad network conditions.
I'm using an old school app called "Network Link Conditioner" (which ships as a macOS settings tab) to test and harden my tools and apps for bad connectivity.
Just tried out Flow again after 2 years of using TypeScript. So glad I decided for TypeScript back then. The difference in terms of tooling support and ecosystem is just insane. Go 👏 use 👏 TypeScript!
It's been two years now of building
@overtone_app
🎂
It's been both more fun and technically challenging than I ever expected. Planning to offer early access next year.
Had a really fun time on
@syntaxfm
with
@wesbos
&
@stolinski
chatting about ...
◆ Building a new music app (
@overtone_app
)
◆ How local-first enables higher quality software
◆ How Effect helps you writing better TypeScript
Would love to hear your feedback!
The demise of Twitter might just tip me over the line to re-start my blog.
Keen to share my experience on the following topics:
◆ Effect: Functional programming in TS
◆ Local-first app development
◆ Dev workflows (e.g. WASM, Open Telemetry, ...)
... anything else?
Really excited about an upcoming
@localfirstfm
episode with
@rsms
. Going deep on various topics including software quality, data model tradeoffs & more.
In collaboration with SkipLabs, Riffle and
@tantaman
, we sketched out a simple SQL query extension for GraphQL-like nested query results. 👀
It's already really nice to use and will allow me to simplify my application (e.g. by removing GraphQL on top of SQLite).
Effect:
Effect replaces most one-off libraries with a unified standard library and gives you new superpowers when building apps with TypeScript including:
◆ Type-safe error handling
◆ Better composability & code reuse
◆ Built-in observability (e.g. via Open Telemetry)
A best practice I've embraced over the past years (particularly when building tools/libraries):
Don't investigate & fix weird errors right away but first improve the error handling path (e.g. better error messages, structured errors, ...).
The next time you (and others) come
The Effect ecosystem is already growing and evolving at an incredible pace. 😮
During the last week alone we've seen:
- 1st-class caching
- Effect Schema/Query (as replacement for zod & dataloader)
- RPC/HTTP servers (replacement for tRPC)
- Multiple SQL client integrations
I wish I could augment my development workflows with hardware controllers (e.g. Ableton Push). Imagine a physical knob to ...
◆ scrub through a time travel debugger
◆ fine-tune spacing values in Chrome Devtools
◆ browse through code blocks
DAWs have done this for decades!
To all Tailwind CSS users:
When styling gets more complex, is there a pattern/best practice that allows you to "annotate" certain used classes (e.g. via a comment) - for example to explain why a certain class is needed?
In case anyone wants to give the new SQLite WASM builds a try - I've created a Vite-compatible ESM/WASM package and published it on NPM `sqlite-wasm-esm`
Already seems to work well as a replacement for absurd-sql.
I have a lot of respect for folks innovating how apps are built in a server-centric way. However…
I’ve never been happier building apps local-first. So many layers complexity simply disappear.
Not a fit for every app but for most personal and productivity software it is.
Building an RSC-enabled framework right now is giving terrible ROI vibes. Around every corner there is some vague package/pattern/API/convention waiting for you. Despite my overall success in taking things slightly beyond proof of concept, I'm reluctant to invest in the next
Hard to beat the feeling when reaching 0 TypeScript errors after a massive refactor. 😌
@EffectTS_
giving me the confidence that when it compiles, it works. ✅
Next-generation IDEs won’t be exclusively focused on code editing anymore.
It will be all about AI-driven multimodal system design (e.g. interactive system diagrams, live data etc).
It will be awesome!
🔒 Auth is still the biggest friction points for newcomers building applications with GraphQL. This PR seems to be the most promising approach in the JS ecosystem so far.
Please get involved! 👇
I've been on a journey exploring local-first with
@overtone_app
for the past 2 years, so I'm really excited to finally kick off this new podcast. 🎙️
I'm looking forward to many more interesting conversations with builders and pioneers across the local-first space.
Introducing localfirst.fm – a podcast about local-first software development.
In this first episode
@pvh
explains what local-first is and why application developers should care about.
To make it easier to detect and analyze performance problems in Overtone, I've been adding some real-time monitors for various aspects of the app (DB queries, re-renders, ...)
It's really fun to use and has already helped me to identify some big bottlenecks!
"You need the freedom to not ship until you've found something good".
Very similar to how Linear is rethinking the startup MVP definition. More products should aim higher.
Ivan and Simon have been building Notion for 10 years. Today, they’re peeling back the curtain on the early days!
Their first meeting. The first version of the product. Our first conversations with users.
First Block, season 1 finale.
Watch now:
I was just asked by
@swyx
why I'm using
@gitpod
over GitHub Codespaces - so here are my main reasons:
🔹Unlimited instances & free for public repos
🔹Faster startup time + easier to integrate (e.g. via Readme badge)
🔹Actually working git integration via SSH
I had a great chat with the folks from
@DevtoolsFM
about Prisma, Effect and local-first.
Would love to hear your feedback. Also check out
@localfirstfm
if you’re interested in those topics.
Anyone (thinking of) building a local-first client for GitHub?
(While I really want to, I don't have the time to do so myself. However, I thought a lot how to build it as it's very similar to how Overtone is built.)
🎉 TinyBase v5.0 🎉
We are thrilled to unveil this major new release - "The One You Can Sync" - and a whole load of exciting new local-first opportunities as a result.
CRDTs for the rest of us 😎