Johannes Schickling Profile Banner
Johannes Schickling Profile
Johannes Schickling

@schickling

8,295
Followers
600
Following
339
Media
5,242
Statuses

Building a local-first music app @overtone_app with @livestoredev . Host @localfirstfm . DX @EffectTS_ . Founded @prisma .

Berlin, Germany 🇪🇺
Joined August 2009
Don't wanna be here? Send us removal request.
Pinned Tweet
@schickling
Johannes Schickling
3 months
Just recorded this little performance demo of @overtone_app while working on my talk for @localfirstconf . Near-zero query latency enables a magical UX.
35
46
623
@schickling
Johannes Schickling
1 year
Is there an easy way for me to have `my-project.localhost:80` instead of `localhost:3000`?
Tweet media one
440
132
2K
@schickling
Johannes Schickling
2 years
Is it just me? Never know which option means what when resolving git merge conflicts in VSC.
Tweet media one
48
141
2K
@schickling
Johannes Schickling
1 year
How to not handle window resizing
63
31
1K
@schickling
Johannes Schickling
8 months
@sdw The favourite road sign of my German drivers
Tweet media one
6
2
539
@schickling
Johannes Schickling
6 years
🔮 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
25
96
474
@schickling
Johannes Schickling
1 year
`default` exports were a mistake. Trying to avoid them wherever possible.
35
19
410
@schickling
Johannes Schickling
5 years
🤯 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!
11
24
374
@schickling
Johannes Schickling
6 years
🤦‍♀️ 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.
15
67
353
@schickling
Johannes Schickling
7 years
😮 Almost 3000 stars in less than one day and #1 "trending" on Github. Glad we open-sourced Chromeless.
Tweet media one
6
100
352
@schickling
Johannes Schickling
2 years
React Native Skia is absolutely wild. 😮 Works both on mobile and web. Is this the time where I'll say goodbye to the DOM for (web) app development?
Tweet media one
26
35
339
@schickling
Johannes Schickling
2 years
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.
22
25
307
@schickling
Johannes Schickling
6 months
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.
18
26
265
@schickling
Johannes Schickling
6 years
💯 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!
3
27
199
@schickling
Johannes Schickling
2 years
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! 👏
Tweet media one
6
12
169
@schickling
Johannes Schickling
2 years
I guess Copilot has a point 🤔
Tweet media one
2
3
160
@schickling
Johannes Schickling
2 months
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. 🤯
21
8
175
@schickling
Johannes Schickling
4 years
Great keynote and Next-level (🥁) online conference by @vercel . 💯 Also: Looks like @rauchg learned some moves from @tim_cook . 🙏
Tweet media one
Tweet media two
3
7
141
@schickling
Johannes Schickling
1 year
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.
27
0
135
@schickling
Johannes Schickling
1 year
Welcome to Twitter!
Tweet media one
7
7
124
@schickling
Johannes Schickling
3 years
There's a huge opportunity (IMO on the scale of Docker) to productize Nix (or the ideas behind Nix).
7
17
120
@schickling
Johannes Schickling
2 years
Prediction: Effect is going to be one of the most important web technologies in the next 10 years.
Tweet media one
14
10
106
@schickling
Johannes Schickling
5 years
@rauchg @kevinwolfcr @frontsideair @zeithq @HasuraHQ @prisma @fauna Fatih, are you using Next.js with TypeScript or plain Node? Either here’s a sneak peak to an upcoming Prisma integration for Next.js (which is fully end-to-end typesafe without any additional tooling when using TypeScript)
Tweet media one
7
10
107
@schickling
Johannes Schickling
3 years
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. 😃
1
7
105
@schickling
Johannes Schickling
7 years
🤵 Here are the slides of my talk about "Data Management with Next.js & GraphQL" at Zeitday in Berlin.
Tweet media one
1
18
104
@schickling
Johannes Schickling
2 years
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?
7
0
102
@schickling
Johannes Schickling
5 months
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.
Tweet media one
5
16
99
@schickling
Johannes Schickling
1 year
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!
Tweet media one
13
15
99
@schickling
Johannes Schickling
1 year
Text inputs/forms, sort directions, scroll positions, ... UI state should be persistent by default (with opt-out) 💾
Tweet media one
6
5
98
@schickling
Johannes Schickling
6 years
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! 💪
1
17
98
@schickling
Johannes Schickling
1 year
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.
41
2
95
@schickling
Johannes Schickling
4 years
⚡️ esbuild is probably the most underrated tool in modern web development. Works incredibly well and is blazing fast. 🙏 Thanks for this amazing tool @evanwallace
2
11
92
@schickling
Johannes Schickling
6 years
📦 `graphql-import` is now available as a Webpack loader which makes it super intuitive to import .graphql files into your application.
Tweet media one
4
31
91
@schickling
Johannes Schickling
7 years
⭐️ How To GraphQL just hit 1000 stars on Github!
1
16
90
@schickling
Johannes Schickling
2 years
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! 🙏
7
16
88
@schickling
Johannes Schickling
3 months
Effect just landed a massive API simplification and DX improvement addressing one of the most common pain points of using Effect. 🔥
@MichaelArnaldi
Michael Arnaldi
3 months
took 3 years of attempts but looks like we were finally able to kill the need to use an adapter function and we can just yield* effects! PR:
Tweet media one
36
46
407
6
8
90
@schickling
Johannes Schickling
1 year
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:
Tweet media one
0
17
90
@schickling
Johannes Schickling
1 year
My Twitter feed = Elon feed. This is fine. 🤡
20
2
86
@schickling
Johannes Schickling
6 years
👨🏼‍💻 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! 🤯
Tweet media one
0
12
84
@schickling
Johannes Schickling
2 years
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!
33
15
73
@schickling
Johannes Schickling
2 years
I expect to see a lot more (web) apps using client-side SQLite + GraphQL. Allows for sub-millisecond queries. ⚡
6
1
83
@schickling
Johannes Schickling
2 months
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. 🤯
11
5
82
@schickling
Johannes Schickling
1 year
"Offline support" is not a feature but requires a fundamentally different data architecture (e.g. local-first) for it to work in a reliable way.
6
6
77
@schickling
Johannes Schickling
2 years
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.
11
1
76
@schickling
Johannes Schickling
2 years
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! 💜
@contentlayerdev
Contentlayer
2 years
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.
8
68
357
4
13
78
@schickling
Johannes Schickling
2 months
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.
8
3
76
@schickling
Johannes Schickling
2 months
Shout out to everyone who's playing the long game. Keep going - it will pay off!
3
3
76
@schickling
Johannes Schickling
2 months
@threepointone That’s what I’ve addressed with DiffStream for Overtone
Tweet media one
Tweet media two
6
1
73
@schickling
Johannes Schickling
5 months
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.
@localfirstconf
Local-First Conf
5 months
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. 👇
10
45
136
4
13
73
@schickling
Johannes Schickling
2 years
Just tried out Remix today. Seems really cool but the lack of fine-grained HMR (similar to Next/Vite) is a serious blocker for me right now.
7
1
72
@schickling
Johannes Schickling
4 months
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!
@localfirstfm
localfirst.fm Podcast
4 months
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.
1
15
91
0
7
71
@schickling
Johannes Schickling
5 years
🤯 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
2
19
72
@schickling
Johannes Schickling
1 year
Me building @overtone_app ...
Tweet media one
4
4
71
@schickling
Johannes Schickling
5 months
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.
6
8
71
@schickling
Johannes Schickling
5 years
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
4
32
69
@schickling
Johannes Schickling
5 months
Super excited about a special local-first announcement tomorrow. Can't wait to share more! 🤩
0
2
69
@schickling
Johannes Schickling
5 months
One of many reasons why apps like Notion should be completely local-first.
Tweet media one
3
5
69
@schickling
Johannes Schickling
3 months
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! 🤤
5
9
67
@schickling
Johannes Schickling
14 days
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 .
9
1
68
@schickling
Johannes Schickling
2 months
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)
@ryanflorence
Ryan Florence
2 months
@jjenzz @kentcdodds For real. local first is probably endgame with a mix of this RSC stuff
2
0
38
7
0
65
@schickling
Johannes Schickling
6 years
📚 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!
3
21
66
@schickling
Johannes Schickling
3 months
Shipping self-updating PWAs with Vite has never been easier. 🔥
Tweet media one
4
3
66
@schickling
Johannes Schickling
2 months
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.
Tweet media one
5
5
64
@schickling
Johannes Schickling
6 years
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!
5
13
62
@schickling
Johannes Schickling
4 years
I’m incredibly proud to work with such a talented, passionate & hard-working team! 💪 Thank you to everyone who contributed to making this happen! 🙏
@prisma
Prisma
4 years
🚀 Prisma 2.0 is Now in Beta: Type-safe Database Access with Prisma Client
26
186
636
2
3
63
@schickling
Johannes Schickling
8 months
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.
Tweet media one
5
2
60
@schickling
Johannes Schickling
3 months
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!
Tweet media one
1
9
60
@schickling
Johannes Schickling
2 years
🏗️ Underrated development practice: Build yourself a little devtools overlay (e.g. to easily reproduce app state)
Tweet media one
2
3
59
@schickling
Johannes Schickling
2 years
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?
4
0
57
@schickling
Johannes Schickling
5 months
Really excited about an upcoming @localfirstfm episode with @rsms . Going deep on various topics including software quality, data model tradeoffs & more.
Tweet media one
2
4
55
@schickling
Johannes Schickling
1 year
I might start a local-first podcast 👀 @localfirstfm
Tweet media one
8
1
56
@schickling
Johannes Schickling
2 years
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).
Tweet media one
Tweet media two
5
5
55
@schickling
Johannes Schickling
6 months
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)
3
10
55
@schickling
Johannes Schickling
2 months
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
1
3
55
@schickling
Johannes Schickling
1 month
Local AI = local-first data + on-device AI model = ❤️
5
2
54
@schickling
Johannes Schickling
1 year
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
2
11
54
@schickling
Johannes Schickling
2 years
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!
Tweet media one
4
4
55
@schickling
Johannes Schickling
1 year
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?
Tweet media one
21
1
52
@schickling
Johannes Schickling
2 years
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.
1
6
52
@schickling
Johannes Schickling
1 month
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.
@tannerlinsley
Tanner Linsley
1 month
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
40
16
332
4
4
51
@schickling
Johannes Schickling
2 months
Poor man's dark mode 🤷
Tweet media one
3
1
51
@schickling
Johannes Schickling
5 months
@andreasklinger I made the background a bit more Berlin
Tweet media one
3
0
51
@schickling
Johannes Schickling
2 months
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. ✅
Tweet media one
2
3
50
@schickling
Johannes Schickling
8 months
@mschoening Working on bringing back this level of software quality with the convenience of today's cloud platforms with @overtone_app 🫡
Tweet media one
2
5
48
@schickling
Johannes Schickling
1 year
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!
5
2
47
@schickling
Johannes Schickling
5 years
🔒 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! 👇
2
10
49
@schickling
Johannes Schickling
7 months
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.
@localfirstfm
localfirst.fm Podcast
7 months
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.
12
46
146
1
9
47
@schickling
Johannes Schickling
6 years
1/ Strong opinion: Everybody learning JavaScript these days should also learn TypeScript (or other typed version) before building "real applications".
4
9
47
@schickling
Johannes Schickling
1 year
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!
4
6
48
@schickling
Johannes Schickling
5 years
Tweet media one
2
5
46
@schickling
Johannes Schickling
5 months
"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.
@NotionHQ
Notion
5 months
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:
9
32
224
2
2
46
@schickling
Johannes Schickling
5 years
Prisma 2 let's you cheat for typed database access. 💯
@thekitze
kitze 🚀
5 years
working with properly typed libraries feels like cheating
1
2
76
1
3
45
@schickling
Johannes Schickling
3 years
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
5
4
45
@schickling
Johannes Schickling
7 years
Had an amazing time talking about the future of #GraphQL /w @leeb & @schrockn 🙌
Tweet media one
2
6
44
@schickling
Johannes Schickling
4 years
@adamwathan And even better: Fully type safe 🙌
@schickling
Johannes Schickling
5 years
@rauchg @kevinwolfcr @frontsideair @zeithq @HasuraHQ @prisma @fauna Fatih, are you using Next.js with TypeScript or plain Node? Either here’s a sneak peak to an upcoming Prisma integration for Next.js (which is fully end-to-end typesafe without any additional tooling when using TypeScript)
Tweet media one
7
10
107
2
0
44
@schickling
Johannes Schickling
3 months
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.)
17
2
44
@schickling
Johannes Schickling
30 days
Big step for TinyBase! Congrats on the release! 🙌
@tinybasejs
TinyBase
30 days
🎉 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 😎
12
46
462
2
2
43