spunto

mcp
Security Audit
Fail
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.

SUMMARY

Your notes, with room to work together. Offline Android, self-hosted web and optional AI.

README.md

Capture a thought. Keep the thread. Your notes, on a server you own.

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

Spunto web in Carta: Darth Vader’s saved checklists, nested labels and quick capture, with the ink-wave background

A checklist for the Death Star, a calmer follow-up with Luke, and everything connected by labels. Fictional notes, saved in the running app.

Search for #imperial returns the Death Star and Luke notes in Ardesia dark mode, including their saved checklist states The Death Star note in Elettrica, with checked tasks, a saved follow-up and expanded revision history showing its earlier version

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 notes

Capture and timeline: a Death Star inspection checklist and a follow-up about Luke Offline label search: #imperial finds the Death Star and Luke notes Note detail: checklists, nested labels, revision history and the private-note control

Capture → find → revisit. Fictional sample notes — even Darth Vader needs a second brain.

Labels and views: nested habits, imperial and life labels with note counts

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.

The same saved Darth Vader notes in Salvia, with the Plain background selected The same saved Darth Vader notes in Corallo, with the Artwork ink waves selected

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:

Ko-fi

Reviews (0)

No results found