-
Notifications
You must be signed in to change notification settings - Fork 121
chore: railway blog #3031
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
chore: railway blog #3031
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
export const author = "nicholas-kissel" | ||
export const published = "2025-10-01" | ||
export const category = "changelog" | ||
export const keywords = ["railway", "self-host", "marketplace", "open-source", "deployment", "stateful", "durable objects alternative", "actors"] | ||
|
||
# Self-Host Rivet on Railway | ||
|
||
Rivet is now a verified app on the Railway Marketplace. With a few clicks, you can deploy and self-host Rivet on Railway and start building stateful apps anywhere you can run Node.js or Bun—without vendor lock-in. | ||
|
||
## What’s New with Railway | ||
|
||
- **One-click deploy**: Spin up Rivet on Railway in seconds. | ||
- **Two templates**: [Rivet Starter](https://railway.com/deploy/rivet-starter) with example app; [Rivet](https://railway.com/deploy/rivet) blank template to start fresh. | ||
- **Full Rivet Engine**: Actors, state, routing, and persistence. | ||
- **Inspector included**: Real-time actor visibility out of the box. | ||
|
||
|
||
## Why Rivet? | ||
|
||
**Open-source alternative to Durable Objects** | ||
Durable-Objects-style per-key isolation with portability: run it yourself, keep control of runtime, data, and costs. | ||
|
||
**Actors** | ||
Each Actor owns a key (e.g., a user, room, cart) with single-threaded execution, in-memory state, and persistence. That means no ad-hoc locks, no “who owns this?” routing, and no bolt-on caches. | ||
|
||
**Built-in visibility** | ||
Rivet Inspector gives live views of Actor state, messages, and performance for fast debugging. | ||
|
||
|
||
## How to build with Actors | ||
|
||
**AI Agents** | ||
- Per-agent memory lives in the Actor (no external cache glue). | ||
- Tool calls/workflows run sequentially in one place—no race conditions. | ||
- Simple long-running steps via Actor messages and scheduled work. | ||
|
||
**Real-Time & Collaboration** | ||
- Make each room/document a single Actor: ordered events, membership, and presence in one spot. | ||
- Broadcast to clients from the room Actor (predictable fan-out, no custom pub/sub scaffolding). | ||
|
||
**Stateful APIs** | ||
- One Actor per entity (user/cart/session). | ||
- Built-in idempotency per key (retries don’t double-apply). | ||
- Consistent read-modify-write without database locks. | ||
|
||
**Distributed Workflows** | ||
- Decompose by key; Actors communicate via messages instead of shared locks. | ||
- Timers/scheduled work per Actor for sagas and retries. | ||
- Horizontal scale by sharding keys—no global coordination layer. | ||
|
||
## Get Started | ||
|
||
Choose the [Rivet Starter](https://railway.com/deploy/rivet-starter) template to explore with an example chat app, or the [Rivet](https://railway.com/deploy/rivet) template to build your own. | ||
|
||
For detailed deployment instructions, see the [Railway deployment documentation](https://www.rivet.dev/docs/self-hosting/railway). | ||
|
||
## Support | ||
|
||
- [GitHub Issues](https://github.com/rivet-gg/rivet/issues) | ||
- [Discord](https://rivet.gg/discord) | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The file is missing a newline at the end, which is a common best practice in text files. Many Unix tools and version control systems expect files to end with a newline character. Adding one will prevent potential issues with diffs and concatenation operations.
Spotted by Diamond

Is this helpful? React 👍 or 👎 to let us know.