Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
520f438
docs: plan for a working state
k05j Nov 3, 2026
c25ace4
fix: build fails on an unused import in a test
k05j Nov 3, 2026
e19ec32
chore: pin pnpm 12
k05j Nov 3, 2026
3493da8
chore: update npm packages
k05j Nov 3, 2026
33b4b45
chore: launch config for the web view preview
k05j Nov 3, 2026
3c87afd
refactor: forms on tanstack form and zod 4
k05j Nov 3, 2026
955c08f
chore: update rust crates
k05j Nov 3, 2026
094ed26
fix: shell functions in queries that silently matched nothing
k05j Nov 3, 2026
95a3e7b
fix: unsubscribing a shortcut called the subscriber
k05j Nov 3, 2026
a7b4c1a
refactor: credential store behind a trait
k05j Nov 3, 2026
5f6efaa
feat: connection strings and options in the connection model
k05j Nov 3, 2026
119bf4e
fix: edits and a corrected password needed a restart
k05j Nov 3, 2026
2e7d3e1
fix: the connection test failed for users without serverStatus
k05j Nov 3, 2026
5a30f74
feat: sort, projection and counting in the rust find
k05j Nov 3, 2026
29aceb2
feat: connection strings and options in the connection dialog
k05j Nov 3, 2026
afd84c7
feat: several connections at once
k05j Nov 3, 2026
16b6cd7
feat: paging, sort, projection and errors in the query tab
k05j Nov 3, 2026
d5ff9e3
chore: remove leftovers and double loads
k05j Nov 3, 2026
ec659e9
docs: the working state in the feature files
k05j Nov 3, 2026
8fe2ca0
fix: findings of the review
k05j Nov 3, 2026
d0dddac
docs: commit of the review fixes in the connection manager
k05j Nov 3, 2026
7dc53cb
chore: graphify cache for the updated docs
k05j Nov 3, 2026
37f0aea
feat: the connection test gives up after 10 s and shows how long a st…
k05j Nov 3, 2026
ea8bb67
docs: the timeout and running time of the connection test
k05j Nov 3, 2026
b62c508
chore: graphify cache for the connection test docs
k05j Nov 3, 2026
3c38991
chore: import.meta.dirname in the vite config
k05j Nov 3, 2026
b69ba0b
chore: ci on linux, macos and windows
k05j Nov 3, 2026
9e1203a
docs: ci and the platform limits of the app shell
k05j Nov 3, 2026
e6f89ae
fix: ci keeps lf line endings on windows and every run on develop
k05j Nov 3, 2026
9e6cc5c
chore: integration tests in ci against a mongodb service
k05j Nov 3, 2026
5c54228
docs: the integration job in the decision log
k05j Nov 3, 2026
94dd189
fix: mongo 8.2 for the integration job
k05j Nov 3, 2026
afde8d6
chore: graphify cache for the ci and its docs
k05j Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .claude/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "web",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev"],
"port": 1420
}
]
}
126 changes: 126 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Builds and tests the app on every desktop platform it ships to. Only Linux is used day to day,
# so this is where macOS and Windows get compiled and tested at all.
name: ci

on:
push:
branches: [develop, main]
pull_request:
workflow_dispatch:

permissions:
contents: read

# a new push to a pull request makes its running check pointless; every commit on
# develop and main keeps its own run
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build:
name: build (${{ matrix.os }})
strategy:
# one platform failing shouldn't hide whether the others pass
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 45

steps:
# git on the Windows runner would check out CRLF line endings
- name: Keep LF line endings
if: runner.os == 'Windows'
run: git config --global core.autocrlf false

- uses: actions/checkout@v7

- name: Install the Tauri system packages
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev

# Vite 8 needs Node 20.19 or 22.12 and newer
- uses: actions/setup-node@v7
with:
node-version: 24

# the version comes from packageManager in package.json
- uses: pnpm/action-setup@v6
with:
cache: true

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy

- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri

- run: pnpm install --frozen-lockfile

- run: pnpm test:frontend --run

# also creates dist/, which the Tauri crate embeds
- run: pnpm build

- run: cargo test
working-directory: src-tauri

# the 2 module_inception warnings are known, so warnings don't fail the job
- run: cargo clippy --all-targets
working-directory: src-tauri

# the #[ignore] tests against a real MongoDB; service containers exist only on Linux runners
integration:
runs-on: ubuntu-latest
timeout-minutes: 30
services:
mongo:
# 8.0 and 8.3 refuse to start on Linux 6.19 and newer (SERVER-121912), 8.2 runs
image: mongo:8.2
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: ci-root-password
ports:
- 27017:27017
options: >-
--health-cmd "mongosh --quiet --eval 'db.runCommand({ ping: 1 }).ok'"
--health-interval 5s
--health-timeout 5s
--health-retries 20
env:
MONGODB_TEST_HOST: 127.0.0.1
MONGODB_TEST_PORT: 27017
MONGODB_TEST_USER: root
MONGODB_TEST_PASSWORD: ci-root-password

steps:
- uses: actions/checkout@v7

- name: Install the Tauri system packages
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri

