by Mathias Schneider
Rank, sort, and compare your notes across multiple properties using visual tables, charts, and custom weights. Build upon LineUp.js.
LineUp for Bases
Interactive multi-attribute ranking and visualization view for Obsidian Bases. Powered by LineUp.js. Adapted to Obsidian such that it works interactively and adapts to the installed theme.
Features
- Multi-Attribute Ranking: Rank and compare notes across multiple frontmatter, file metadata, and formula properties.
- Weighted & Combined Columns: Create custom composite scores by combining multiple columns with interactive weights and live recalculation.
- Filtering & Grouping: Filter, sort, and aggregate notes with instant visual distributions and box plots.
- Bases Integration: Integrates directly into Obsidian Bases (
type: lineup) as a native view. - Layout & Column Persistence: Custom columns, weighted sums, sorting, and filter states automatically persist directly into
.baseview configurations. - Direct Note Navigation: Single-click any row to immediately open the note in your workspace.
Installation
Obsidian Community Plugin
Install the plugin via the official Obsidian Community Plugin Store: [LineUp for Bases]. Alternatively, install via BRAT.
Manual Installation
- Download
main.js,manifest.json, andstyles.cssfrom the latest GitHub Release. - In your Obsidian vault, navigate to
.obsidian/plugins/and create a folder namedobsidian-lineup. - Copy the three downloaded files into
.obsidian/plugins/obsidian-lineup/. - Reload Obsidian (or reload plugins in Settings > Community plugins), then enable LineUp for Bases.
User Guide
Adding a View to Bases
LineUp for Obsidian adds a dedicated view type for Bases. Simply switch the view to "LineUp" in the view dropdown of your Base, as described in the official Obsidian Bases documentation.
It operates as a rich visual layer on top of your .base data, inheriting base-level filters while allowing independent interactive filtering, grouping, and multi-attribute sorting.
- Persistence in Base Views: Custom ranking columns (e.g., weighted sums), column arrangements, and filter adjustments configured within a Base view are automatically saved to the
.basefile. - Live Embeds in Notes: Using native Bases embed syntax (
![[base.base#LineUp-View]]), LineUp views can be embedded anywhere in your notes as interactive, read-only exploration views.
Core Advantages of LineUp over Standard Tables
| Feature | Standard Table / Dataview | LineUp |
|---|---|---|
| Sorting | Single-column sort (or static secondary sort) | Hierarchical & multi-attribute weighted sorting |
| Numeric Comparison | Plain text digits | Bar lengths, distributions, and min/max domain scaling |
| Combined Scores | Requires manual formulas (rating * 0.7 + pages * 0.3) | Interactive drag & drop weighted columns with live recalculation |
| Categorical Data | Static tags or text | Color-coded stacked distributions with multi-select filter histograms |
| Filtering | Static query code (WHERE ...) | Live histogram range-sliders & visual checkboxes directly in headers |
| Grouping & Summary | Nested list/table sections | Hierarchical row grouping with box plots & aggregate distribution bars |
| Side-Panel | None | Collapsible side-panel (»/«) to inspect distributions and create composite rankings |
| Layout Persistence | Manual query configuration | Automatic view state serialization to .base view configuration |
| Data Safety | Read/write risk depending on plugins | 100% Live Read-only |
Technical Highlights
- Native Bases Engine Integration:
- Built on Obsidian 1.10+ native
.basedata engine. - Evaluates formulas (e.g.,
formula.stars), tags (file.hasTag("book")), and frontmatter properties.
- Built on Obsidian 1.10+ native
- Layout & State Persistence:
- Debounced automatic synchronization of LineUp table configurations (rankings, weights, column order, filters) to
.baseview metadata.
- Debounced automatic synchronization of LineUp table configurations (rankings, weights, column order, filters) to
- Direct Note Navigation:
- Single-click on any row immediately opens the corresponding note (
file.name) in your active workspace leaf.
- Single-click on any row immediately opens the corresponding note (
- Auto-Type Inference & Null Handling:
- Distinguishes numeric properties (with proper min/max domains) from categorical strings.
- Accurately unwraps
NullValueso missing properties don't corrupt numeric columns or ranking computations.
- Drag Auto-Scrolling & Virtual Scrolling:
- Handles large vaults smoothly with virtual row rendering and height stabilization (
min-height: 480px). - Automatically scrolls horizontally when dragging column headers near table boundaries.
- Handles large vaults smoothly with virtual row rendering and height stabilization (
- Theme Synchronization:
- Seamlessly synchronizes with Obsidian CSS tokens across light and dark modes for every theme.
Limitations
- Note Embed State:
- Interactive adjustments made inside embedded LineUp views in markdown notes are held in memory during the session. Changes made directly within the dedicated
.basefile view are fully persistent.
- Interactive adjustments made inside embedded LineUp views in markdown notes are held in memory during the session. Changes made directly within the dedicated
- Canvas Minimum Dimensions:
- In Obsidian Canvas text cards, LineUp requires adequate width and height (at least 480px height) for virtual scrolling and header toolbars.
- Array / Multi-Value Tags:
- Tag lists (
tags: [book, scifi]) are unwrapped as strings by Bases; for discrete categorical filtering in LineUp, dedicated single-value scalar properties (likegenre,status,format) provide the best visual experience.
- Tag lists (
Use-Cases
Analysis of a Book Base
Assume we have a Bases table called Books with the following columns:
titleratingpagesauthorgenrestatusformat
Question A: "Which book should I read next?" (Multi-Attribute Decision)
- Problem: A book rated 5 stars with 900 pages might be too lengthy for a short holiday trip, whereas a short 100-page book rated 2 stars isn't worth reading.
- Solution in LineUp:
- In the LineUp table, open the side-panel using the toggle icon (
») or click the column addition menu (+). - Create a Weighted Sum Column.
- Drag and drop
Rating (1-5)(e.g., 60% weight) andPages(inverted or 40% weight) into it. - The rows instantly re-rank according to the calculated composite score.
- In the LineUp table, open the side-panel using the toggle icon (
Question B: "Which long science fiction books haven't I started yet?"
- Solution in LineUp:
- Genre Filter: Hover over the
Genrecolumn header, click the filter icon, and check onlyScience-Fiction(orScience). - Status Filter: In
Status, filter byWishlist. - Pages Sort: Click the
Pagescolumn header to sort descending. - Histogram: The header histogram immediately visualizes the page count distribution of the filtered subset.
- Genre Filter: Hover over the
Question C: "How is my reading progress distributed across different formats?"
- Solution in LineUp:
- Locate the
Formatcolumn (Paperback,Hardbound,Hardcover,E-Book). - Click the group icon in the
Formatcolumn header to group rows by format. - LineUp automatically aggregates numeric attributes (
Progress (%),Pages,Price) per group into visual box plots and aggregate bars.
- Locate the
Credits & Related Publications
This plugin is built on the LineUp.js library by the Caleydo team.
If you use LineUp for research, please cite:
-
LineUp: Visual Analysis of Multi-Attribute Rankings (Paper | Website)
Samuel Gratzl, Alexander Lex, Nils Gehlenborg, Hanspeter Pfister, and Marc Streit.
IEEE Transactions on Visualization and Computer Graphics (InfoVis '13), 19(12), pp. 2277–2286, doi:10.1109/TVCG.2013.173, 2013.
(IEEE VIS InfoVis 2013 Best Paper Award) -
Taggle: Scalable Visualization of Tabular Data through Aggregation (Paper Preprint | Website)
Katarina Furmanova, Samuel Gratzl, Holger Stitz, Thomas Zichner, Miroslava Jaresova, Martin Ennemoser, Alexander Lex, and Marc Streit.
Information Visualization, 19(2): 114–136, doi:10.1177/1473871619878085, 2019.
License
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.