Top
Best
New

Posted by usrme 1 day ago

Code and Let Live(fly.io)
https://sprites.dev/
386 points | 144 comments
therealwardo 9 hours ago|
I really want to love this, but my experience in the first 20 seconds is unfortunately like some of my other experiences coding against Fly APIs, they're broken.

https://sprites.dev/api has this command:

$ curl -X POST "https://api.sprites.dev/v1/sprites" \ -H "Authorization: Bearer $SPRITES_TOKEN" \ -d '{"name": "my-sprite"}'

which responds with

{"error":"name is required"}

if you use the request body in the full "Create Sprite" documentation at https://sprites.dev/api/sprites#create then it does work.

can I live with some rough edges for some personal workflows that only impact me when things break? sure. however, I was thinking about playing with some CI/CD stuff using sprites that would impact our whole team if things broke and I'm really on the fence because of this experience in the first 20 seconds.

Fly team - please put some black box probes or just better testing on the example you give in the quick start. if you document it, test it.

tvink 8 hours ago||
Probably because you didn't include the content type header?
therealwardo 7 hours ago|||
yep that would fix it. just needs a little docs change.

a "quick start" really should just work when you copy paste them.

rendaw 2 hours ago|||
Can it be some other content type?
nextaccountic 8 hours ago||
Can this issue be reported?

I wish more companies had open issue trackers (some proprietary software have issues on Github for example, but, it doesn't need to be Github, just let people discuss issues in the open)

simonw 1 day ago||
I'm really excited about https://sprites.dev/ - it hits two of my favourite problems at once:

1. Developer environment sandboxes. This is a cheap and convenient way to run Claude Code / Codex CLI / etc in YOLO mode in a persistent sandboxed VM with a restricted blast radius if something goes wrong.

2. Sandbox API. Fly now have a product that lets me make a simple JSON API call to run untrusted code in a new sandbox. There's even snapshotting support so I can roll back to a known state after running that code.

I wrote more a bunch more about this here: https://simonwillison.net/2026/Jan/9/sprites-dev/

dang 17 hours ago||
I know you know this, as you posted it, but readers might want to look at this related thread:

Fly's Sprites.dev addresses dev environment sandboxes and API sandboxes together - https://news.ycombinator.com/item?id=46561089 - Jan 2026 (10 comments)

realty_geek 23 hours ago||
I have found container-use to be super useful for this.

https://container-use.com/quickstart

BTW Simon, I was super happy when I heard on Theo's podcast that he will be encouraging you to monetise your work more. I'm super appreciative of your work and I'm pretty convinced that the more you profit from it, the better the universe will be!!!

skrebbel 5 hours ago||
For those of us who weren’t on that podcast, can you clarify who Theo is?
genghisjahn 46 minutes ago||
Theo Brown? T3.gg?
spondyl 6 hours ago||
Philosophically, I like Fly and have been a customer since very early on.

That said, I dread having to do anything CLI related, which for hobby projects is like once every few weeks.

Glancing at the docs for Sprite, I worry that this will be another CLI where a good 95% of the time that I go to invoke a command, my workflow is interrupted by an auto-updater that takes longer than whatever interaction I'm trying to do and derails my train of thought.

causal 3 hours ago|
Same. Abandoned fly for Digital Ocean when I found myself hitting my head against the wall trying to get their "just works" to work too often.
abelanger 15 hours ago||
This is seriously cool - it's exactly the DX and API I've been waiting for from sandboxed execution providers.

I'd love to be able to configure the base image/VM in a way that doesn't bundle coding tools or anything else I don't need, and comes with some other binaries installed (I'm more interested in using this as an API for a sandbox use-case I have). Is there a way to do this at the moment / is this on the roadmap?

Another option would be configuring the sprite via checkpoint and then cloning the checkpoint from a base sprite, but I don't see this option anywhere either.

indigodaddy 10 hours ago|
Yes! It would be kinda cool to have the ability to docker-deploy (think the fly method even -- just to get your sprite on its feet the way YOU want it) a base sprite image and then just go from there in the normal sprite way from then on.
jFriedensreich 15 minutes ago||
i dont think i really get what this gives me over docker. everything i read is how i work for years
vulcan01 11 minutes ago|
Docker does not and cannot offer full isolation. A sandboxed VM on someone else's computer is less likely to be problematic for running untrusted code than a container on your system.
chrismccord 10 hours ago||
I've been having so much fun working on sprites (and working with sprites) the last the several months. There's some neat parts of the Elixir side of this we're going to open source soon.

Also check out the 5 min demo we put out where I walk thru some sprite basics: https://www.youtube.com/watch?v=7BfTLlwO4hw

tptacek 10 hours ago|
One of the coolest things about this is that Claude in his environment --- without him asking to --- knows how to drive Sprites. If you ask it to run a server, it will register it as a local service so it survives reboots. Without you asking to, it'll checkpoint when it makes big changes. I think this is kind of freaky.

I can't say enough how, if you're using this like Kurt and Chris have been, you have like, a dozen sleeping Sprites in your Sprite list. If you're not doing anything with them, they're not really costing you anything. When you want to do something new, there's no point figuring out which of your existing Sprites to do it on. Just make a new one.

