{"id":13617992,"url":"https://github.com/arturo-lang/grafito","last_synced_at":"2025-09-09T12:33:49.547Z","repository":{"id":41117096,"uuid":"326658628","full_name":"arturo-lang/grafito","owner":"arturo-lang","description":"Portable, Serverless \u0026 Lightweight SQLite-based Graph Database in Arturo","archived":false,"fork":false,"pushed_at":"2024-08-30T14:37:21.000Z","size":5662,"stargazers_count":174,"open_issues_count":13,"forks_count":11,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-04-11T02:40:39.865Z","etag":null,"topics":["arturo","cross-platform","database","database-engine","graph","graph-database","graphdb","portable","portable-database","query-language","serverless","sqlite","sqlite3"],"latest_commit_sha":null,"homepage":"","language":"Less","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arturo-lang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["drkameleon"]}},"created_at":"2021-01-04T11:14:46.000Z","updated_at":"2025-03-19T16:50:54.000Z","dependencies_parsed_at":"2023-11-24T22:32:36.404Z","dependency_job_id":"651c1193-dee0-4c8e-b525-96cf8c45fed4","html_url":"https://github.com/arturo-lang/grafito","commit_stats":{"total_commits":1051,"total_committers":4,"mean_commits":262.75,"dds":0.05994291151284492,"last_synced_commit":"f27c7f244c788369449b2081df8dd47643b36104"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arturo-lang%2Fgrafito","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arturo-lang%2Fgrafito/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arturo-lang%2Fgrafito/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arturo-lang%2Fgrafito/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arturo-lang","download_url":"https://codeload.github.com/arturo-lang/grafito/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248644321,"owners_count":21138577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["arturo","cross-platform","database","database-engine","graph","graph-database","graphdb","portable","portable-database","query-language","serverless","sqlite","sqlite3"],"created_at":"2024-08-01T20:01:52.329Z","updated_at":"2025-04-15T04:34:18.177Z","avatar_url":"https://github.com/arturo-lang.png","language":"Less","funding_links":["https://github.com/sponsors/drkameleon"],"categories":["Graph databases","Less","Libraries/Modules"],"sub_categories":["Extensions"],"readme":"\n\u003cp align=\"center\"\u003e\u003cimg align=\"center\" width=\"350\" src=\"https://raw.githubusercontent.com/arturo-lang/grafito/master/logo.png\"/\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cb\u003ePortable, Serverless \u0026 Lightweight\u003cbr\u003eSQLite-based Graph Database\u003c/b\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/arturo-lang/grafito?style=for-the-badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/language-Arturo-orange.svg?style=for-the-badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/arturo-lang/grafito/test.yml?branch=main\u0026style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"90%\" align=\"center\" src=\"https://raw.githubusercontent.com/arturo-lang/grafito/master/ui-screenshot.png\"/\u003e\u003c/p\u003e\n\n--- \n \n\u003c!--ts--\u003e\n\n* [At A Glance](#at-a-glance)\n* [Try Grafito](#try-grafito)\n    * [Docker](#docker)\n    * [Installation](#installation)\n        * [As a Library](#as-a-library)\n        * [As a Standalone tool](#as-a-standalone-tool)\n* [How To](#how-to)\n    * [Create a simple Node](#create-a-simple-node)\n    * [Create Relationships between Nodes](#create-relationships-between-nodes)\n    * [Search Nodes](#search-nodes)\n    * [Delete an existing Node](#delete-an-existing-node)\n    * [Delete an existing Relationship](#delete-an-existing-relationship)\n    * [Preview a Set of Nodes](#preview-a-set-of-nodes)\n    * [More complex queries](#more-complex-queries)\n    \t* [Reverse edge queries](#reverse-edge-queries) \n    \t* [Using filters](#using-filters)\n    * [Not just a query language!](#not-just-a-query-language)\n* [Command Reference](#command-reference)\n    * [put](#put)\n    * [unput](#unput)\n    * [link](#link)\n    * [unlink](#unlink)\n    * [what](#what)\n    * [fetch](#fetch)\n    * [preview](#preview)\n* [Filter Reference](#filter-reference)\n    * [contains](#contains)\n    * [prefix](#prefix)\n    * [suffix](#suffix)\n    * [over](#over)\n    * [under](#under)\n    * [overOrEqual](#greaterOrEqual)\n    * [underOrEqual](#underOrEqual)\n    * [in](#in)\n    * [not](#not)\n* [Community](#community)\n* [License](#license)   \n\n\u003c!--te--\u003e\n \n---\n\n## At A Glance\n\nI know you really don't care about long explanations and want to have a look at working code right away, so... here you are (this is the code that creates the graph in the image above):\n\n```red\n;---------------------------------------------\n; Import Grafito\n; and ... let's rock'n'roll! :)\n;---------------------------------------------\ndo.import {grafito.art}\n\ndo [\n    ;---------------------------------------------\n    ; Set up a new graph environment\n    ; with a local database named \"sample11\"\n    ;---------------------------------------------\n    graph .helpers: [person movie country book]\n          .create\n          .palette: 'default\n          \"sample11\" \n    [\n        unless dbExists? [\n            ;---------------------------------------------\n            ; Populate the database\n            ;---------------------------------------------\n\n            uk: country.new [name: \"United Kingdom\"]\n            au: country.new [name: \"Australia\"]\n            us: country.new [name: \"United States\"] \n            ca: country.new [name: \"Canada\"]\n            fr: country.new [name: \"France\"]\n            de: country.new [name: \"Germany\"]\n            se: country.new [name: \"Sweden\"]\n            es: country.new [name: \"Spain\"]\n            pl: country.new [name: \"Poland\"]\n\n            nolan:      person.new [name: \"Christopher Nolan\" birthday: 1970 sex: \"m\"]\n            pearce:     person.new [name: \"Guy Pearce\" birthday: 1967 sex: \"m\"]\n            hanson:     person.new [name: \"Curtis Hanson\" birthday: 1945 sex: \"m\"]\n            spacey:     person.new [name: \"Kevin Spacey\" birthday: 1959 sex: \"m\"]\n            dicaprio:   person.new [name: \"Leonardo DiCaprio\" birthday: 1974 sex: \"m\"]\n            hardy:      person.new [name: \"Tom Hardy\" birthday: 1977 sex: \"m\"]\n            cotillard:  person.new [name: \"Marion Cotillard\" birthday: 1975 sex: \"f\"]\n            moss:       person.new [name: \"Carrie-Ann Moss\" birthday: 1967 sex: \"f\"]\n            kidman:     person.new [name: \"Nicole Kidman\" birthday: 1967 sex: \"f\"]\n            cruise:     person.new [name: \"Tom Cruise\" birthday: 1962 sex: \"m\"]\n            kubrick:    person.new [name: \"Stanley Kubrick\" birthday: 1928 died: 1999 sex: \"m\" alive: false]\n            burton:     person.new [name: \"Tim Burton\" birthday: 1958 sex: \"m\"]\n            depp:       person.new [name: \"Johny Depp\" birthday: 1965 sex: \"m\"]\n            hallstrom:  person.new [name: \"Lasse Hallström\" birthday: 1946 sex: \"m\"]\n            scorsese:   person.new [name: \"Martin Scorsese\" birthday: 1942 sex: \"m\"]\n            sydow:      person.new [name: \"Max von Sydow\" birthday: 1929 died: 2020 sex: \"m\" alive: false]\n            binoche:    person.new [name: \"Juliette Binoche\" birthday: 1964 sex: \"f\"]\n            dench:      person.new [name: \"Judi Dench\" birthday: 1934 sex: \"f\"]\n            eastwood:   person.new [name: \"Clint Eastwood\" birthday: 1930 sex: \"m\"]\n            polanski:   person.new [name: \"Roman Polanski\" birthday: 1933 sex: \"m\"]\n            olin:       person.new [name: \"Lena Olin\" birthday: 1955 sex: \"f\"]\n            zimmer:     person.new [name: \"Hans Zimmer\" birthday: 1957 sex: \"m\"]\n            pook:       person.new [name: \"Jocelyn Pook\" birthday: 1960 sex: \"f\"]\n            lehane:     person.new [name: \"Dennis Lehane\" birthday: 1965 sex: \"m\"]\n            penn:       person.new [name: \"Sean Penn\" birthday: 1960 sex: \"m\"]\n            malick:     person.new [name: \"Terrence Malick\" birthday: 1943 sex: \"m\"]\n            brody:      person.new [name: \"Adrien Brody\" birthday: 1973 sex: \"m\"]\n            wach1:      person.new [name: \"Lana Wachowski\" birthday: 1965 sex: \"f\"]\n            wach2:      person.new [name: \"Lilly Wachowski\" birthday: 1967 sex: \"f\"]\n\n            memento:        movie.new [title: \"Memento\" year: 2000]\n            inception:      movie.new [title: \"Inception\" year: 2010]\n            laconfidential: movie.new [title: \"L.A. Confidential\" year: 1997]\n            matrix:         movie.new [title: \"The Matrix\" year: 1999]\n            eyes:           movie.new [title: \"Eyes Wide Shut\" year: 1999]\n            bigfish:        movie.new [title: \"Big Fish\" year: 2003]\n            sleepyhollow:   movie.new [title: \"Sleepy Hollow\" year: 1999]\n            chocolat:       movie.new [title: \"Chocolat\" year: 2000]\n            jedgar:         movie.new [title: \"J. Edgar\" year: 2011]\n            ninthgate:      movie.new [title: \"The Ninth Gate\" year: 1999]\n            shutter:        movie.new [title: \"Shutter Island\" year: 2010]\n            mystic:         movie.new [title: \"Mystic River\" year: 2003]\n            redline:        movie.new [title: \"Thin Red Line\" year: 1998]\n            pianist:        movie.new [title: \"The Pianist\" year: 2002]\n\n            mysticB:        book.new [title: \"Mystic River\" year: 2001 language: \"en\"]\n\n            ;---------------------------------------------\n            ; Define the relationships\n            ; between our nodes\n            ;---------------------------------------------\n\n            [nolan hardy dench pook] ~\u003e 'isFrom uk\n            [pearce kidman] ~\u003e 'isFrom au\n            [malick brody hanson spacey dicaprio wach1 wach2 cruise kubrick burton depp eastwood scorsese lehane penn] ~\u003e 'isFrom us\n            moss ~\u003e 'isFrom ca\n            [cotillard binoche] ~\u003e 'isFrom fr\n            polanski ~\u003e 'isFrom [fr pl]\n            [hallstrom olin sydow] ~\u003e 'isFrom se\n            zimmer ~\u003e 'isFrom de\n\n            nolan ~\u003e 'directed [memento inception]\n            hanson ~\u003e 'directed laconfidential\n            [wach1 wach2] ~\u003e 'directed matrix\n            kubrick ~\u003e 'directed eyes\n            burton ~\u003e 'directed [bigfish sleepyhollow]\n            hallstrom ~\u003e 'directed chocolat\n            eastwood ~\u003e 'directed [jedgar mystic]\n            polanski ~\u003e 'directed [pianist ninthgate]\n            scorsese ~\u003e 'directed shutter\n            malick ~\u003e 'directed [pianist redline]\n\n            pearce ~\u003e 'actedIn [memento laconfidential]\n            spacey ~\u003e 'actedIn laconfidential\n            [dicaprio hardy cotillard] ~\u003e 'actedIn inception\n            [dicaprio sydow] ~\u003e 'actedIn shutter\n            cotillard ~\u003e 'actedIn bigfish\n            moss ~\u003e 'actedIn [memento matrix chocolat]\n            [cruise kidman] ~\u003e 'actedIn eyes\n            depp ~\u003e 'actedIn [chocolat sleepyhollow]\n            [binoche dench olin] ~\u003e 'actedIn chocolat\n            [dicaprio dench] ~\u003e 'actedIn jedgar\n            [depp olin] ~\u003e 'actedIn ninthgate\n            penn ~\u003e 'actedIn [mystic redline]\n            brody ~\u003e 'actedIn [redline pianist]\n\n            zimmer ~\u003e 'composed inception\n            pook ~\u003e 'composed eyes\n\n            nolan ~\u003e 'written inception\n\n            lehane ~\u003e 'written mysticB\n            mystic ~\u003e 'basedOn mysticB\n\n            [redline bigfish memento laconfidential jedgar shutter mystic] ~\u003e 'origin us\n            matrix ~\u003e 'origin [us au]\n            [inception eyes chocolat] ~\u003e 'origin [uk us]\n            sleepyhollow ~\u003e 'origin [us de]\n            ninthgate ~\u003e 'origin [us fr es]\n            pianist ~\u003e 'origin [uk fr de pl]\n\n            wach1 ~\u003e 'sibling wach2\n            cruise ~\u003e 'married kidman\n        ]\n\n        ;---------------------------------------------\n        ; Fetch every \"person\" \u0026\n        ; open the Desktop app for visualization\n        ;---------------------------------------------\n        \n        preview fetch 'person ø\n    ]\n]\n```\n\n## Try Grafito!\n\n### Docker\n\nThe easiest way to try Grafito is using Docker (although, without support for the Desktop app - yet)\n\n```\ndocker run -it arturolang/grafito\n```\n\nor, if you want to run a specific script:\n\n```\ndocker run -it -v $(pwd):/home arturolang/grafito \u003cyourscript\u003e\n```\n\n### Installation\n\nTo install local, first you have to have installed the latest version of [Arturo](https://github.com/arturo-lang/arturo).\n\nThen, just clone this repo and simply go to the folder via your terminal.\n\n\n#### As a Library\n\nAfter having installed the latest version of Arturo, you can use Grafito from any Arturo script as a library.\n\nFor example, here's how to run the above example:\n\n```\narturo examples/sample11.art\n```\n\n#### As a Standalone tool\n\nOf course, you can also run Grafito as a tool on it own:\n\n```\n./grafito.art \u003cdatabase\u003e\n```\n\n(If you pass a name, it will use it as your database file. If not, the database will be in-memory)\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"100%\" align=\"center\" src=\"https://raw.githubusercontent.com/arturo-lang/grafito/master/console.png\"/\u003e\u003c/p\u003e\n\nAnd you can see your lightweight graph engine in action!\n\n## How To\n\n### Create a simple Node\n\n```red\ngraph.create \"mygraph\" [\n\tput'person [name: \"John\" sex: 'm]\n]\n```\n\nThe exact same thing using node helpers:\n\n```red\ngraph.create \"mygraph\"\n     .helpers: [person]\n[\n\tperson.new [name: \"John\", sex: 'm]\n]\n```\n\n### Create Relationships between Nodes\n\n```red\ngraph.create \"mygraph\" [\n\tjohn: put 'person [name: \"John\" sex: 'm]\n\tjoan: put 'person [name: \"Joan\" sex: 'f]\n\n\tlink john 'marriedTo joan\n]\n```\n\nThe exact same thing using node helpers and some syntactic sugar:\n\n```red\ngraph.create \"mygraph\"\n     .helpers: [person]\n[\n\tjohn: person.new [name: \"John\", sex: 'm]\n\tjoan: person.new [name: \"Joan\", sex: 'f]\n\n\tjohn \u003c~\u003e 'marriedTo joan\n]\n```\n\n### Search Nodes\n\n```red\ngraph \"mygraph\" [\n\tinspect fetch 'person [name: \"Joan\"]\n]\n```\nThe exact same thing using node helpers:\n\n```red\ngraph \"mygraph\"\n     .helpers: [person]\n[\n\tinspect person [name: \"Joan\"]\n]\n```\n\n### Delete an existing Node\n\n```red\ngraph \"mygraph\" [\n\tunput fetch 'person [name: \"John\"]\n]\n```\n\n### Delete an existing Relationship\n\n```red\ngraph \"mygraph\" [\n\tunlink fetch 'person [name: \"John\"] 'marriedTo \n           fetch 'person [name: \"Joan\"]\n]\n```\n\n### Preview a Set of Nodes\n\n```red\ngraph \"mygraph\" [\n\tpreview fetch 'person ø\n]\n```\n\n(If you run the `sample4` in the *examples* folder, you'll be a minimal movie database. Running the command `preview` will open up the Desktop app with the image you see above ;-))\n\n### More complex queries\n\n```red\ngraph \"mygraph\" [\n\tinspect fetch'person [\n\t\tsex: \"m\"\n\t\tmarriedTo: fetch 'person [name: \"Joan\"]\n\t]\n]\n```\n\nThe exact same thing using node helpers:\n\n```red\ngraph \"mygraph\"\n     .helpers: [person]\n[\n\tinspect person [\n\t\tsex: \"m\"\n\t\tmarriedTo: person [name: \"Joan\"]\n\t]\n]\n```\n\n#### Reverse edge queries\n\n```red\n; using our sample11.art graph\n\nmovie [\n\tdirected: \u003c| person \"Clint Eastwood\"\n]\n```\n\n#### Using filters\n\n```red\ngraph \"mygraph\" [\n\tfetch 'person [\n\t\tsurname:\"Doe\"\n\t\tage: -\u003e over: 30\n\t]\n]\n```\n\n### Not just a query language!\n\nNow, let's be reminded that although Grafito may present itself as an easy-to-use\nGraph Query Language, actually it's a \"shell\" on top of Arturo. That is: you can use anything you would normally use in a full-blown programming language, *along with* the extra layer that is Grafito. Awesome, right?\n\nThe above is a - very simple - example, but gives you definitely a rough idea (and no, [`union`](https://arturo-lang.io/documentation/library/sets/union/) has nothing to do with Grafito... it's just a normal command from Arturo's standard library)\n\n```red\nunion \n    person [\n        sex: \"m\"\n        birthday: -\u003e under: 1960\n    ]\n    person [\n        sex: \"f\n        isFrom: country \"France\"\n    ]\n```\n\n(totally random example: Find all the men that were born before 1960 + all the women from... France!)\n\n## Command Reference\n\nAll of the following commands must run within a `graph` environment. In order to set it up, use:\n\n```red\ngraph \u003cdatabase\u003e [\n\t;; your code goes here\n]\n```\n\u003e ⚠️  The `graph` command is not needed when you run Grafito as a tool, since the \"environment\" is already set up for you. ;-) \n\nIf you pass `null` (or `ø`) then the database will be *in-memory*. If you want to save to a file on disk, then pass a string with the desired database name. If the database already exists, it will be re-opened. If not, it will be created from scratch.\n\n\u003e 💡  You may force the database to be re-created from scratch, regardless of whether it exists, by setting the `.create` attribute. E.g.\n\u003e ```\n\u003e graph.create \"mygraph\" [\n\u003e \t;; your code goes here\n\u003e ]\n\u003e ```\n\n### put\n\n#### Description\n\nInsert new node(s) to graph with given name and attributes.\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003eput\u003c/b\u003e \u003cins\u003ename\u003c/ins\u003e \u003ci\u003e:literal\u003c/i\u003e, \u003ci\u003e:string\u003c/i\u003e\n    \u003cins\u003eattributes\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e, \u003ci\u003e:block\u003c/i\u003e\n\u003c/pre\u003e\n\n#### Returns\n\n- *:dictionary* (node)\n- *:block* (of nodes)\n\n#### Examples\n\n```red\nput 'person [name: \"John\" surname: \"Doe\" birthday: 1986]\n```\n\n### unput\n\n#### Description\n\nRemove given node(s) from graph.\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003eunput\u003c/b\u003e \u003cins\u003enode\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e, \u003ci\u003e:block\u003c/i\u003e\n\u003c/pre\u003e\n\n#### Examples\n\n```red\nx: put 'person [name: \"John\" surname: \"Doe\" birthday: 1986]\nunput x\n```\n\n### link\n\n#### Description\n\nCreate a connection from source to target node with given name.\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003elink\u003c/b\u003e \u003cins\u003esource\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e (node), \u003ci\u003e:block\u003c/i\u003e (of nodes)\n     \u003cins\u003ename\u003c/ins\u003e \u003ci\u003e:literal\u003c/i\u003e, \u003ci\u003e:string\u003c/i\u003e\n     \u003cins\u003etarget\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e (node), \u003ci\u003e:block\u003c/i\u003e (of nodes)\n\u003c/pre\u003e\n\n#### Returns\n\n- *:dictionary* (edge)\n\n#### Examples\n\n```red\nlink put 'person [name: \"John\" surname: \"Doe\" birthday: 1986] 'marriedTo \n     put 'person [name: \"Mary\" surname: \"Doe\" birthday: 1986]\n```\n\n### unlink\n\n#### Description\n\nRemove connection from source to target node with given name\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003eunlink\u003c/b\u003e \u003cins\u003esource\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e (node), \u003ci\u003e:block\u003c/i\u003e (of nodes)\n       \u003cins\u003ename\u003c/ins\u003e \u003ci\u003e:literal\u003c/i\u003e, \u003ci\u003e:string\u003c/i\u003e\n       \u003cins\u003etarget\u003c/ins\u003e \u003ci\u003e:dictionary\u003c/i\u003e (node), \u003ci\u003e:block\u003c/i\u003e (of nodes)\n\u003c/pre\u003e\n\n#### Examples\n\n```red\nx: put 'person [name: \"John\" surname: \"Doe\" birthday: 1986]\ny: put 'person [name: \"Mary\" surname: \"Doe\" birthday: 1986]\n\nlink 'marriedTo x y\nunlink 'marriedTo x y\n```\n\n### fetch\n\n#### Description\n\nRetrieves nodes with name that match all given attributes.\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003efetch\u003c/b\u003e \u003cins\u003ename\u003c/ins\u003e \u003ci\u003e:literal\u003c/i\u003e, \u003ci\u003e:string\u003c/i\u003e\n      \u003cins\u003eproperties\u003c/ins\u003e \u003ci\u003e:block\u003c/i\u003e \u003ci\u003e:dictionary\u003c/i\u003e \u003ci\u003e:null\u003c/i\u003e\n\u003c/pre\u003e\n\n#### Returns\n\n- *:block* of *:dictionary* (node)\n\n#### Examples\n\n```red\nprint fetch 'person [surname: \"Doe\"]\nprint fetch 'person [\n\tsurname: \"Doe\"\n\tmarriedTo: fetch'person [name: \"Mary\"]\n]\n```\n\n### preview\n\n#### Description\n\nPreview given array of nodes in Desktop app.\n\n#### Usage\n\n\u003cpre\u003e\n\u003cb\u003epreview\u003c/b\u003e \u003cins\u003enodes\u003c/ins\u003e \u003ci\u003e:block\u003c/i\u003e\n\u003c/pre\u003e\n\n#### Examples\n\n```red\npreview fetch 'person [surname: \"Doe\"]\n```\n\n## Filter Reference\n\nWhen querying - e.g. with `fetch` or `what` - you can search for results, not only for exact matches, but also using one of the filters below.\n\n```red\nfetch'person [\n\tsurname: \"Doe\" \t; here, we are looking for an exact match\n\t\t\t; that is: people with the surname Doe\n]\n```\n\n```red\nfetch'person [\n\tsurname: [\n\t\tcontains: \"D\"\t; here, we are using the 'contains filter\n\t\t\t        ; that is: people whose surname contains the letter D\n\t]\n]\n```\n\n(The above, using Arturo's powerful syntax, could also be written like: \n```red\nfetch'person [ surname: -\u003e contains: \"D\" ]\n```\n\n### contains\n\nGet rows that *contain* the given text.\n\n### prefix\n\nGet rows that start with, or \"have as prefix\", the given text.\n\n### suffix\n\nGet rows that end with, or \"have as suffix\", the given text.\n\n### over\n\nGet rows with a numeric value *greater than* the given one.\n\n### under\n\nGet rows with a numeric value *less than* the given one.\n\n### overOrEqual\n\nGet rows with a numeric value *greater than or equal to* the given one.\n\n### underOrEqual\n\nGet rows with a numeric value *less than or equal to* the given one.\n\n### in\n\nGet rows with a numeric value *equal* to *one of those in* the given block.\n\n### not\n\nGet rows with a value *not equal to* the given one (or block of given values).\n\nCommunity\n------------------------------\n\nIn case you want to ask a question, suggest an idea, or practically anything related to Grafito (or Arturo) - feel free! Everything and everyone is welcome.\n\nFor that, the most convenient place for me would be the [GitHub Issues](https://github.com/arturo-lang/grafito/issues) page.\n\n[![Stargazers over time](https://starchart.cc/arturo-lang/grafito.svg)](https://starchart.cc/arturo-lang/grafito)\n\n## License\n\nMIT License\n\nCopyright (c) 2023 Yanis Zafirópulos\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farturo-lang%2Fgrafito","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farturo-lang%2Fgrafito","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farturo-lang%2Fgrafito/lists"}