Deploy Sure
Personal finance app for net worth, budgets and transactions
Redis
Just deployed
/data
worker
Just deployed
Just deployed
/var/lib/postgresql/data
Just deployed
sure-storage
Bucket
Just deployed
Deploy and Host Sure on Railway
Sure is an open-source personal finance app for tracking net worth, accounts, transactions and budgets in one place — the maintained community fork of Maybe Finance, whose team open-sourced roughly a million dollars of work before shutting down. Household finances are about as sensitive as data gets: a budgeting service sees every salary, balance and purchase. Self-host Sure and that stays on infrastructure you control, with the dashboards and net worth tracking commercial tools charge for.
This template runs Sure the way its maintainers run it in production. The sure service is the Rails web app serving the UI and API. The worker service is a separate Sidekiq process handling account syncs, market-data refreshes and scheduled jobs, so a long import never blocks a page load. Postgres holds every account, transaction and setting, Redis backs the job queues and the Rails cache, and an object storage bucket holds photos and attachments — which is what lets web and worker share files. Deploy Sure on Railway and all five pieces are wired over private networking before the first page load.

Getting Started with Sure on Railway
Open the deployed URL and you land on the registration page. There are no default credentials — the first account you create becomes the instance super admin and owns the family your household joins. Passwords need eight characters or more with upper case, lower case, a digit and a symbol. Onboarding then covers three steps: profile and optional photo, preferences, and what you want to use Sure for.
On the dashboard, add your first account from New asset in the left rail — pick Cash for a checking or savings account and enter its balance. Add two or three transactions from Transactions → New transaction, and the dashboard immediately shows net worth, a balance sheet by asset class and a monthly income-versus-expenses summary. That round trip is the quickest check that the deployment is healthy: it exercises the database, the balance calculators and the charts.
Then visit Settings → Self-Hosting and switch onboarding to Closed once your household has registered, so the public URL stops taking signups. The same screen takes an OpenAI-compatible key for the AI assistant, off by default.