Always having a sane place to run anything I happen to be doing, without making any decisions, it's a weird feeling.

losvedir 1 hour ago|||
Oh no, as someone who hoards browser tabs, I fear where this will lead me...
mcintyre1994 6 hours ago||||
That’s a great demo! For curious mere mortals, are all those custom instructions that make Claude know how to use it public? I’d like to learn how to drive it myself too, just out of curiosity!
kasey_junk 3 hours ago||
Check out the skills that are installed on the box by default
indigodaddy 10 hours ago|||
Do we pay a storage penalty for inactive sprites?
tptacek 10 hours ago||
You pay for the storage you actually use (not the raw capacity). If you build, like, a relatively complicated Python web service with some assets, and all the build deps that go with that, you might be on the hook for, like, 90 cents in a month.
indigodaddy 10 hours ago||
Right that makes sense thank you
mcintyre1994 6 hours ago||
Okay this is super interesting!

As I was reading this I was a bit confused by the issues they mention, but at work I use Claude SSHed to a persistent dev server and I’d be annoyed if I didn’t have eg my git repos there all the time or any part of that workflow was ephemeral. I’m not really aware of what everyone else is doing with sandboxes etc.

But the bit at the end with the MDM server made it click for me. I’ve started generating tiny iOS apps for personal software stuff, because they solve data storage better than the web (at least on iOS). A database on some other server seems like a bad fit/overkill for this stuff, client side storage is too flaky because Safari. But iOS apps are limiting in their own annoying ways compared to web apps.

This looks like a really interesting solution, I can just store the data on a sprite with SQLite or whatever. Visit its URL to use my app, then does it go away on its own after a short time? I could have done that before with a server with storage, but this seems easier/probably cheaper.

If this works well/the way I’m hoping it might be the sweet spot for simple personal software that needs persistent data and you want to run anywhere.

One feature that would make this really nice is if it could have something like Vercel preview environments, where I need to auth my fly account to view the URL. That'd solve the public URL without me needing to do my own auth thing in every app.

losvedir 2 hours ago|
How do you make these personal iOS apps? Do you have to release them to the App Store? What if you want a small handful of users (eg family members)? And does Android work similarly?
mcintyre1994 1 hour ago||
You can deploy from XCode to your iPhone, and it seems to behave like any other app when you do that. I do have a paid Apple developer account, and I think I read that if you don't then you have to re-sign the app every 7 days. If you wanted a small number of users then I don't think this would work. I think you could use TestFlight, which is Apple's method for distributing an unreleased version of an app, but I'm not sure what the review process would look like for that. Android would be much easier as long as you can still sideload APKs, you could just build the APK and send it to everyone to install. I read that there were some changes to sideloading APKs but I don't know the details.

In terms of actually making the app, I don't know Swift or iOS at all so it's all generated. Usual caveats, and I'm only running them on my own phone. I ask Claude (not code) to help me with the spec, I give it some bullet points and it asks a bunch of clarifying questions then gives me a spec. I put that in a new directory, fire up Claude and use the ralph-loop plugin (https://github.com/anthropics/claude-code/tree/main/plugins/...):

> /ralph-loop:ralph-loop "Implement the iOS app described in app-spec.md. You have access to xcode CLI tools. You should write tests and use them to verify your work. The task will be complete when the app is fully implemented, with all tests passing. Output <promise>COMPLETE</promise> when finished." --max-iterations 50 --completion-promise "COMPLETE"

Once it's done you can open the app in XCode, test it in a simulator, play with it and iterate a bit and then send it to your phone!

Editing to add because I can't edit the original post: I think the limiting factor here might be the concurrent sprites limit. It seems like if you're on pay-as-you-go then you can only have 3 running concurrently, and have to subscribe to get 10.

sheepscreek 1 day ago||
> Claude is a hyper-productive five-year-old savant. It’s uncannily smart, wants to stick its finger in every available electrical socket, and works best when you find a way to let it zap itself.

This alone was worth the upvote!

senko 15 hours ago||
I might have missed this in the docs, but is there a way to fork/clone a sprite, or restore a checkpoint into a new one?

Use cases: set up my preferred env in one sprite and use that as a template for others; or fire off a few independent sprites with claude code exploring alternative solutions, then choose a winner and reap the rest.

tptacek 14 hours ago|
It's coming, and it'll make sense how and why next week when I run the "how this shit works" post.

I actually pushed to include it in the launch release. You'd have to ask Kurt why he didn't, but I think the idea is just to get more real-world usage first.

mcintyre1994 6 hours ago|||
Do you expect that to replace git worktree for getting Claude to work on multiple things in parallel? That was something I was curious about watching the demo video.
senko 5 hours ago|||
> It's coming, and it'll make sense how and why next week when I run the "how this shit works" post.

Thanks! Also looking forward to reading the post :)

> the idea is just to get more real-world usage first

My particular wish notwithstanding, I agree with this.

johnfn 16 hours ago|
Wow, this looks absolutely fantastic. Can't wait to take it for a spin. I'm actually surprised it isn't seeing more traction here!

In particular, I'm really excited about the extremely fast start up time and checkpointing. I'm curious if anyone knows any alternatives in this space?

More comments...