spunto
Health Warn
- License — License: AGPL-3.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- rm -rf — Recursive force deletion command in .github/workflows/android-recovery.yml
- rm -rf — Recursive force deletion command in .github/workflows/android.yml
- rm -rf — Recursive force deletion command in .github/workflows/release.yml
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Your notes, with room to work together. Offline Android, self-hosted web and optional AI.
Spunto
Your notes, with room to work together. Self-hosted, with optional AI.
Write offline on Android. Pick up on the web. Share a note or a space.
Get started · Downloads · Explore features · Android · Documentation
AGPL-3.0-only · Self-hosted · CalVer
A checklist for the Death Star, a calmer follow-up with Luke, and everything connected by labels. Fictional notes, saved in the running app.
Find a thread with #imperial, then revisit the note and its revision history. Open any screenshot to see it at full size.
Android: capture, search and revisit the same fictional notesCapture → find → revisit. Fictional sample notes — even Darth Vader needs a second brain.
More than a place to put notes
Write a line, make a checklist or add a #nested/label. A short first-run guide introduces capture, labels, search and sync; replay it from Settings whenever you want. The core works on its own; plugins add capabilities in a few fixed places, so your notes remain the centre of the app. Five built-in themes include light and dark modes.
| When you want to… | Spunto helps you… |
|---|---|
| Catch the thought | Write Markdown and checklists, share into Android, use quick capture or dictate with an available on-device speech service. |
| Find the thread again | Search by words and nested labels, with excerpts around matches and a clear distinction from similar meaning. Web checklist results keep their saved state and controls. Add semantic search, related notes and cited answers when AI is configured. |
| Carry context into your work | Curate selected notes into a reusable context pack, with a brief and source snapshots that reveal when the originals have changed. |
| See how your thinking changed | Use Thinking desk → History to arrange selected notes by creation date and record directed builds-on, challenges or replaces connections, keeping the originals intact. |
| Try an unexpected combination | Use Thinking desk → Collision to choose two to five notes from different subjects, add an optional question and develop your own idea with creative prompts. |
| Remember why you decided | Record alternatives, reasoning and an expected outcome in the decision journal. Add dated reviews and outcome notes while retaining the original decision. No AI required. |
| Keep your tags useful | Suggest labels using past tagging examples. Opt in to applying confident existing tags automatically; review new labels and all curation changes yourself. |
| Work together | In the web app on a multi-account installation, share one note or a space with an existing account, with explicit view or edit access. |
| Keep a recoverable record | Use revision history, private notes, export, scheduled snapshots and explicit restore tools. |
Thinking desk is optional and off by default. The space owner enables it in Plugins and opens it from the command palette or a note’s actions. Its History and Collision workflows are manual: no AI, external processing or MCP tools. Review the desk, then explicitly choose Keep private note copy to save a snapshot. It never updates your original notes or refreshes that copy automatically. Changed or unavailable sources block a new snapshot until reviewed or removed; concurrent desk changes reject stale saves.
Thinking desk, context-pack and decision-journal commands require a connection. Android can read synced snapshot and decision notes offline; the web app has no offline note replica. Plugin guides explain these workflows, source review and tag curation.
Make it your own
Open Settings → Appearance to choose Carta, Ardesia, Salvia, Corallo or Elettrica. In the web app, select System, Light or Dark independently of the palette. Use Use a different theme on this device for a browser-specific palette; otherwise the palette follows your instance setting.
Salvia on plain paper; Corallo with ink waves. The same notes, with a different atmosphere.
The browser also offers Background style → Plain / Artwork, Reading face → Serif / Sans, and three text sizes. These choices stay in this browser. See the Appearance controls, or compare Carta, Ardesia dark and Elettrica.
One library, three ways in
| Client | What it is good at | Connection |
|---|---|---|
| Android | Capture, editing, search and a local replica that syncs later. Optional biometric or device-credential app lock. | Core note work continues offline. |
| Web | A larger workspace for notes, review, thinking desks, context packs and instance settings. Capture drafts stay in the browser until Save. | Requires the server; no offline note replica. |
| MCP | Let a coding agent search, read or capture notes through the same server. Separate tokens scope each client's access. | Requires the server and an authorized client. |
Use Android on its own, or pair it with your server using a QR or one-use code. The Android guide explains both paths. Open the web app on your server, or set up API and agent access.
Personal by default, shared when useful
Labels stay the main way to organize notes. Your personal space is the default; you do not need projects, a team hierarchy or a workspace setup step to start writing. Create a shared space only when a group needs the same library and permissions. Its owner manages membership, editors write notes, and viewers read them.
For a single note, use Share and enter the exact username or verified email of an existing account. The form previews the recipient and read/edit capability, including access to linked attachments and future note edits. This grant does not include revision history, linked notes or the rest of the space; other grants or membership can independently provide access. The recipient finds the note in Shared with me. Grants can be changed or revoked, but revocation cannot erase copies already made. This is authenticated collaboration; there are no anonymous public-note links or invitation emails.
Existing and shared notes autosave, with a Save action available immediately. Independent edits can merge, and overlapping changes are preserved as conflict copies for review. A stale plugin form keeps your entries and explains how to copy them before reopening the tool and reviewing changed sources.
The web navigation and Android settings show the signed-in account name;
account details keep your login name, server and phone name separate.
The hosted guide explains multiple accounts, shared spaces, roles and recovery. Sign in with a username and password or an optional SSO provider such as Authentik.
AI on your terms
The core needs no model service. Configure local or cloud profiles when you want semantic search, related notes, translation, summaries, tag suggestions or cited answers. Chat, vision, transcription and embeddings can use different profiles; for example, keep embeddings local while choosing a cloud chat model. Choose models from your configured providers in web Settings → AI; provider addresses, credentials and limits stay under operator control.
Proposed rewrites wait for review. Label automation is an explicit setting restricted to existing labels; new labels and taxonomy cleanup always require your approval. The decision journal, manually curated context packs and Thinking desk work without AI.
Private notes are excluded from built-in AI processing. Agent tokens can read them only when explicitly granted private-note access. Configured cloud models and enabled external integrations can send data outside your server; choose their permissions and profiles accordingly. See the privacy policy, AI configuration and plugin contracts.
Get started
For a local, single-owner installation, you need Git and Docker with BuildKit. The image includes the web app and server. For multiple accounts with optional SSO, use the hosted setup.
git clone https://github.com/vitofico/spunto.git
cd spunto
docker build -t spunto:local -f server/Dockerfile .
docker run -d --name spunto \
-p 127.0.0.1:8080:8080 \
-v spunto-data:/data \
--read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges \
-e SPUNTO_PUBLIC_URL=http://localhost:8080 \
spunto:local
docker logs spunto
Open http://localhost:8080, enter the one-time setup code from the logs and choose your owner password. Your data persists in the spunto-data volume. This SQLite mode has one owner: subsequent sign-ins need only that password. Add an optional private display name in Settings → Profile.
This example binds to your own machine. To use Spunto from your phone or remotely, configure your actual public URL and HTTPS. The Compose HTTPS guide and Kubernetes reference use an imported immutable image and a protected owner-password hash. Operations covers configuration, backups and recovery.
Take your notes with you: download a Markdown ZIP from web Settings → Data, or use Share and Save Markdown on an Android note. Android previews the exact saved text before opening the recipient chooser. This sends a copy, with written links but no attachment files, and grants no Spunto access. Saved local text can be exported offline; recipient copies cannot be revoked.
Downloads and updates
| What you need | Where to get it |
|---|---|
| Android | Download the latest signed Android release, with its APK and checksum. Android 8 or newer. |
| Android updates | Set up Obtainium with the import configuration. It follows signed Android releases directly from GitHub. |
| Server and web app | Build from source, or check the container guide for available prebuilt core images. |
Spunto has been submitted to F-Droid and is awaiting review. It is not listed in F-Droid yet; use GitHub Releases or Obtainium for Android downloads.
Found a bug or have an idea? Open an issue with the client, version and a reproducible example. See Contributing, help translate Spunto, and report vulnerabilities through the security policy. Maintained by @vitofico.
License
GNU Affero General Public License v3.0 only. Contributions are
accepted under the contributor agreement.
Support
If Spunto is useful to you and you'd like to chip in, you can buy me a coffee:
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found