About Hosting Sure
Sure models a household's whole financial picture: depository accounts, credit cards, loans, investments, crypto, property and vehicles, each with its own balance history. It computes net worth over time, categorises spending, and builds budgets and reports from transactions you import or type in. Self-host it when a spreadsheet is no longer enough but you want neither a subscription nor a third party reading your bank data.
Key features:
- Net worth across every asset and liability type, with historical charts
- Transactions with categories, rules, merchants, transfers and CSV import
- Budgets and reports, including cashflow and income-versus-expense views
- Multi-currency support with free exchange rate and security price data
- Family accounts, so each household member gets their own login
- Passkey and OpenID Connect sign-in, plus a REST API and an MCP endpoint
- An optional AI assistant that answers questions about your own data
The Railway architecture separates the parts that scale differently. The web service handles requests; the worker runs everything asynchronous — nightly syncs, rate refreshes, bulk categorisation — through Sidekiq, which keeps its queues and cron schedule in Redis. Postgres is the system of record, and the bucket exists because Railway volumes attach to one service while both processes need the same files.
Why Deploy Sure on Railway
Railway removes the infrastructure work from a multi-service Rails app:
- Postgres, Redis and object storage provisioned and connected automatically
- Private networking between app, worker and datastores, no ports exposed
- A managed HTTPS domain with certificates handled for you
- Push-to-deploy from the source repository, with build logs and rollbacks
- Managed Postgres backups, so your history is not on one disk
Common Use Cases
- Tracking household net worth across banks, brokerages, mortgages and vehicles
- Replacing a budgeting spreadsheet with categorised transactions and budgets
- Keeping financial data on your own infrastructure, not a hosted aggregator
- A shared family instance where each person signs in but sees joint data
Dependencies for Sure
- Sure —
ghcr.io/we-promise/sure:stable, from we-promise/sure. Two services off one image: Puma for the web app, Sidekiq for the worker. - PostgreSQL 18 — every account, transaction, budget and setting.
- Redis — Sidekiq queues, the scheduled-job registry and the Rails cache.
- Object storage bucket — Active Storage for photos and attachments.
Environment Variables Reference
| Variable | Purpose |
|---|---|
SECRET_KEY_BASE | Rails session signing key; must stay stable |
ONBOARDING_STATE | open, closed or invite_only — who can register |
REQUIRE_EMAIL_CONFIRMATION | Leave false until you configure SMTP |
EXCHANGE_RATE_PROVIDER | yahoo_finance (no key) or twelve_data |
SECURITIES_PROVIDER | Same choice, for stock and fund prices |
ACTIVE_RECORD_ENCRYPTION_* | Three keys encrypting tokens and PII at rest |
SIDEKIQ_WEB_USERNAME / _PASSWORD | Optional basic auth on /sidekiq |
RAILS_MAX_THREADS | Puma threads, database pool, Sidekiq concurrency |
OPENAI_ACCESS_TOKEN | Optional; enables the AI assistant |
SMTP_* | Optional; password resets and emailed reports |
Deployment Dependencies
- Source: github.com/we-promise/sure
- Image:
ghcr.io/we-promise/sure— usestable;latesttracks alpha builds - Docs: docs/hosting/docker.md
- Runtime: Ruby 3.4 on Rails 8.1, Puma and Sidekiq 8
Hardware Requirements for Self-Hosting Sure
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU across web and worker | 2 vCPU |
| RAM | 1 GB total | 2 GB across both |
| Storage | 1 GB for Postgres | 5 GB as it grows |
| Runtime | Ruby 3.4, PostgreSQL 16+, Redis 7+ | PostgreSQL 18, Redis 8 |
A household instance is small — the database stays in the tens of megabytes for years of transactions. Memory is the constraint: Puma and Sidekiq each load the whole Rails app.
Self-Hosting Sure
Upstream ships a Compose file running the same pieces on one machine. Fetch it and its environment template:
curl -o compose.yml https://raw.githubusercontent.com/we-promise/sure/main/compose.example.yml
curl -o .env https://raw.githubusercontent.com/we-promise/sure/main/.env.example
Generate the session secret before first boot — changing it invalidates every login:
openssl rand -hex 64
Put that in .env as SECRET_KEY_BASE, set POSTGRES_PASSWORD, run docker compose up -d and open http://localhost:3000. On a public host you also need a reverse proxy terminating TLS and RAILS_ASSUME_SSL=true so Rails issues secure cookies. This template skips all of that.
Is Sure Free to Self-Host?
Sure is free and open source under AGPL-3.0, with no paid tier, seat limits or feature gates. Exchange rates and security prices come from Yahoo Finance by default and cost nothing. The AI assistant is the only feature with an external cost, and only if you supply your own key. On Railway you pay for the compute, database and storage the instance uses.
FAQ
What is Sure? A self-hosted personal finance app for tracking net worth, accounts, transactions, budgets and investments. It is the maintained community fork of the archived Maybe Finance codebase, and is unaffiliated with Maybe Finance Inc.
What does this Railway template deploy? A Rails web service, a Sidekiq worker, PostgreSQL, Redis and an object storage bucket, connected over Railway's private network, with the web service on a public HTTPS domain.
Why does the template include Redis and a separate worker service? Sidekiq runs account syncs, market data refreshes and scheduled jobs outside the request cycle, storing its queues and cron schedule in Redis. As its own service, a slow import never delays the interface and either side scales independently.
Why is object storage included instead of a disk? Photos and attachments go through Active Storage, and both services need the same files. A Railway volume attaches to one service, so a bucket is what lets them share.
How do I stop other people signing up on my self-hosted Sure instance?
Register your own account first, then set ONBOARDING_STATE to closed, or switch onboarding to Closed under Settings → Self-Hosting. Use invite_only if household members should join with a code.
Do I need an API key for stock prices and exchange rates?
No. Both providers are set to Yahoo Finance, which needs no key. Switch EXCHANGE_RATE_PROVIDER and SECURITIES_PROVIDER to twelve_data with a free key if you prefer that source.
Template Content
