Vivace is a lively customizable lock screen built with React + TypeScript + Vite, powered by Tauri for native desktop integration, primarily to show different calendar dates.
It runs as a lightweight desktop app and stores user preferences in %APPDATA%\Vivace\settings.json.
I use it as my personal lockscreen, because I don't like Windows ¯\_(ツ)_/¯
Plus, I wanted to learn a bit of Rust.
I don't plan to add anything else since I have everything I want (unless I get bored, I guess), but contributions are gladly welcome.
Calendars
- Gregorian (default)
- French Revolutionary (Vive l’app Vivace!)
- Julian
- Buddhist
- Hebrew
(Feel free to suggest other calendars)
Set your own avatar from settings.json in AppData/Roaming/Vivace:
"avatar_path": <avatar-path.png>
Clone and install dependencies:
git clone https://github.com/willnjohnson/Vivace.git
cd Vivace
npm installRun in development mode with hot reload:
npm run tauri devTo create a production build and installer:
npm run tauri buildThis will produce a platform-specific bundle under:
src-tauri/target/release/bundle/
- Windows:
.msiinstaller (recommended for distribution) - macOS:
.dmgimage - Linux:
.deb,.AppImage, or other packages
NOTE: I've only tested the build for Windows.
Vivace reads its configuration from:
%APPDATA%\Vivace\settings.json
Example settings.json:
Modify this file to customize Vivace.
- React + TypeScript
- Vite for lightning-fast HMR
- Tauri for cross-platform desktop bundling
- ESLint with TypeScript rules for code quality
Vivace uses ESLint with type-aware rules. Example config snippet:
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
...tseslint.configs.recommendedTypeChecked,
...tseslint.configs.stylisticTypeChecked,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
},
},
])You can also enable eslint-plugin-react-x and eslint-plugin-react-dom for stricter React rules.
MIT – feel free to modify and use Vivace in your own projects.

{ "password": "hunter2", "background_type": "gradient", "background_value": "linear-gradient(135deg, #579945 0%, #764ba2 100%)", "avatar_path": "/fox_profile.png", "enabled_calendars": [ "french_revolutionary", "gregorian", "julian", "buddhist", "jewish" ], "timeout_minutes": 1, "hotkey_combination": "Alt+L", "auto_lock_enabled": null, "auto_lock_minutes": null, "show_seconds": true, "date_format": "military", "theme": null, "sound_enabled": null, "sound_file": null }