# Oxidised Vector Graphics This project is an effort to improve the SVG tooling with browser-grade parsing, transforming, optimising, and linting. Hopefully this project will be useful to some as a back-end applications competing with Adobe Illustrator or InkScape. ## Features The following is a high-level overview of planned features - [ ] SVG Transformer/Optimiser - [ ] Implement all built-in SVGO plugins - [ ] Implement all InkScape actions - [ ] Implement new optimisations - [ ] Non-destructively delete useless nodes - [ ] Crop partially visible paths - [ ] SVG linter - [ ] Implement all built-in svglint rules - [ ] NPX & NPM bindings And maybe in the future??? - Web frontend comparable to InkScape - TUI frontend ### Progress Please check out the following milestones to see how the project is tracking - [Requirements for 0.0.1](https://github.com/noahbald/oxvg/milestone/1) ### SVGO Parity Oxvg aims to be as close as possible to SVGO while providing a more consistent configuration system. #### Functional Differences - **Configuration Structure**: To improve the simplicity of oxvg as a Rust program, the configuration structure is somewhat different. A migration tool will eventually be made to make switching over easier. - **Doesn't support valueless attributes**: Attributes formatted alike `` is valid HTML but not XML. Because of oxvg's dependencies, invalid XML syntax is not supported and will be converted to ``. - **Numerical cleanup**: Unlike SVGO, we include `d` in the type of attributes that can be rounded ## Building This project is currently in very early development and doesn't have any distributions yet. You can run the project for yourself by doing the following ```sh git clone git@github.com:noahbald/oxvg.git cargo build --package oxvg ./target/debug/oxvg.exe --help ``` ## Goals For me, this is a learning exercise, for others this may end up being a tool. These goals may be challenged as the project grows, but to me our goal is to - Write code that is easily understood by beginners to Rust - Focus on optimisation and quality ### Architecture This project will probably be shifted around a lot as the architecture is fleshed out. The following should ideally come to into place. - Break components of the tooling into workspaces - All public functions should have testing # Inspiration and Thanks Thank you to the following projects for providing me inspiration to break into the tooling space. - oxc Thank you to these high quality, open source projects on SVG tooling - SVGO - InkScape ## Licensing This project partially copies patterns from the following libraries - SVGO - oxc