Understanding the Onelist Data Model
Discover how Onelist's "everything is an entry" philosophy creates a flexible, powerful system that adapts to how you think.
The Core Philosophy: Everything is an Entry
Most apps force you to think in their terms. Your notes go in one app, tasks in another, contacts somewhere else. When you want to connect a meeting note to a project and the people who attended? Good luck.
Onelist takes a radically different approach: everything you store is an "entry" - just with different types. A note, a task, a contact, a web clip, an AI conversation - they're all entries that can connect to each other naturally.
Think of it like a box of LEGO bricks
Every LEGO brick connects the same way, regardless of its shape or color. You can snap a tiny 1x1 brick onto a massive baseplate. Onelist works the same way - any entry can connect to any other entry, creating structures that match how your mind actually works.
- Notes app for notes
- Task app for tasks
- Calendar app for events
- Contact app for people
- Bookmark manager for links
- Note entry
- Task entry
- Event entry
- Person entry
- Bookmark entry
Why This Matters to You
Search Everything at Once
Looking for something you saved last month? Search once, find it - whether it was a note, a saved article, a task, or a conversation.
Natural Connections
Link your meeting notes to the project they belong to, the tasks that came out of them, and the people who attended. Everything stays connected.
Future-Proof
New type of content you want to track? It fits right in. No need to wait for us to build a special feature - the system adapts to you.
AI That Understands Context
When you ask an AI assistant about your data, it can see the full picture - not just isolated pieces scattered across different apps.
Anatomy of an Entry
Every entry in Onelist has the same basic structure. Think of it as a universal container that can hold anything:
{
"id": "abc123", // Unique identifier
"entry_type": "note", // What kind of entry
"title": "My Ideas", // Human-readable name
"created_at": "2026-02-01",
"metadata": { // Type-specific details
// Whatever extra info this type needs
}
}
Tells Onelist how to display it, what actions are available, and what metadata to expect.
The name you see in lists, search results, and links. You control this.
A "bag" for type-specific info: due dates for tasks, locations for events, etc.
Entry Types: Notes & Memories
📝 Notes
The classic entry type. Use notes for your thoughts, meeting notes, ideas, journal entries - anything you write yourself.
Key trait: Notes are mutable - you can edit them anytime. They're living documents that grow with your thinking.
💾 Memories
Captured content from the outside world. When you save a web article, screenshot something, or import from another app - that becomes a memory.
Key trait: Memories are immutable - they preserve exactly what you captured. You can add notes to them, but the original stays unchanged.
Note vs Memory: When to use which?
Writing your own thoughts? Use a note. Saving something from elsewhere? It's a memory. This distinction helps you know what you can trust as a historical record vs. what's your evolving thinking.
Entry Types: Tasks & Projects
✅ Tasks
Actionable items with a clear done/not-done state. Tasks support GTD-style organization with buckets, contexts, and due dates.
Task Buckets (GTD-style)
New tasks that need processing
Ready to do - your active list
Blocked on someone else
Ideas for the future
Contexts
Contexts help you filter tasks by what you need to do them:
📁 Projects
A project is a collection of related work toward an outcome. Projects contain tasks, notes, memories, and anything else related to achieving a goal.
Key insight: Projects are just entries - which means you can link them to other entries. A project can reference a person (the client), link to relevant memories (research articles), and contain tasks (the work to be done).
🎯 Decisions
Recorded decisions with their context, alternatives considered, and rationale. Perfect for documenting why you chose a particular approach.
Entry Types: People & Contacts
👤 Person
People are entries too. This includes humans you know, AI assistants you work with, and even different "instances" of the same AI.
Why are AI agents "people"?
When an AI creates a task or note for you, you want to know who made it. By treating AI agents as "persons," you can track: "Claude Code created this task" just like "Sarah assigned this to me." Same system, consistent tracking.
Entry Types: Conversations
💬 Conversation
Chat sessions and dialogues are entries. When you talk to River (our AI assistant) or have a discussion thread, that's a conversation entry containing the back-and-forth.
Power move: Because conversations are entries, you can link them to projects, reference them from notes, and search across all your AI chats alongside your other content.
Entry Types: Events & Calendar
📅 Event
Calendar events with start times, end times, locations, and attendees. Events can link to the people attending and the projects they relate to.
The connection power
After the meeting, create a note with your meeting notes and link it to the event. Create tasks for follow-ups and link those too. Now you have a complete record: when the meeting happened, what was discussed, and what actions came out of it.
Entry Types: System Types
Some entry types are used internally by Onelist to store configuration and track activity. You usually won't create these directly, but they're useful to understand.
config
Settings and preferences. Your River AI personality, filing rules, and display preferences are all stored as config entries.
log_event
Activity and audit records. When something happens (entry created, task completed), it's logged as a log_event entry.
job
Background task tracking. When you import a large archive or process files, the progress is tracked in job entries.
group
Manual collections of entries. Create groups to organize entries into notebooks, albums, or any other collection structure.
Connecting Entries: How Links Work
Entries become powerful when they're connected. In Onelist, connections are called links. A link connects two entries with a specific relationship type.
// A link connecting two entries
{
"source": "task_123", // The task
"target": "project_456", // The project
"link_type": "belongs_to_project"
}
Links have direction
A task "belongs to" a project, but the project "has" that task. These are two perspectives on the same relationship. Most link types have an "inverse" - the view from the other side.
Types of Links
Organization Links
| Link Type | Meaning | Example |
|---|---|---|
group_member |
Entry belongs to a group | Photo in an album |
belongs_to_project |
Task/note belongs to project | "Fix login bug" belongs to "Auth Refactor" |
contains |
Parent contains child | Folder contains documents |
Task Links
| Link Type | Meaning | Example |
|---|---|---|
depends_on |
This task needs another done first | "Deploy" depends on "Test" |
blocks |
This task blocks another | "Test" blocks "Deploy" |
subtask_of |
Smaller task within larger one | "Write tests" is subtask of "Implement feature" |
assigned_to |
Task assigned to person | "Review PR" assigned to Sarah |
Knowledge Links
| Link Type | Meaning | Example |
|---|---|---|
derived_from |
Created from/based on another | Summary derived from article |
cites |
References another entry | Note cites research memory |
related_to |
General relationship | Two notes on similar topics |
reply_to |
Response to another entry | Forum reply to topic |
Real-World Example: A Project in Action
Let's see how entries and links work together for a real project:
Project: "Launch New Website"
Everything connects naturally. When you open the project, you see all related content. When you complete a task, you know what it unblocks. When you reference a saved article, the link is preserved.
Advanced: Representations
One entry can have multiple representations - different views or formats of the same content. Think of it like having the same document in Markdown, PDF, and HTML formats.
Example: A note with multiple representations
Common representation types include:
markdown- Editable Markdown textplaintext- Plain text for searchoriginal_url- Source URL for web clipswebarchive- Archived copy of web pagetranscription_text- Text from audio/videoimage_jpeg- Image attachments
Advanced: Metadata Flexibility
The metadata field is where each entry type stores its unique information. It's a flexible "bag" that can hold any structured data.
// Task metadata
{
"bucket": "next_actions",
"context": "@computer",
"due_date": "2026-02-05",
"effort_estimate": "m"
}
// Event metadata
{
"start_time": "2026-02-15T14:00:00Z",
"end_time": "2026-02-15T15:30:00Z",
"location": "Conference Room A",
"attendees": ["person-1", "person-2"]
}
// Memory (web clip) metadata
{
"source_url": "https://example.com/article",
"captured_at": "2026-02-02T10:00:00Z",
"reading_time_minutes": 8
}
This flexibility means Onelist can support new use cases without changing the core database schema. Your custom fields fit right in.
Advanced: AI Agent Attribution
When AI assistants create or modify entries, Onelist tracks who did what. This lets you distinguish between your own content and AI-generated content.
// Entry created by Claude Code
{
"entry_type": "task",
"title": "Fix authentication bug",
"metadata": {
"agent_id": "claude-code",
"agent_version": "1.0.0",
"source_context": {
"conversation_id": "abc123",
"working_directory": "/projects/myapp"
}
}
}
Why this matters
- Know which AI created content
- Filter searches by agent
- Audit AI activity
- Track derivation chains
Prevents loops
If AI-A creates something, and AI-B processes it, then AI-A sees it again... we track "derivation depth" to prevent infinite loops.
Reference: All Entry Types
| Type | Purpose | Editable? |
|---|---|---|
| Content Types | ||
note |
User-written content | Yes |
memory |
Captured/imported content | No (immutable) |
article |
Long-form published content | Yes |
photo |
Images | No |
video |
Videos | No |
| Work Types | ||
task |
Actionable items | Yes |
project |
Collections of related work | Yes |
decision |
Recorded decisions | Yes |
habit |
Recurring behaviors | Yes |
| People & Communication | ||
person |
Human or AI identity | Yes |
conversation |
Chat/dialogue sessions | No (append only) |
email |
Email messages | No |
| Organization | ||
group |
Manual collections | Yes |
event |
Calendar events | Yes |
bookmark |
Web bookmarks | Yes |
pin |
Visual bookmarks | Yes |
| System Types | ||
config |
Settings/preferences | Yes |
log_event |
Activity/audit logs | No |
job |
Background tasks | No |
Reference: All Link Types
| Link Type | Direction | Inverse | Status |
|---|---|---|---|
| Currently Available | |||
has_reply |
Topic → Reply | reply_to | Active |
reply_to |
Reply → Parent | has_reply | Active |
comment_on |
Comment → Entry | - | Active |
derived_from |
New → Original | - | Active |
cites |
Citing → Cited | - | Active |
related_to |
Bidirectional | related_to | Active |
has_extracted_item |
Parent → Extracted | - | Active |
| Coming Soon | |||
group_member |
Group → Member | member_of | Planned |
depends_on |
Task → Blocker | blocks | Planned |
assigned_to |
Task → Person | assigned_tasks | Planned |
belongs_to_project |
Task → Project | project_tasks | Planned |
Ready to Experience Connected Knowledge?
Join the beta and see how a unified data model transforms the way you organize, search, and connect your information.