{"id":37228179,"url":"https://github.com/eja/tabulita","last_synced_at":"2026-01-15T03:26:26.772Z","repository":{"id":331849398,"uuid":"1131582605","full_name":"eja/tabulita","owner":"eja","description":"A lightweight, zero-dependency, web-based SQLite manager and JSON API server embedded in a single Go binary.","archived":false,"fork":false,"pushed_at":"2026-01-11T10:43:48.000Z","size":401,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T15:31:53.652Z","etag":null,"topics":["admin","api","gui","json","sqlite","web"],"latest_commit_sha":null,"homepage":"https://eja.it","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eja.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-10T09:51:40.000Z","updated_at":"2026-01-11T10:43:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eja/tabulita","commit_stats":null,"previous_names":["eja/tabulita"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/eja/tabulita","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eja%2Ftabulita","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eja%2Ftabulita/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eja%2Ftabulita/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eja%2Ftabulita/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eja","download_url":"https://codeload.github.com/eja/tabulita/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eja%2Ftabulita/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","api","gui","json","sqlite","web"],"created_at":"2026-01-15T03:26:26.191Z","updated_at":"2026-01-15T03:26:26.766Z","avatar_url":"https://github.com/eja.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tabulita\n\nA lightweight, self-hosted web interface for managing SQLite databases. Written in Go, it provides a robust, CGO-free solution for inspecting and modifying SQLite files through a modern, responsive web browser interface.\n\nDesigned for simplicity and portability, Tabulita serves as both a graphical user interface and a JSON API endpoint, making it an ideal tool for embedded systems, rapid prototyping, or lightweight database administration.\n\n## Features\n\n*   **Database Management:** Create and drop tables; add columns dynamically.\n*   **Data Manipulation:** Full CRUD (Create, Read, Update, Delete) support for table rows.\n*   **Search:** Integrated search functionality across all columns in a table.\n*   **Security:** Optional HTTP Basic Authentication.\n*   **Responsive UI:** A clean interface built with Beer CSS and Material Design icons.\n*   **Zero Dependencies:** Built with `modernc.org/sqlite`, requiring no CGO or external C libraries. It compiles to a single static binary.\n\n## Installation\n\n### Building from Source\n\nTo build the application, clone the repository and run the provided Makefile:\n\n```bash\ngit clone https://github.com/eja/tabulita.git\ncd tabulita\nmake tabulita\n```\n\nThis will generate the binary in the `build/` directory. For a statically linked binary suitable for minimal environments, run:\n\n```bash\nmake static\n```\n\n## Usage\n\nStart the server by pointing it to the directory containing your SQLite files:\n\n```bash\n./build/tabulita -file-path /path/to/your/databases\n```\n\n### Command Line Arguments\n\n| Flag | Default | Description |\n| :--- | :--- | :--- |\n| `-file-path` | `.` | Path to the SQLite database or a directory of db files |\n| `-web-host` | `localhost` | The interface to bind the web server to. |\n| `-web-port` | `35248` | The port to serve the application on. |\n| `-web-path` | `/tabulita/` | The HTTP path prefix for the interface. |\n| `-web-auth` | *None* | Basic Auth credentials in `user:password` or Base64 format. |\n| `-log` | `false` | Enable verbose logging. |\n| `-log-file` | *None* | Path to a file for log output. |\n\nOnce running, access the interface at `http://localhost:35248/tabulita/`.\n\n## API Documentation\n\nTabulita exposes a single endpoint (defaulting to `/tabulita/`) that accepts `POST` requests containing a JSON payload. The server determines the operation based on the `action` field.\n\n### General Response Structure\n\nAll API responses follow this format:\n\n```json\n{\n  \"success\": true,\n  \"data\": { ... },\n  \"error\": \"Error message if success is false\"\n}\n```\n\n#### Action: `list-rows`\n\nRetrieves rows from a specific table.\n\n**Request:**\n\n```json\n{\n  \"action\": \"list-rows\",\n  \"table\": \"users\",\n  \"start\": 0,\n  \"stop\": 19,\n  \"query\": \"search_term_optional\"\n}\n```\n\n*   **start**: The zero-based index of the first row to retrieve.\n*   **stop**: The zero-based index of the last row to retrieve.\n\n**Response Data:**\n\n```json\n{\n  \"tableName\": \"users\",\n  \"columns\": [{\"name\": \"id\", \"type\": \"INTEGER\"}, ...],\n  \"rows\": [\n    { \"id\": \"1\", \"values\": [\"1\", \"John Doe\", \"admin\"] }\n  ],\n  \"start\": 0,\n  \"stop\": 19,\n  \"totalRows\": 154,\n  \"totalPages\": 8\n}\n```\n\n### Table Operations\n\n#### Action: `list-tables`\nLists all non-system tables in the database.\n```json\n{ \"action\": \"list-tables\" }\n```\n\n#### Action: `create-table`\nCreates a new table with a primary key column.\n```json\n{\n  \"action\": \"create-table\",\n  \"table\": \"new_table_name\",\n  \"col_name\": \"id\",\n  \"col_type\": \"INTEGER PRIMARY KEY AUTOINCREMENT\"\n}\n```\n\n#### Action: `add-column`\nAdds a new column to an existing table.\n```json\n{\n  \"action\": \"add-column\",\n  \"table\": \"users\",\n  \"col_name\": \"email\",\n  \"col_type\": \"TEXT\",\n  \"is_not_null\": false\n}\n```\n\n### Row Operations\n\n#### Action: `add-row`\n```json\n{\n  \"action\": \"add-row\",\n  \"table\": \"users\",\n  \"data\": {\n    \"username\": \"jdoe\",\n    \"email\": \"jdoe@example.com\"\n  }\n}\n```\n\n#### Action: `edit-row`\n```json\n{\n  \"action\": \"edit-row\",\n  \"table\": \"users\",\n  \"rowid\": \"1\",\n  \"data\": {\n    \"email\": \"new_email@example.com\"\n  }\n}\n```\n\n#### Action: `delete-row`\n```json\n{\n  \"action\": \"delete-row\",\n  \"table\": \"users\",\n  \"rowid\": \"1\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feja%2Ftabulita","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feja%2Ftabulita","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feja%2Ftabulita/lists"}