We're excited to announce that Scriptura is now part of the Nano Collective β a community of lightweight, privacy-focused, and open-source tools built without trackers, bloat, or paid subscriptions.
This partnership reflects our shared vision of creating software that respects user privacy, stays free from corporate influence, and remains accessible to everyone.
THANKS NC for accepting Scriptura and support it's further development.
scriptura- a proposed AI powered IDE that is private, no tracker, no big companies, and no paid subscriptions, actively developing toward v1
A hybrid Qt/Rust text editor with project file browsing β Qt for the UI, Rust for safe backend services.
Note: This project is at an early development stage which expects bugs and occasional broken features.
Scriptura uses a dual-language architecture:
| Layer | Language | Technology | Responsibility |
|---|---|---|---|
| UI Layer | C++ | Qt 6 Widgets | All visual components (editor, panels, menus, dialogs) |
| Adapter Layer | C++ | Qt + C FFI | Thin wrappers bridging Qt signals/slots to Rust callbacks |
| Backend Layer | Rust | Pure Rust (no Qt) | LSP/DAP protocol, event bus, plugin manager, task runner, updater, workspace, config, permissions |
The backend services are compiled into a static library (libscriptura_backend.a) via Cargo and linked into the C++ executable. Cross-language communication uses C FFI (extern "C") with JSON strings for complex data. All state management and protocol handling runs in safe Rust.
Editor core (src/codeeditor.*, src/mainwindow_tabs.cpp)
- Project workflow: open project / file-tree (
QFileSystemModel) / expand-collapse / tabbed editing / save / save-as / recent projects-files / auto-save - Syntax highlighting (
CodeHighlighter+languageregistry.*), line numbers, current-line, indent guides,LargeFileHandler,EncodingManager(detect / BOM / LF-CRLF), smart-indent + bracket auto-close - Per-tab
Minimap+Breadcrumb+BreadcrumbBarWidget+CssBreadcrumbParser(html / css / scss / xml / svg) FoldManager,BracketColorizer,MultiCursorManager(Ctrl+D, above / below),ColumnSelection,SnippetManager+ editor dialog,BookmarkManager+BookmarkPanelWidget, inlay-hints, ghost-text infra,CodeLensManager,RefactoringManager,CodeActionController
Search / navigate
FindReplaceBar,ProjectSearchPanel(bottom panel),UniversalSearchPopup, command palette,ShortcutEditor
LSP (src/mainwindow_lsp.cpp, rust_backend/src/lsp/)
start / stop / initialize / didOpen / didChange / didClose,completion / definition / declaration / implementation / typeDefinition / hover / references / rename / codeAction / documentSymbol / workspaceSymbol / formatting / signatureHelp, diagnostics render + jump-to-error
DAP / Run (src/mainwindow_debug.cpp, services/dap/, rust_backend/src/dap/)
RunDialog,.vscode/launch.jsonload / save,startDebug / stopDebug, breakpoint gutter,continue / next / stepIn / stepOut / pause, stack / scopes / variables / evaluate, run-without-debug viaQProcess
Tasks / Git (basic)
- Rust
task_runner.rs+TaskRunnerUIbottom panel +Ctrl+Shift+B, detectspackage.json/Makefile/Cargotasks - Git commit / push / pull / fetch via
QProcess,GitPlugin(com.scriptura.git),GitRebaseWidgetbottom panel,GitBlamegutter + Rustblame_engine/diff_engine, status-bar branch
Rust backend (src/rust_backend/src/ffi.rs ~180 pub extern "C")
eventbus,service_locator,workspace(folders / settings / recent),updater+version_fetcher(Stable / Pre-release check),config_validator,archive_extractor,permission,plugin/manager+crash_handler+dependency_resolver,registry,language_registry+language_server_manager,session_engine(restore + hot-exit),filewatcher,diff / encoding / blame / emmet / test / ui_actions,framer
Plugins / themes / shell
ScripturaPluginSDK (sdk/,include/scriptura/plugininterface.h),PluginManagerDialog,PluginContext+ Editor / Ui / Notification / Theme APIs,ApplicationManager+FirstRunInstallDialogPluginMarketplaceWidgetbottom panel, registry-URL setting,ThemeManager(8 families Γ Light / Dark) +ThemeIcons,CustomTitleBar,WindowAnimator,WelcomeMenuScreen,StatusBarWidget,NotificationCenter,ZenMode,SplitManager- Tests:
cargo test+ ~36tests/test_*.cpp(ctest), CIbuild.yml/test.ymlon Linux / macOS / Windows
plugins/aiinlinecompletion.*: OpenAI-compatible + Ollamachat/generate+ debounce +CodeEditor::setGhostText, hastests/test_aiinlinecompletion.*βsetSettings / setEditorcommented out inmainwindow.cpp:909-927panels/testpanel.*+widgets/testrunner.*+ Rusttest_engine.rs: pytest / jest / cargo / go / ctest detect + parse βTestPanelnever added tobottomPanelStackpanels/markdownpreview.*,dataformatter.*,regextester.*,globalreplacepreview.*,gitbranchwidget.*,gitdiffwidget.*,gitmergewidget.*: complete classes, nevernew'd inMainWindowβ dormantplugins/httpclientpanel.*,plugins/sqliteviewer.*: complete + tested, only reachable as installableApplicationManagerApps, not built-in panelsrust_backend/src/plugin_updater.rs:30:check()isTODO: Query the plugin registryno-op (callbacks wired, never fire)rust_backend/src/emmet_engine.rs+rust_emmet_expand: FFI exists, no editor shortcut wiredconfig_validator.rs: only JSON well-formedness, no schema enforcementsrc/mainwindow_ui.cpp:Placeholder - setup methods will be extracted
- Inspector drawer (
mainwindow.cpp:508-524): sparkle placeholder +AI Assistant is in development+Coming soon β intelligent code assistance, refactoring suggestions TODO: nanocoder assistant in here,TODO: replace with nanocoder- inline completion,TODO: nanocoder settings UI (AI & Completions section goes here)(mainwindow.cpp:514,909,mainwindow_theme.cpp:294)
nanocoderAI assistant (inspector) + inline completion +AI & Completionssettings- Wire up dormant panels: Test panel, Markdown preview, DataFormatter, RegexTester, Git Branch / Diff / Merge, GlobalReplacePreview
- Graduate
HTTP / SQLiteApps vs built-ins decision - Real plugin / theme registry (current default
https://example.com/plugin-registry.json), implementPluginUpdater::check() - Schema-aware
ConfigValidator, Emmet keybinding,TestPanel::jumpToTestfile / line extraction (testpanel.cpp:208 TODO) - Prod hardening toward
v1: macOS sign / notarize,pluginhostsandbox stays removed (CMakeLists.txt:260)
- Qt 6 (with Widgets, Network, Sql, and LinguistTools modules)
- CMake 3.16+
- C++17 compiler (GCC, Clang, MSVC)
- Rust toolchain (for building the backend) β Install via rustup:
curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh./run.sh
./run.shbuilds the Rust backend and the Qt UI incrementally, then launches the app.
cmake -B cmake-build-Release -S . -DCMAKE_BUILD_TYPE=Release
cmake --build cmake-build-Release -j$(nproc)# Build Rust backend first
cd src/rust_backend && cargo build --release && cd ../..
# Build C++ project
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)./run.shOr directly:
./cmake-build-Debug/scripturaPrebuilt binaries are produced by CI (.github/workflows/build.yml / deploy.yml).
The macOS build (scriptura.app) is unsigned and not notarized (no Apple Developer account is configured in CI). macOS Gatekeeper will therefore block the first launch with "βScripturaβ canβt be opened because it is from an unidentified developer" or "damaged and canβt be opened".
To bypass the check on macOS:
Option 1 β Right-click Open (easiest)
- In Finder, locate
scriptura.app(do NOT use Launchpad). - Control-click (or right-click) the app and choose Open.
- In the dialog, click Open again. The app is now whitelisted for future launches.
Option 2 β Terminal (removes the quarantine flag)
xattr -cr /path/to/scriptura.appRun this once after downloading/extracting the app, then open it normally.
Option 3 β Allow apps from anywhere (macOS Sequoia+ may need this)
sudo spctl --master-disable # allows apps from "Anywhere" in System Settings > Privacy & Security
# ... open the app, then optionally re-enable:
sudo spctl --master-enableIf macOS still reports the app as damaged, Option 2 (
xattr -cr) is the reliable fix β it clears thecom.apple.quarantineattribute added when the archive was downloaded.
scriptura/
βββ src/
β βββ rust_backend/ # Rust backend library (Cargo project)
β β βββ Cargo.toml
β β βββ src/
β β βββ lib.rs # Module tree & helpers
β β βββ ffi.rs # All C FFI exports (~180 functions)
β β βββ eventbus.rs # Pub/sub event system
β β βββ lsp/ # LSP protocol client
β β βββ dap/ # DAP protocol client
β β βββ plugin/ # Plugin manager & crash handler
β β βββ service_locator.rs, task_runner.rs, updater.rs, ...
β β βββ workspace.rs, permission.rs, language_registry.rs, ...
β βββ rust_adapter.cpp/h # C++ wrappers bridging Qt β Rust FFI
β βββ *.cpp, *.h, *.ui # Qt UI layer (code editor, panels, etc.)
β βββ main.cpp # Application entry point
β βββ ...
βββ include/
β βββ scriptura/
β βββ rust_backend.h # C FFI header for all backend services
β βββ plugininterface.h # Plugin SDK interface
βββ docs/ # Documentation
βββ .github/workflows/ # CI/CD workflows
βββ CMakeLists.txt # CMake build system