# what the tests expect, see the integration module in src-tauri/src/drivers/mongo_official_driver.rs
- name: Create the test user and data
run: >-
docker exec ${{ job.services.mongo.id }} mongosh --quiet
-u root -p ci-root-password --authenticationDatabase admin --eval '
const shop = db.getSiblingDB("shop");
shop.createUser({ user: "reader", pwd: "readerpw", roles: [{ role: "read", db: "shop" }] });
shop.users.insertMany([{ name: "Ada", age: 36 }, { name: "Bob", age: 19 }]);'

# a dev build needs no dist/, so there is no frontend build here
- run: cargo test -- --ignored
working-directory: src-tauri
63 changes: 35 additions & 28 deletions CLAUDE.md

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,13 @@ Licensed under the [Apache-2.0 License](https://www.apache.org/licenses/LICENSE-

Currently supported features include:

- **Database Connections** — create, save, edit, and delete MongoDB connections
- **Credential Handling** — secure storage of credentials using the OS-native keyring
- **Extensible Architecture** — designed to easily add new features, such as data querying, visualization, and advanced operations
- **Database Connections** — create, save, edit, and delete MongoDB connections, by host and port (with TLS, replica set and timeout options) or by `mongodb://` / `mongodb+srv://` connection string
- **Credential Handling** — passwords in the OS-native keyring, never in the connection file
- **Connection Test** — a staged check of reachability, authentication and server version
- **Several Connections at Once** — browse databases and collections of every open connection side by side
- **Querying** — filter, sort and projection in MongoDB shell syntax with autocomplete, paging with the total count
- **Table and JSON Views** — a virtualized table with sortable, movable, resizable columns, or formatted JSON
- **Extensible Architecture** — designed to easily add new features, such as editing data, aggregation, and import/export

But there are many more to come!

Expand Down
13 changes: 6 additions & 7 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

How to install and run Monolens is in the root [README.md](../README.md). This folder explains how it is built and why it is built that way.

The documentation was written on 2026-11-03 from `develop` (`859c252`), the commit history, the pull requests and the issues on GitHub, when the project was picked up again after a break since March 2026.
The documentation was written on 2026-11-03 from `develop` (`859c252`), the commit history, the pull requests and the issues on GitHub, when the project was picked up again after a break since March 2026. The same day the working-state round ([plans/implemented/working-state.md](plans/implemented/working-state.md)) fixed the bugs found and completed querying; the files describe the state after it.

| Where | What you find there |
|---|---|
Expand All @@ -16,14 +16,14 @@ The documentation was written on 2026-11-03 from `develop` (`859c252`), the comm

| File | Feature |
|---|---|
| [connection-manager.md](features/connection-manager.md) | Saved connections: create, edit, delete, the start screen, the header dropdown, `connections.json` |
| [connection-manager.md](features/connection-manager.md) | Saved connections by host and port with options or by connection string: create, edit, delete, `connections.json` and its migration |
| [credential-storage.md](features/credential-storage.md) | Passwords in the OS keyring, loaded in Rust only when connecting |
| [connection-test.md](features/connection-test.md) | The staged connection test with live progress |
| [connect-and-explorer.md](features/connect-and-explorer.md) | Connecting, the driver pool, the sidebar with databases and collections |
| [connection-test.md](features/connection-test.md) | The staged connection test with live progress, skipped stages and the server version |
| [connect-and-explorer.md](features/connect-and-explorer.md) | Several connections at once, the driver pool, the sidebar with databases and collections |
| [background-tasks.md](features/background-tasks.md) | Cancellable tasks in Rust and `abortableInvoke` in the UI |
| [error-handling.md](features/error-handling.md) | `kind`, `message`, `user_message`, and the toasts |
| [tabs.md](features/tabs.md) | One tab per collection, tab history, kept-alive views |
| [query-tab.md](features/query-tab.md) | Shell-style filter with autocomplete, the query parser, find and count in Rust |
| [tabs.md](features/tabs.md) | One tab per collection and connection, tab history, one kept view per tab |
| [query-tab.md](features/query-tab.md) | Filter, sort and projection in shell syntax, paging with the total, the query parser, find and count in Rust |
| [document-views.md](features/document-views.md) | The virtualized table and the JSON view of the results |
| [shortcuts.md](features/shortcuts.md) | The command registry and the key bindings |
| [logging.md](features/logging.md) | One log for Rust and the web view |
Expand All @@ -39,7 +39,6 @@ Monolens reads. Writing data, indexes, aggregation, import, export and statistic
| Querying | #11 query builder, #41 queries by drag and drop, #13 export a query as code |
| Connections | #40 quick connections, #45 stage types with a guard for production, #28 in-memory MongoDB |
| Display | #39 table enhancements (nested objects, text size) |
| Bugs | #42 `Ctrl+Enter` runs in every tab |
| Other | #14 database statistics, #18 log file and rotation, #31 i18n |

The tab kinds `INDEXES`, `AGGREGATION`, `EXPORTER`, `IMPORTER` and `STATISTICS` already exist in the code as placeholders.
Expand Down
Loading
Loading