{"id":23577144,"url":"https://github.com/eggpi/stingy","last_synced_at":"2025-11-02T08:30:31.586Z","repository":{"id":174458337,"uuid":"634555973","full_name":"eggpi/stingy","owner":"eggpi","description":"A minimalistic, terminal based tool for managing expenses.","archived":false,"fork":false,"pushed_at":"2025-02-14T17:41:26.000Z","size":77,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T18:31:42.071Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/eggpi.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}},"created_at":"2023-04-30T14:16:12.000Z","updated_at":"2025-02-14T17:41:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"6f21918f-072d-4857-bdac-7c42191a7d68","html_url":"https://github.com/eggpi/stingy","commit_stats":null,"previous_names":["eggpi/stingy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggpi%2Fstingy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggpi%2Fstingy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggpi%2Fstingy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eggpi%2Fstingy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eggpi","download_url":"https://codeload.github.com/eggpi/stingy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239389576,"owners_count":19630310,"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":[],"created_at":"2024-12-26T22:26:58.732Z","updated_at":"2025-11-02T08:30:31.547Z","avatar_url":"https://github.com/eggpi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stingy\n\n## What is this?\n\nStingy is a simple command-line tool for managing your expenses.\n\nhttps://github.com/eggpi/stingy/assets/489134/017219fc-b559-4849-9e26-5c4339a85861\n\n(The demo above uses fake data. Thankfully, I'm not in that much debt.)\n\nIt allows you to:\n\n* Import transactions from your regular bank.\n  * Currently only [AIB](http://aib.ie) and [Revolut](http://revolut.com) are\n    supported.\n* Create rules for automatically tagging transactions.\n* Query transactions in various ways, slicing by period, tag, description and more.\n\n## Installing\n\nThere are currently no binary releases of Stingy, but it can be installed with\nstandard Rust tooling.\n\nMake sure you have Cargo installed (likely using [rustup](https://rustup.rs/))\nand then:\n\n```\ncargo install --locked --git https://github.com/eggpi/stingy.git\n```\n\n## Usage\n\n### Importing transactions\n\nFirst, get a CSV export of your transactions from your bank. Currently only\n[AIB](http://aib.ie) and [Revolut](http://revolut.com) are supported.\n\nThen, import the CSV with:\n\n```\nstingy import --aib-csv \u003cpath-to-aib-csv\u003e\n```\n\nUse `--revolut-csv` if importing from Revolut instead.\n\n### Querying transactions\n\nThere are four built-in queries:\n\n* By Month\n* By Tag\n* Debits\n* Credits\n\nThe first two give you aggregate information about the transactions, grouped by\nmonth an tag, respectively, while the other two give detailed information\nabout debits and credits, respectively.\n\nAdditionally, the transactions that are aggregated or summarized can be filtered\nwith a variety of options. Use `stingy help query \u003cquery-name\u003e` to explore those\noptions.\n\nHere are a few useful examples:\n\n How do I... ? |  Command(s)\n:--------------|:------------|\nView my total credits, debits and balance month by month                              | `stingy query by-month`\nView my total credits, debits and balance this year                                   | `stingy query by-month --period 2023/01-:`\nView the distribution of transactions per month, for a set of tags                    | `stingy query by-month --tags \u003ctag1\u003e,\u003ctag2\u003e`\nView the distribution of transactions across all tags in May this year                | `stingy query by-tag --period May`\nView the distribution of transactions by tag, for transactions over a certain amount  | `stingy query by-tag --amount-range \u003cmin\u003e-:`\nView my debits for the month, sorted by amount                                        | `stingy query debits --period May`\nSearch my debits by description (e.g. how much did I pay at that restaurant?)         | `stingy query debits --description-contains \u003cdescription\u003e`\nList all debits with a given tag                                                      | `stingy query debits --tags \u003ctag1\u003e,\u003ctag2\u003e`\nView all credits for the year (and sum total), for a given account                    | `stingy query credits --period 2022/01-2022/12 --account \u003caccount\u003e`\n\nAll filtering options generally work across all queries, so try them out!\n\n### Tagging transactions\n\nTo tag transactions, you need to create a _tag rule_ that will be evaluated on every\ntransaction, tagging it if there is a match.\n\nThe attributes of a tag rule are similar to the query filters\n[explained above](#querying-transactions). Use `stingy help tags add-rule` to\nexplore those attributes.\n\nHere are a few useful examples:\n\n How do I... ? |  Command(s)\n:--------------|:------------|\nCreate a tag for my electricity bills, whose description is \"ELECTRICITY COMPANY\"  | `stingy tags add-rule --description-contains ELECTRIC --tag \"electricity bill\"`\nCreate a tag for my debits over a certain period (e.g., during a trip)             | `stingy tags add-rule --period 2022/09/12-2022/09/19 --tag \"travel/athens\"`\nView the tags I've created so far                                                  | `stingy tags list`\nDelete a tag                                                                       | `stingy tags list` to find its ID, then `stingy tags delete-rule \u003cID\u003e`\nTag one specific transaction                                                       | `stingy query debits --show-transaction-id` to find its ID, then `stingy tags add-rule --tag \u003ctag\u003e --transaction-id \u003cID\u003e`\n\n### Managing accounts\n\nAccounts are automatically created when you [import a CSV file](#importing-transactions).\n\nQueries by default return transactions across all accounts, but you can select\nan account (see `stingy accounts help select`) to restrict further queries to it.\n\nYou can also create aliases for accounts (see `stingy accounts help alias`) as a\nconvenience. The alias can be used anywhere an account name is accepted.\n\n### Advanced tips\n\n* Most command line options can be shortened for convenience: try `stingy q by-m`!\n\n* Textual options are matched to the data in a partial, case-insensitive way.\n\n  You can use this to create hierarchies of tags (e.g. \"travel/prague\",\n  \"travel/dublin\") and then do hierarchical queries (e.g.\n  `stingy query by-month --tag travel/` to see total travel transactions).\n\n* You can undo previous commands with `stingy undo` if they modified the\n  database.\n\n  The undo history persists across invocations, but is deleted when the database\n  changes in a version update.\n\n## Development\n\n### Building and running tests\n\nThis is a simple Rust project managed by Cargo. Use `cargo build` to build it\n(or `cargo run` to run directly), and `cargo test` to run the tests.\n\n### Git hooks\n\nThe git-hooks/ directory contains hooks to ensure tests are green and formatting\nis good before commits and pushes. Install them with:\n\n```\ncp git-hooks/* .git/hooks/\n```\n\n### Releasing\n\n1. Use `cargo update` to update Cargo.lock.\n1. Bump the version in Cargo.toml.\n1. Commit and push.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feggpi%2Fstingy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feggpi%2Fstingy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feggpi%2Fstingy/lists"}