constella 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +53 -0
- package/.next/build-manifest.json +20 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +36 -0
- package/.next/react-loadable-manifest.json +14 -0
- package/.next/required-server-files.js +343 -0
- package/.next/required-server-files.json +343 -0
- package/.next/routes-manifest.json +362 -0
- package/.next/server/app/(app)/activity/page.js +2 -0
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -0
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/agents/[handle]/page.js +18 -0
- package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/code/page.js +2 -0
- package/.next/server/app/(app)/code/page.js.nft.json +1 -0
- package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/config/page.js +2 -0
- package/.next/server/app/(app)/config/page.js.nft.json +1 -0
- package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/costs/page.js +2 -0
- package/.next/server/app/(app)/costs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/cron/page.js +2 -0
- package/.next/server/app/(app)/cron/page.js.nft.json +1 -0
- package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/dashboard/page.js +2 -0
- package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -0
- package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/[id]/page.js +2 -0
- package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/docs/page.js +2 -0
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -0
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/github/page.js +2 -0
- package/.next/server/app/(app)/github/page.js.nft.json +1 -0
- package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/goals/page.js +2 -0
- package/.next/server/app/(app)/goals/page.js.nft.json +1 -0
- package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/inbox/page.js +2 -0
- package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
- package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/knowledge/page.js +3 -0
- package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -0
- package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/models/page.js +2 -0
- package/.next/server/app/(app)/models/page.js.nft.json +1 -0
- package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/notifications/page.js +2 -0
- package/.next/server/app/(app)/notifications/page.js.nft.json +1 -0
- package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/org/page.js +2 -0
- package/.next/server/app/(app)/org/page.js.nft.json +1 -0
- package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/organizations/page.js +2 -0
- package/.next/server/app/(app)/organizations/page.js.nft.json +1 -0
- package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/page.js +3 -0
- package/.next/server/app/(app)/page.js.nft.json +1 -0
- package/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/planner/page.js +2 -0
- package/.next/server/app/(app)/planner/page.js.nft.json +1 -0
- package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/plugins/page.js +2 -0
- package/.next/server/app/(app)/plugins/page.js.nft.json +1 -0
- package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pm/page.js +2 -0
- package/.next/server/app/(app)/pm/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/prepare-deploy/page.js +19 -0
- package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -0
- package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/profile/page.js +2 -0
- package/.next/server/app/(app)/profile/page.js.nft.json +1 -0
- package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/pulse/page.js +2 -0
- package/.next/server/app/(app)/pulse/page.js.nft.json +1 -0
- package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/[id]/page.js +3 -0
- package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/reports/page.js +5 -0
- package/.next/server/app/(app)/reports/page.js.nft.json +1 -0
- package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/routines/page.js +2 -0
- package/.next/server/app/(app)/routines/page.js.nft.json +1 -0
- package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/search/page.js +2 -0
- package/.next/server/app/(app)/search/page.js.nft.json +1 -0
- package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/security/page.js +2 -0
- package/.next/server/app/(app)/security/page.js.nft.json +1 -0
- package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/skills/page.js +18 -0
- package/.next/server/app/(app)/skills/page.js.nft.json +1 -0
- package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/tasks/page.js +2 -0
- package/.next/server/app/(app)/tasks/page.js.nft.json +1 -0
- package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/test-dev/page.js +2 -0
- package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -0
- package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(app)/update/page.js +2 -0
- package/.next/server/app/(app)/update/page.js.nft.json +1 -0
- package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/login/page.js +2 -0
- package/.next/server/app/(auth)/login/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -0
- package/.next/server/app/(auth)/onboarding/page.js +18 -0
- package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -0
- package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error/page.js +32 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +16 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page.js +2 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js +1 -0
- package/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -0
- package/.next/server/app/api/auth/[...all]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/cron/tick/route.js +52 -0
- package/.next/server/app/api/cron/tick/route.js.nft.json +1 -0
- package/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/dev-login/route.js +1 -0
- package/.next/server/app/api/dev-login/route.js.nft.json +1 -0
- package/.next/server/app/api/dev-login/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js +1 -0
- package/.next/server/app/api/locks/acquire/route.js.nft.json +1 -0
- package/.next/server/app/api/locks/acquire/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/models/progress/route.js +1 -0
- package/.next/server/app/api/models/progress/route.js.nft.json +1 -0
- package/.next/server/app/api/models/progress/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/authenticate/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js +1 -0
- package/.next/server/app/api/passkey/register/options/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/options/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js +1 -0
- package/.next/server/app/api/passkey/register/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/passkey/register/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/stream/route.js +4 -0
- package/.next/server/app/api/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sync/file/route.js +2 -0
- package/.next/server/app/api/sync/file/route.js.nft.json +1 -0
- package/.next/server/app/api/sync/file/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/telegram/poll/route.js +15 -0
- package/.next/server/app/api/telegram/poll/route.js.nft.json +1 -0
- package/.next/server/app/api/telegram/poll/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/upload/route.js +1 -0
- package/.next/server/app/api/upload/route.js.nft.json +1 -0
- package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js +1 -0
- package/.next/server/app/api/v1/[[...path]]/route.js.nft.json +1 -0
- package/.next/server/app/api/v1/[[...path]]/route_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +53 -0
- package/.next/server/chunks/1003.js +1 -0
- package/.next/server/chunks/127.js +26 -0
- package/.next/server/chunks/1388.js +1 -0
- package/.next/server/chunks/1408.js +21 -0
- package/.next/server/chunks/1572.js +1 -0
- package/.next/server/chunks/1591.js +24 -0
- package/.next/server/chunks/1619.js +188 -0
- package/.next/server/chunks/162.js +1 -0
- package/.next/server/chunks/1881.js +1 -0
- package/.next/server/chunks/1968.js +1 -0
- package/.next/server/chunks/2297.js +348 -0
- package/.next/server/chunks/2341.js +1 -0
- package/.next/server/chunks/2517.js +1 -0
- package/.next/server/chunks/2549.js +1 -0
- package/.next/server/chunks/259.js +14 -0
- package/.next/server/chunks/2599.js +1 -0
- package/.next/server/chunks/260.js +1 -0
- package/.next/server/chunks/2867.js +147 -0
- package/.next/server/chunks/3018.js +1 -0
- package/.next/server/chunks/3050.js +18 -0
- package/.next/server/chunks/3085.js +12 -0
- package/.next/server/chunks/3131.js +1 -0
- package/.next/server/chunks/3242.js +1 -0
- package/.next/server/chunks/3266.js +15 -0
- package/.next/server/chunks/3524.js +1 -0
- package/.next/server/chunks/3527.js +479 -0
- package/.next/server/chunks/3533.js +869 -0
- package/.next/server/chunks/3550.js +1 -0
- package/.next/server/chunks/3609.js +2 -0
- package/.next/server/chunks/3667.js +462 -0
- package/.next/server/chunks/3760.js +4 -0
- package/.next/server/chunks/4679.js +1 -0
- package/.next/server/chunks/4804.js +1 -0
- package/.next/server/chunks/4832.js +2 -0
- package/.next/server/chunks/4853.js +1 -0
- package/.next/server/chunks/4979.js +67 -0
- package/.next/server/chunks/5060.js +1 -0
- package/.next/server/chunks/5278.js +1 -0
- package/.next/server/chunks/5614.js +1 -0
- package/.next/server/chunks/5818.js +1 -0
- package/.next/server/chunks/6479.js +1 -0
- package/.next/server/chunks/6658.js +1 -0
- package/.next/server/chunks/6706.js +1 -0
- package/.next/server/chunks/6719.js +1 -0
- package/.next/server/chunks/678.js +1 -0
- package/.next/server/chunks/683.js +1 -0
- package/.next/server/chunks/6862.js +1 -0
- package/.next/server/chunks/6882.js +1 -0
- package/.next/server/chunks/7037.js +1 -0
- package/.next/server/chunks/7107.js +741 -0
- package/.next/server/chunks/73.js +17 -0
- package/.next/server/chunks/7327.js +1 -0
- package/.next/server/chunks/7514.js +1 -0
- package/.next/server/chunks/7622.js +1 -0
- package/.next/server/chunks/7778.js +1 -0
- package/.next/server/chunks/7912.js +1 -0
- package/.next/server/chunks/7949.js +1 -0
- package/.next/server/chunks/7971.js +1 -0
- package/.next/server/chunks/7989.js +1 -0
- package/.next/server/chunks/842.js +22 -0
- package/.next/server/chunks/8762.js +15 -0
- package/.next/server/chunks/8823.js +77 -0
- package/.next/server/chunks/9146.js +4 -0
- package/.next/server/chunks/9676.js +1 -0
- package/.next/server/chunks/9783.js +22 -0
- package/.next/server/chunks/9969.js +3 -0
- package/.next/server/functions-config-manifest.json +18 -0
- package/.next/server/instrumentation.js +1 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/middleware.js +18 -0
- package/.next/server/middleware.js.nft.json +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +3 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/chunks/1858-339516f78a4b00da.js +1 -0
- package/.next/static/chunks/2320-fc8b39380e69d465.js +2 -0
- package/.next/static/chunks/23550918-ff694f70f4b0648c.js +1 -0
- package/.next/static/chunks/3219-ebb3c23be38c838d.js +1 -0
- package/.next/static/chunks/4263-adecb5b466380b6e.js +1 -0
- package/.next/static/chunks/5479-0cceab68cd0ca9c7.js +1 -0
- package/.next/static/chunks/5701-665b927b06158b76.js +1 -0
- package/.next/static/chunks/5920.6451a68b63918988.js +1 -0
- package/.next/static/chunks/6575-5c9139720bb0f5bf.js +4 -0
- package/.next/static/chunks/6834-4759af1ce7d95fb6.js +32 -0
- package/.next/static/chunks/7509.721cd47a931c5518.js +1 -0
- package/.next/static/chunks/8264-1ca011989ee2b231.js +1 -0
- package/.next/static/chunks/9219-4a39a98b5502d9d1.js +1 -0
- package/.next/static/chunks/9690-53d5222618cbeddb.js +1 -0
- package/.next/static/chunks/app/(app)/activity/page-3973534281ecea81.js +1 -0
- package/.next/static/chunks/app/(app)/agents/[handle]/page-83662a175c098282.js +1 -0
- package/.next/static/chunks/app/(app)/code/page-33979545192cd137.js +1 -0
- package/.next/static/chunks/app/(app)/config/page-9933aed1ca8a85c1.js +1 -0
- package/.next/static/chunks/app/(app)/costs/page-131c4dc580efcc19.js +1 -0
- package/.next/static/chunks/app/(app)/cron/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/dashboard/page-deed83aaa9d0d447.js +1 -0
- package/.next/static/chunks/app/(app)/docs/[id]/page-38c993d73c0eab4f.js +1 -0
- package/.next/static/chunks/app/(app)/docs/page-bf463b55d0554e86.js +1 -0
- package/.next/static/chunks/app/(app)/error-988cd28480809861.js +1 -0
- package/.next/static/chunks/app/(app)/github/page-62678b4e82dfecb6.js +1 -0
- package/.next/static/chunks/app/(app)/goals/page-4adb426fe1c96106.js +1 -0
- package/.next/static/chunks/app/(app)/inbox/page-e347dc55ab467310.js +1 -0
- package/.next/static/chunks/app/(app)/knowledge/page-65393a045b4349be.js +1 -0
- package/.next/static/chunks/app/(app)/layout-7f65675705b011d8.js +1 -0
- package/.next/static/chunks/app/(app)/models/page-e01f1dd7e49a2951.js +1 -0
- package/.next/static/chunks/app/(app)/notifications/page-56548ac87aef00da.js +1 -0
- package/.next/static/chunks/app/(app)/org/page-699e6a6dc0db7d81.js +1 -0
- package/.next/static/chunks/app/(app)/organizations/page-36051a380a7e8eb7.js +1 -0
- package/.next/static/chunks/app/(app)/page-7d1011a566f81520.js +1 -0
- package/.next/static/chunks/app/(app)/planner/page-dab7ced94083373a.js +1 -0
- package/.next/static/chunks/app/(app)/plugins/page-5b5a1f53389be42e.js +1 -0
- package/.next/static/chunks/app/(app)/pm/page-0de5c08c0b227bb0.js +1 -0
- package/.next/static/chunks/app/(app)/prepare-deploy/page-e426038552df8d41.js +1 -0
- package/.next/static/chunks/app/(app)/profile/page-608dfcaf8aae0a69.js +1 -0
- package/.next/static/chunks/app/(app)/pulse/page-309ccaca91de1faa.js +1 -0
- package/.next/static/chunks/app/(app)/reports/[id]/page-53ea1aff998a87ca.js +1 -0
- package/.next/static/chunks/app/(app)/reports/page-68cdc6dcfa472d86.js +1 -0
- package/.next/static/chunks/app/(app)/routines/page-bcc55550b197a9fa.js +1 -0
- package/.next/static/chunks/app/(app)/search/page-5c5f67558d0dbf0d.js +1 -0
- package/.next/static/chunks/app/(app)/security/page-a7d41e36aa366b45.js +1 -0
- package/.next/static/chunks/app/(app)/skills/page-c5b21e89593b8336.js +1 -0
- package/.next/static/chunks/app/(app)/tasks/page-08ae079e3e54d2ce.js +1 -0
- package/.next/static/chunks/app/(app)/test-dev/page-633f82dfd9c3ce23.js +1 -0
- package/.next/static/chunks/app/(app)/update/page-4be019054351bfac.js +1 -0
- package/.next/static/chunks/app/(auth)/login/page-6e85d3377062acae.js +1 -0
- package/.next/static/chunks/app/(auth)/onboarding/page-ebb10c175abf3b85.js +1 -0
- package/.next/static/chunks/app/_global-error/page-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
- package/.next/static/chunks/app/api/auth/[...all]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/cron/tick/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/dev-login/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/locks/acquire/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/models/progress/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/authenticate/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/options/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/passkey/register/verify/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/stream/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/sync/file/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/telegram/poll/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/upload/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/api/v1/[[...path]]/route-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/app/error-09899a13c38b6e89.js +1 -0
- package/.next/static/chunks/app/global-error-b8050d4d886f448c.js +1 -0
- package/.next/static/chunks/app/layout-ab9deed1e7e2e9df.js +1 -0
- package/.next/static/chunks/framework-4b2c6b6043dd203f.js +1 -0
- package/.next/static/chunks/main-722e16032e7764d1.js +5 -0
- package/.next/static/chunks/main-app-761880af2b6f1962.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-23fe50a6bf589c97.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-222e3894b78c67db.js +1 -0
- package/.next/static/css/0a9b5805594444e3.css +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_buildManifest.js +1 -0
- package/.next/static/yztMvBwyrWWkSqP6jfXoa/_ssgManifest.js +1 -0
- package/.next/trace-build +1 -0
- package/.next/types/app/(app)/activity/page.ts +87 -0
- package/.next/types/app/(app)/agents/[handle]/page.ts +87 -0
- package/.next/types/app/(app)/code/page.ts +87 -0
- package/.next/types/app/(app)/config/page.ts +87 -0
- package/.next/types/app/(app)/costs/page.ts +87 -0
- package/.next/types/app/(app)/cron/page.ts +87 -0
- package/.next/types/app/(app)/dashboard/page.ts +87 -0
- package/.next/types/app/(app)/docs/[id]/page.ts +87 -0
- package/.next/types/app/(app)/docs/page.ts +87 -0
- package/.next/types/app/(app)/github/page.ts +87 -0
- package/.next/types/app/(app)/goals/page.ts +87 -0
- package/.next/types/app/(app)/inbox/page.ts +87 -0
- package/.next/types/app/(app)/knowledge/page.ts +87 -0
- package/.next/types/app/(app)/models/page.ts +87 -0
- package/.next/types/app/(app)/notifications/page.ts +87 -0
- package/.next/types/app/(app)/org/page.ts +87 -0
- package/.next/types/app/(app)/organizations/page.ts +87 -0
- package/.next/types/app/(app)/page.ts +87 -0
- package/.next/types/app/(app)/planner/page.ts +87 -0
- package/.next/types/app/(app)/plugins/page.ts +87 -0
- package/.next/types/app/(app)/pm/page.ts +87 -0
- package/.next/types/app/(app)/prepare-deploy/page.ts +87 -0
- package/.next/types/app/(app)/profile/page.ts +87 -0
- package/.next/types/app/(app)/pulse/page.ts +87 -0
- package/.next/types/app/(app)/reports/[id]/page.ts +87 -0
- package/.next/types/app/(app)/reports/page.ts +87 -0
- package/.next/types/app/(app)/routines/page.ts +87 -0
- package/.next/types/app/(app)/search/page.ts +87 -0
- package/.next/types/app/(app)/security/page.ts +87 -0
- package/.next/types/app/(app)/skills/page.ts +87 -0
- package/.next/types/app/(app)/tasks/page.ts +87 -0
- package/.next/types/app/(app)/test-dev/page.ts +87 -0
- package/.next/types/app/(app)/update/page.ts +87 -0
- package/.next/types/app/(auth)/login/page.ts +87 -0
- package/.next/types/app/(auth)/onboarding/page.ts +87 -0
- package/.next/types/app/api/auth/[...all]/route.ts +351 -0
- package/.next/types/app/api/cron/tick/route.ts +351 -0
- package/.next/types/app/api/dev-login/route.ts +351 -0
- package/.next/types/app/api/locks/acquire/route.ts +351 -0
- package/.next/types/app/api/models/progress/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/options/route.ts +351 -0
- package/.next/types/app/api/passkey/authenticate/verify/route.ts +351 -0
- package/.next/types/app/api/passkey/register/options/route.ts +351 -0
- package/.next/types/app/api/passkey/register/verify/route.ts +351 -0
- package/.next/types/app/api/stream/route.ts +351 -0
- package/.next/types/app/api/sync/file/route.ts +351 -0
- package/.next/types/app/api/telegram/poll/route.ts +351 -0
- package/.next/types/app/api/upload/route.ts +351 -0
- package/.next/types/app/api/v1/[[...path]]/route.ts +351 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/link.d.ts +210 -0
- package/.next/types/package.json +1 -0
- package/.next/types/routes.d.ts +120 -0
- package/.next/types/validator.ts +511 -0
- package/CHANGELOG.md +312 -0
- package/LICENSE +21 -0
- package/README.md +382 -0
- package/README.pt-BR.md +391 -0
- package/bin/constella.mjs +329 -0
- package/bin/guard-hook.mjs +44 -0
- package/bin/lock-hook.mjs +49 -0
- package/bin/worker.mjs +142 -0
- package/docs/assets/arch-orbit.svg +56 -0
- package/docs/assets/blackhole.svg +37 -0
- package/docs/assets/divider-orbit.svg +23 -0
- package/docs/assets/hero-constella.svg +72 -0
- package/docs/en/AGENTS.md +279 -0
- package/docs/en/AI_ARCHITECTURE.md +373 -0
- package/docs/en/ARCHITECTURE.md +334 -0
- package/docs/en/AUTH_MODE.md +247 -0
- package/docs/en/CHAT_COMMANDS.md +305 -0
- package/docs/en/CONFIGURATION.md +340 -0
- package/docs/en/DEPLOY.md +331 -0
- package/docs/en/DM.md +297 -0
- package/docs/en/FAQ.md +258 -0
- package/docs/en/GITHUB.md +341 -0
- package/docs/en/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/en/INBOX.md +340 -0
- package/docs/en/INSTALLATION.md +329 -0
- package/docs/en/KB_AGENT.md +305 -0
- package/docs/en/KB_RAG.md +356 -0
- package/docs/en/MCP.md +313 -0
- package/docs/en/MEMORY_RAG.md +289 -0
- package/docs/en/MODELS.md +341 -0
- package/docs/en/ONBOARDING.md +327 -0
- package/docs/en/PLUGINS.md +290 -0
- package/docs/en/PORTABLE_MODE.md +387 -0
- package/docs/en/PO_AGENT.md +379 -0
- package/docs/en/PREPARE_DEPLOY.md +308 -0
- package/docs/en/PROJECT_STACKS.md +258 -0
- package/docs/en/PUBLIC_API.md +315 -0
- package/docs/en/PUBLISHING.md +343 -0
- package/docs/en/README.md +95 -0
- package/docs/en/SECURITY.md +280 -0
- package/docs/en/SKILLS.md +349 -0
- package/docs/en/START_MODE.md +340 -0
- package/docs/en/SYNCED_BLOCKS.md +320 -0
- package/docs/en/TEAM_ROOM.md +285 -0
- package/docs/en/TELEGRAM.md +294 -0
- package/docs/en/TEST_DEV.md +321 -0
- package/docs/en/TROUBLESHOOTING.md +294 -0
- package/docs/en/UPDATE.md +301 -0
- package/docs/en/VPS_MODE.md +334 -0
- package/docs/en/WORKFLOW.md +321 -0
- package/docs/pt/AGENTS.md +279 -0
- package/docs/pt/AI_ARCHITECTURE.md +373 -0
- package/docs/pt/ARCHITECTURE.md +334 -0
- package/docs/pt/AUTH_MODE.md +247 -0
- package/docs/pt/CHAT_COMMANDS.md +307 -0
- package/docs/pt/CONFIGURATION.md +340 -0
- package/docs/pt/DEPLOY.md +331 -0
- package/docs/pt/DM.md +297 -0
- package/docs/pt/FAQ.md +258 -0
- package/docs/pt/GITHUB.md +341 -0
- package/docs/pt/GOALS_SPECS_ISSUES.md +303 -0
- package/docs/pt/INBOX.md +340 -0
- package/docs/pt/INSTALLATION.md +329 -0
- package/docs/pt/KB_AGENT.md +305 -0
- package/docs/pt/KB_RAG.md +356 -0
- package/docs/pt/MCP.md +313 -0
- package/docs/pt/MEMORY_RAG.md +289 -0
- package/docs/pt/MODELS.md +341 -0
- package/docs/pt/ONBOARDING.md +327 -0
- package/docs/pt/PLUGINS.md +290 -0
- package/docs/pt/PORTABLE_MODE.md +387 -0
- package/docs/pt/PO_AGENT.md +379 -0
- package/docs/pt/PREPARE_DEPLOY.md +308 -0
- package/docs/pt/PROJECT_STACKS.md +258 -0
- package/docs/pt/PUBLIC_API.md +315 -0
- package/docs/pt/PUBLISHING.md +343 -0
- package/docs/pt/README.md +95 -0
- package/docs/pt/SECURITY.md +280 -0
- package/docs/pt/SKILLS.md +349 -0
- package/docs/pt/START_MODE.md +340 -0
- package/docs/pt/SYNCED_BLOCKS.md +320 -0
- package/docs/pt/TEAM_ROOM.md +285 -0
- package/docs/pt/TELEGRAM.md +294 -0
- package/docs/pt/TEST_DEV.md +321 -0
- package/docs/pt/TROUBLESHOOTING.md +294 -0
- package/docs/pt/UPDATE.md +301 -0
- package/docs/pt/VPS_MODE.md +334 -0
- package/docs/pt/WORKFLOW.md +321 -0
- package/drizzle/0000_regular_nightshade.sql +644 -0
- package/drizzle/0001_mixed_zombie.sql +106 -0
- package/drizzle/meta/0000_snapshot.json +4650 -0
- package/drizzle/meta/0001_snapshot.json +5418 -0
- package/drizzle/meta/_journal.json +20 -0
- package/drizzle.config.mjs +16 -0
- package/next.config.mjs +18 -0
- package/package.json +130 -0
- package/scripts/clean-repo.mjs +20 -0
- package/scripts/dev-all.mjs +46 -0
- package/scripts/i18n-parity.mjs +57 -0
- package/scripts/mcp-server.mjs +100 -0
- package/scripts/postbuild.mjs +11 -0
- package/scripts/publish-public.mjs +116 -0
- package/scripts/start-all.mjs +45 -0
- package/scripts/trim-next.mjs +23 -0
- package/scripts/vps-install.sh +39 -0
- package/skills/CONTRIBUTING.md +122 -0
- package/skills/COVERAGE.md +129 -0
- package/skills/INDEX.json +3443 -0
- package/skills/README.md +57 -0
- package/skills/design/animation-motion/SKILL.md +60 -0
- package/skills/design/color-and-typography/SKILL.md +60 -0
- package/skills/design/css-techniques/SKILL.md +58 -0
- package/skills/design/design-systems/SKILL.md +60 -0
- package/skills/design/gradients/SKILL.md +59 -0
- package/skills/design/graphic-design-basics/SKILL.md +55 -0
- package/skills/design/microinteractions/SKILL.md +58 -0
- package/skills/design/responsive-layout/SKILL.md +59 -0
- package/skills/design/ui-ux-principles/SKILL.md +58 -0
- package/skills/engineering/architecture/api-design-rest-graphql/SKILL.md +67 -0
- package/skills/engineering/architecture/caching-strategies/SKILL.md +59 -0
- package/skills/engineering/architecture/data-modeling/SKILL.md +64 -0
- package/skills/engineering/architecture/message-queues-async/SKILL.md +58 -0
- package/skills/engineering/architecture/scalability-reliability/SKILL.md +62 -0
- package/skills/engineering/architecture/software-architecture-patterns/SKILL.md +56 -0
- package/skills/engineering/architecture/system-design-fundamentals/SKILL.md +56 -0
- package/skills/engineering/backend/auth-and-authorization/SKILL.md +62 -0
- package/skills/engineering/backend/backend-fundamentals/SKILL.md +65 -0
- package/skills/engineering/backend/observability-logging/SKILL.md +60 -0
- package/skills/engineering/frontend/accessibility-wcag/SKILL.md +57 -0
- package/skills/engineering/frontend/frontend-architecture/SKILL.md +65 -0
- package/skills/engineering/frontend/rendering-strategies-ssr-csr/SKILL.md +60 -0
- package/skills/engineering/frontend/state-management/SKILL.md +69 -0
- package/skills/engineering/performance/backend-performance/SKILL.md +69 -0
- package/skills/engineering/performance/database-query-optimization/SKILL.md +64 -0
- package/skills/engineering/performance/profiling-and-benchmarking/SKILL.md +60 -0
- package/skills/engineering/performance/web-performance-core-vitals/SKILL.md +72 -0
- package/skills/engineering/practices/clean-code/SKILL.md +61 -0
- package/skills/engineering/practices/code-optimization/SKILL.md +60 -0
- package/skills/engineering/practices/code-review-practices/SKILL.md +58 -0
- package/skills/engineering/practices/git-workflow/SKILL.md +62 -0
- package/skills/engineering/practices/refactoring/SKILL.md +58 -0
- package/skills/engineering/security/appsec-fundamentals/SKILL.md +70 -0
- package/skills/engineering/security/dependency-supply-chain/SKILL.md +77 -0
- package/skills/engineering/security/owasp-asvs/SKILL.md +54 -0
- package/skills/engineering/security/owasp-top-10/SKILL.md +63 -0
- package/skills/engineering/security/secrets-management/SKILL.md +58 -0
- package/skills/engineering/security/secure-auth-sessions/SKILL.md +56 -0
- package/skills/engineering/testing/tdd-and-coverage/SKILL.md +62 -0
- package/skills/engineering/testing/testing-strategy-pyramid/SKILL.md +56 -0
- package/skills/engineering/testing/unit-integration-e2e/SKILL.md +75 -0
- package/skills/languages/c/SKILL.md +74 -0
- package/skills/languages/clojure/SKILL.md +73 -0
- package/skills/languages/cpp/SKILL.md +75 -0
- package/skills/languages/csharp/SKILL.md +75 -0
- package/skills/languages/dart/SKILL.md +82 -0
- package/skills/languages/elixir/SKILL.md +74 -0
- package/skills/languages/erlang/SKILL.md +76 -0
- package/skills/languages/go/SKILL.md +83 -0
- package/skills/languages/haskell/SKILL.md +70 -0
- package/skills/languages/java/SKILL.md +71 -0
- package/skills/languages/javascript/SKILL.md +62 -0
- package/skills/languages/kotlin/SKILL.md +68 -0
- package/skills/languages/lua/SKILL.md +79 -0
- package/skills/languages/objectivec/SKILL.md +83 -0
- package/skills/languages/php/SKILL.md +74 -0
- package/skills/languages/python/SKILL.md +68 -0
- package/skills/languages/r/SKILL.md +70 -0
- package/skills/languages/ruby/SKILL.md +67 -0
- package/skills/languages/rust/SKILL.md +72 -0
- package/skills/languages/scala/SKILL.md +73 -0
- package/skills/languages/swift/SKILL.md +73 -0
- package/skills/languages/typescript/SKILL.md +69 -0
- package/skills/meta/authoring-agent-skills/SKILL.md +73 -0
- package/skills/meta/progressive-disclosure/SKILL.md +65 -0
- package/skills/meta/skill-frontmatter-spec/SKILL.md +65 -0
- package/skills/process/adr-technical-decisions/SKILL.md +59 -0
- package/skills/process/app-planning/SKILL.md +63 -0
- package/skills/process/architecture-before-code/SKILL.md +52 -0
- package/skills/process/breaking-work-into-sprints/SKILL.md +53 -0
- package/skills/process/idea-to-product/SKILL.md +50 -0
- package/skills/process/mocks-and-screen-flows/SKILL.md +52 -0
- package/skills/process/prioritization-moscow-rice/SKILL.md +64 -0
- package/skills/process/problem-framing/SKILL.md +51 -0
- package/skills/process/product-discovery/SKILL.md +53 -0
- package/skills/process/readme-generation/SKILL.md +90 -0
- package/skills/process/requirements-to-specs/SKILL.md +53 -0
- package/skills/process/research-official-docs/SKILL.md +58 -0
- package/skills/process/review-code-perf-security/SKILL.md +65 -0
- package/skills/process/security-by-design/SKILL.md +68 -0
- package/skills/process/specs-to-issues/SKILL.md +53 -0
- package/skills/process/testing-before-done/SKILL.md +61 -0
- package/skills/process/validating-ux-navigation/SKILL.md +63 -0
- package/skills/references/ai-attachments-ui/SKILL.md +66 -0
- package/skills/references/ai-in-browser-webllm/SKILL.md +74 -0
- package/skills/references/ai-tool-ui-patterns/SKILL.md +63 -0
- package/skills/references/component-patterns-gallery/SKILL.md +62 -0
- package/skills/references/gradient-resources/SKILL.md +66 -0
- package/skills/references/react-component-libraries/SKILL.md +61 -0
- package/skills/references/saas-landing-patterns/SKILL.md +67 -0
- package/skills/references/shadcn-tailwind-theming/SKILL.md +74 -0
- package/skills/references/vercel-ai-sdk-elements/SKILL.md +66 -0
- package/skills/references/web-animation-codrops/SKILL.md +68 -0
- package/skills/stacks/aiml/jupyter/SKILL.md +68 -0
- package/skills/stacks/aiml/keras/SKILL.md +77 -0
- package/skills/stacks/aiml/numpy/SKILL.md +69 -0
- package/skills/stacks/aiml/pandas/SKILL.md +72 -0
- package/skills/stacks/aiml/pytorch/SKILL.md +77 -0
- package/skills/stacks/aiml/scikit-learn/SKILL.md +74 -0
- package/skills/stacks/aiml/tensorflow/SKILL.md +79 -0
- package/skills/stacks/auth/auth0/SKILL.md +63 -0
- package/skills/stacks/auth/authjs/SKILL.md +69 -0
- package/skills/stacks/auth/clerk/SKILL.md +72 -0
- package/skills/stacks/auth/keycloak/SKILL.md +63 -0
- package/skills/stacks/auth/lucia/SKILL.md +56 -0
- package/skills/stacks/auth/passport/SKILL.md +70 -0
- package/skills/stacks/auth/supabase-auth/SKILL.md +66 -0
- package/skills/stacks/baas/amplify/SKILL.md +71 -0
- package/skills/stacks/baas/appwrite/SKILL.md +79 -0
- package/skills/stacks/baas/firebase/SKILL.md +73 -0
- package/skills/stacks/baas/heroku/SKILL.md +71 -0
- package/skills/stacks/backend/actix/SKILL.md +77 -0
- package/skills/stacks/backend/adonisjs/SKILL.md +65 -0
- package/skills/stacks/backend/aspnet-core/SKILL.md +75 -0
- package/skills/stacks/backend/codeigniter/SKILL.md +76 -0
- package/skills/stacks/backend/django/SKILL.md +62 -0
- package/skills/stacks/backend/express/SKILL.md +65 -0
- package/skills/stacks/backend/fastapi/SKILL.md +64 -0
- package/skills/stacks/backend/fastify/SKILL.md +64 -0
- package/skills/stacks/backend/fiber/SKILL.md +68 -0
- package/skills/stacks/backend/flask/SKILL.md +71 -0
- package/skills/stacks/backend/gin/SKILL.md +68 -0
- package/skills/stacks/backend/graphql/SKILL.md +70 -0
- package/skills/stacks/backend/hono/SKILL.md +64 -0
- package/skills/stacks/backend/koa/SKILL.md +63 -0
- package/skills/stacks/backend/laravel/SKILL.md +73 -0
- package/skills/stacks/backend/nestjs/SKILL.md +70 -0
- package/skills/stacks/backend/nginx/SKILL.md +77 -0
- package/skills/stacks/backend/phoenix/SKILL.md +68 -0
- package/skills/stacks/backend/rails/SKILL.md +67 -0
- package/skills/stacks/backend/spring/SKILL.md +70 -0
- package/skills/stacks/backend/spring-boot/SKILL.md +70 -0
- package/skills/stacks/backend/symfony/SKILL.md +77 -0
- package/skills/stacks/container/containerd/SKILL.md +75 -0
- package/skills/stacks/container/docker/SKILL.md +90 -0
- package/skills/stacks/container/podman/SKILL.md +93 -0
- package/skills/stacks/database/cassandra/SKILL.md +74 -0
- package/skills/stacks/database/cockroachdb/SKILL.md +69 -0
- package/skills/stacks/database/dynamodb/SKILL.md +62 -0
- package/skills/stacks/database/mariadb/SKILL.md +71 -0
- package/skills/stacks/database/mongodb/SKILL.md +71 -0
- package/skills/stacks/database/mysql/SKILL.md +72 -0
- package/skills/stacks/database/neon/SKILL.md +68 -0
- package/skills/stacks/database/planetscale/SKILL.md +70 -0
- package/skills/stacks/database/postgresql/SKILL.md +81 -0
- package/skills/stacks/database/redis/SKILL.md +78 -0
- package/skills/stacks/database/sqlite/SKILL.md +70 -0
- package/skills/stacks/database/supabase/SKILL.md +79 -0
- package/skills/stacks/dataviz/chart-js/SKILL.md +72 -0
- package/skills/stacks/dataviz/d3/SKILL.md +77 -0
- package/skills/stacks/dataviz/grafana/SKILL.md +69 -0
- package/skills/stacks/dataviz/plotly/SKILL.md +71 -0
- package/skills/stacks/frontend/alpine/SKILL.md +75 -0
- package/skills/stacks/frontend/angular/SKILL.md +75 -0
- package/skills/stacks/frontend/backbone/SKILL.md +82 -0
- package/skills/stacks/frontend/ember/SKILL.md +85 -0
- package/skills/stacks/frontend/htmx/SKILL.md +73 -0
- package/skills/stacks/frontend/lit/SKILL.md +76 -0
- package/skills/stacks/frontend/preact/SKILL.md +74 -0
- package/skills/stacks/frontend/qwik/SKILL.md +65 -0
- package/skills/stacks/frontend/react/SKILL.md +77 -0
- package/skills/stacks/frontend/solidjs/SKILL.md +75 -0
- package/skills/stacks/frontend/svelte/SKILL.md +70 -0
- package/skills/stacks/frontend/vue/SKILL.md +69 -0
- package/skills/stacks/infra/ansible/SKILL.md +76 -0
- package/skills/stacks/infra/aws/SKILL.md +66 -0
- package/skills/stacks/infra/azure/SKILL.md +72 -0
- package/skills/stacks/infra/circleci/SKILL.md +78 -0
- package/skills/stacks/infra/cloudflare/SKILL.md +65 -0
- package/skills/stacks/infra/fly-io/SKILL.md +63 -0
- package/skills/stacks/infra/gcp/SKILL.md +66 -0
- package/skills/stacks/infra/jenkins/SKILL.md +73 -0
- package/skills/stacks/infra/kubernetes/SKILL.md +64 -0
- package/skills/stacks/infra/netlify/SKILL.md +60 -0
- package/skills/stacks/infra/railway/SKILL.md +63 -0
- package/skills/stacks/infra/tailscale/SKILL.md +65 -0
- package/skills/stacks/infra/terraform/SKILL.md +75 -0
- package/skills/stacks/infra/vagrant/SKILL.md +70 -0
- package/skills/stacks/infra/vercel/SKILL.md +60 -0
- package/skills/stacks/meta/astro/SKILL.md +64 -0
- package/skills/stacks/meta/docusaurus/SKILL.md +71 -0
- package/skills/stacks/meta/eleventy/SKILL.md +69 -0
- package/skills/stacks/meta/gatsby/SKILL.md +63 -0
- package/skills/stacks/meta/hugo/SKILL.md +73 -0
- package/skills/stacks/meta/jekyll/SKILL.md +70 -0
- package/skills/stacks/meta/nextjs/SKILL.md +62 -0
- package/skills/stacks/meta/nuxt/SKILL.md +66 -0
- package/skills/stacks/meta/remix/SKILL.md +67 -0
- package/skills/stacks/meta/sveltekit/SKILL.md +70 -0
- package/skills/stacks/meta/vite/SKILL.md +63 -0
- package/skills/stacks/mobile/android/SKILL.md +77 -0
- package/skills/stacks/mobile/flutter/SKILL.md +77 -0
- package/skills/stacks/mobile/ionic/SKILL.md +72 -0
- package/skills/stacks/mobile/nativescript/SKILL.md +71 -0
- package/skills/stacks/mobile/react-native/SKILL.md +75 -0
- package/skills/stacks/mobile/xamarin/SKILL.md +73 -0
- package/skills/stacks/orm/diesel/SKILL.md +72 -0
- package/skills/stacks/orm/django-orm/SKILL.md +58 -0
- package/skills/stacks/orm/drizzle/SKILL.md +67 -0
- package/skills/stacks/orm/gorm/SKILL.md +73 -0
- package/skills/stacks/orm/knex/SKILL.md +64 -0
- package/skills/stacks/orm/mongoose/SKILL.md +64 -0
- package/skills/stacks/orm/prisma/SKILL.md +64 -0
- package/skills/stacks/orm/sequelize/SKILL.md +65 -0
- package/skills/stacks/orm/sqlalchemy/SKILL.md +71 -0
- package/skills/stacks/orm/typeorm/SKILL.md +70 -0
- package/skills/stacks/queue/bullmq/SKILL.md +69 -0
- package/skills/stacks/queue/celery/SKILL.md +68 -0
- package/skills/stacks/queue/kafka/SKILL.md +66 -0
- package/skills/stacks/queue/nats/SKILL.md +66 -0
- package/skills/stacks/queue/rabbitmq/SKILL.md +64 -0
- package/skills/stacks/queue/redis/SKILL.md +66 -0
- package/skills/stacks/runtime/beam/SKILL.md +72 -0
- package/skills/stacks/runtime/bun/SKILL.md +80 -0
- package/skills/stacks/runtime/deno/SKILL.md +74 -0
- package/skills/stacks/runtime/dotnet/SKILL.md +64 -0
- package/skills/stacks/runtime/jvm/SKILL.md +66 -0
- package/skills/stacks/runtime/node/SKILL.md +70 -0
- package/skills/stacks/runtime/pypy/SKILL.md +69 -0
- package/skills/stacks/runtime/python3/SKILL.md +70 -0
- package/skills/stacks/styling/bootstrap/SKILL.md +74 -0
- package/skills/stacks/styling/bulma/SKILL.md +80 -0
- package/skills/stacks/styling/chakra-ui/SKILL.md +61 -0
- package/skills/stacks/styling/css-modules/SKILL.md +54 -0
- package/skills/stacks/styling/mui/SKILL.md +60 -0
- package/skills/stacks/styling/sass/SKILL.md +63 -0
- package/skills/stacks/styling/shadcn-ui/SKILL.md +58 -0
- package/skills/stacks/styling/styled-components/SKILL.md +62 -0
- package/skills/stacks/styling/tailwind/SKILL.md +59 -0
- package/skills/stacks/styling/unocss/SKILL.md +64 -0
- package/skills/stacks/styling/vanilla-extract/SKILL.md +64 -0
- package/skills/stacks/styling/vuetify/SKILL.md +89 -0
- package/skills/stacks/testing/cypress/SKILL.md +68 -0
- package/skills/stacks/testing/jasmine/SKILL.md +67 -0
- package/skills/stacks/testing/jest/SKILL.md +67 -0
- package/skills/stacks/testing/mocha/SKILL.md +71 -0
- package/skills/stacks/testing/playwright/SKILL.md +68 -0
- package/skills/stacks/testing/puppeteer/SKILL.md +70 -0
- package/skills/stacks/testing/selenium/SKILL.md +70 -0
- package/skills/stacks/testing/vitest/SKILL.md +68 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing/tdd-and-coverage
|
|
3
|
+
description: Test-driven development's red-green-refactor cycle and how to read code coverage as a guide rather than a goal.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [tdd, testing, refactoring, coverage, red-green-refactor]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://martinfowler.com/bliki/TestDrivenDevelopment.html
|
|
9
|
+
- https://martinfowler.com/bliki/TestCoverage.html
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# TDD and Meaningful Coverage
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Test-driven development (TDD) is a workflow where you write a failing test before the production code, make it pass, then refactor — the red-green-refactor cycle. This skill pairs that discipline with a sober view of code coverage: a useful signal for finding untested code, but a poor target to optimize blindly. Read it when adopting TDD on a feature or when a team is being pressured by a coverage number.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Bliki — Test Driven Development: https://martinfowler.com/bliki/TestDrivenDevelopment.html
|
|
20
|
+
- Bliki — Test Coverage: https://martinfowler.com/bliki/TestCoverage.html
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **Red — green — refactor.** Write a test that fails (red), write the minimum code to pass it (green), then improve the structure of new and old code without changing behavior (refactor). Repeat.
|
|
24
|
+
- **List the cases first.** Fowler describes writing out a list of test cases up front, then picking one and applying red-green-refactor to it before moving to the next.
|
|
25
|
+
- **Self-testing code.** Because functional code only exists to satisfy a passing test, TDD produces a suite that lets you change code with confidence.
|
|
26
|
+
- **Design pressure.** Writing the test first "forces us to think about the interface to the code first," encouraging a clean separation of interface from implementation.
|
|
27
|
+
- **Coverage is a tool, not a target.** Coverage shows which lines/branches ran during tests; high coverage does not prove the tests assert the right things, and a fixed coverage percentage as a quality *gate* tends to be counterproductive (Fowler).
|
|
28
|
+
|
|
29
|
+
## Best practices
|
|
30
|
+
- Never skip the refactor step — Fowler calls neglecting it "the most common way... to screw up TDD," leaving a messy aggregation of code fragments.
|
|
31
|
+
- Keep each cycle small: one test, the simplest passing change, then clean up.
|
|
32
|
+
- Use coverage to *find* untested behavior and obvious gaps, not to chase 100%; review the uncovered lines, do not just read the number.
|
|
33
|
+
- Write tests that assert meaningful behavior and outcomes, so coverage reflects real verification rather than mere execution.
|
|
34
|
+
|
|
35
|
+
## Common pitfalls
|
|
36
|
+
- Treating a coverage percentage as the goal → use it diagnostically; high coverage with weak assertions is false comfort.
|
|
37
|
+
- Writing tests after the fact and calling it TDD → the value comes from test-first design pressure and the red step proving the test can fail.
|
|
38
|
+
- Dropping the refactor step once tests pass → schedule the cleanup as part of the same cycle, not "later."
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
```ts
|
|
42
|
+
// 1. RED — write the failing test first
|
|
43
|
+
import { expect, test } from 'vitest'
|
|
44
|
+
import { slugify } from './slugify'
|
|
45
|
+
test('lowercases and hyphenates', () => {
|
|
46
|
+
expect(slugify('Hello World')).toBe('hello-world')
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
// 2. GREEN — minimal implementation to pass
|
|
50
|
+
export const slugify = (s: string) =>
|
|
51
|
+
s.toLowerCase().replace(/\s+/g, '-')
|
|
52
|
+
|
|
53
|
+
// 3. REFACTOR — improve structure/edge handling, keep tests green
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Further reading
|
|
57
|
+
- Test Coverage (Fowler): https://martinfowler.com/bliki/TestCoverage.html
|
|
58
|
+
- Self-Testing Code (Fowler): https://martinfowler.com/bliki/SelfTestingCode.html
|
|
59
|
+
|
|
60
|
+
## Related skills
|
|
61
|
+
- ../testing-strategy-pyramid — where TDD's unit tests sit in the portfolio
|
|
62
|
+
- ../unit-integration-e2e — the runners (Vitest) used to execute the cycle
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing/testing-strategy-pyramid
|
|
3
|
+
description: How to balance a test portfolio across unit, integration, and end-to-end layers using the test pyramid (and the testing-trophy alternative).
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [testing, test-pyramid, strategy, e2e, unit-tests, integration]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://martinfowler.com/bliki/TestPyramid.html
|
|
9
|
+
- https://martinfowler.com/articles/practical-test-pyramid.html
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Testing Strategy: The Test Pyramid
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
The test pyramid is a heuristic for shaping an automated test portfolio so that most checks are cheap, fast, low-level tests and only a few are slow, broad, end-to-end tests. Read this when deciding how many tests to write at each layer, or when an existing suite is slow and brittle (a sign of an inverted "ice-cream cone"). It frames the cost/speed/confidence tradeoffs that the sibling tooling and TDD skills then implement.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Bliki — Test Pyramid: https://martinfowler.com/bliki/TestPyramid.html
|
|
20
|
+
- Article — The Practical Test Pyramid (Ham Vocke): https://martinfowler.com/articles/practical-test-pyramid.html
|
|
21
|
+
|
|
22
|
+
## Core concepts
|
|
23
|
+
- **Three layers.** A broad base of many fast **unit tests**, a middle band of **service / integration tests** that exercise components through APIs (subcutaneously, bypassing the UI), and a thin top of **UI / end-to-end tests**.
|
|
24
|
+
- **Cost and speed rise with the layer.** Per Fowler, tests that run end-to-end through the UI are "brittle, expensive to write, and time consuming to run," so higher layers should hold fewer tests.
|
|
25
|
+
- **Granularity drives the count.** The higher a test sits, the more integration it covers per test, so fewer are needed to cover the same ground; lower-level tests isolate behavior and pinpoint failures.
|
|
26
|
+
- **The pyramid is a heuristic, not a law.** Exact layer names and counts matter less than the principle: push tests down to the cheapest level that still gives the confidence you need.
|
|
27
|
+
- **The ice-cream cone anti-shape.** A suite dominated by UI automation with few unit tests inverts the pyramid and becomes slow and fragile.
|
|
28
|
+
- **Testing trophy (community alternative).** A widely discussed alternative weights integration tests more heavily than a strict pyramid; treat it as a perspective, not an official Fowler model (see Further reading).
|
|
29
|
+
|
|
30
|
+
## Best practices
|
|
31
|
+
- Write the bulk of automated tests at the unit level and use end-to-end tests as a "second line of test defense" (Fowler).
|
|
32
|
+
- When a higher-level test catches a bug, reproduce it with a lower-level unit test before fixing, so the regression is guarded cheaply and locally.
|
|
33
|
+
- Keep end-to-end tests focused on a few critical user journeys rather than re-checking logic already covered by unit tests.
|
|
34
|
+
- Push assertions to the lowest layer that can make them; reserve UI tests for things only the UI can verify.
|
|
35
|
+
|
|
36
|
+
## Common pitfalls
|
|
37
|
+
- Inverting the pyramid (ice-cream cone): over-investing in UI/e2e tests → rebalance toward fast unit and service tests.
|
|
38
|
+
- Treating layer labels as rigid rules → focus on the cost/speed/confidence tradeoff the shape represents, not the vocabulary.
|
|
39
|
+
- Duplicating the same business logic across every layer → cover logic once at the cheapest layer, integrate (not re-test) above it.
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
```text
|
|
43
|
+
/\ few UI / end-to-end tests (slow, broad, brittle)
|
|
44
|
+
/ \
|
|
45
|
+
/----\ some service / integration tests
|
|
46
|
+
/ \
|
|
47
|
+
/--------\ many unit tests (fast, isolated, cheap)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Further reading
|
|
51
|
+
- The Practical Test Pyramid: https://martinfowler.com/articles/practical-test-pyramid.html
|
|
52
|
+
- Testing Trophy (community, Kent C. Dodds): https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications
|
|
53
|
+
|
|
54
|
+
## Related skills
|
|
55
|
+
- ../unit-integration-e2e — the tooling that implements each layer
|
|
56
|
+
- ../tdd-and-coverage — writing the low-level tests first and measuring meaningful coverage
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing/unit-integration-e2e
|
|
3
|
+
description: The three test layers and the tooling that implements them — Vitest for unit/integration and Playwright for end-to-end browser tests.
|
|
4
|
+
domain: engineering
|
|
5
|
+
category: engineering
|
|
6
|
+
tags: [testing, vitest, playwright, e2e, integration, unit-tests]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://vitest.dev/guide/
|
|
9
|
+
- https://playwright.dev/docs/intro
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Unit, Integration, and End-to-End Tests
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
This skill maps the three test layers to concrete tooling: **unit** and **integration** tests with Vitest (a Vite-native test runner) and **end-to-end** browser tests with Playwright. Read it when setting up a test suite in a Vite/TypeScript stack and deciding which framework runs which layer. The strategy for how many tests live at each layer is covered by the sibling test-pyramid skill.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Docs: Vitest — https://vitest.dev/guide/ ; Playwright — https://playwright.dev/docs/intro
|
|
20
|
+
- Repo: https://github.com/vitest-dev/vitest ; https://github.com/microsoft/playwright
|
|
21
|
+
- Install: https://vitest.dev/guide/ ; https://playwright.dev/docs/intro
|
|
22
|
+
|
|
23
|
+
## Install / setup
|
|
24
|
+
```bash
|
|
25
|
+
# Unit & integration tests (Vitest)
|
|
26
|
+
npm install -D vitest
|
|
27
|
+
|
|
28
|
+
# End-to-end browser tests (Playwright) — scaffolds config, tests/, browsers
|
|
29
|
+
npm init playwright@latest
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Core concepts
|
|
33
|
+
- **Unit tests** isolate a single function/module, run in milliseconds, and pinpoint failures. In Vitest they live in `*.test.ts` / `*.spec.ts` files and use the `expect` matcher API.
|
|
34
|
+
- **Integration tests** exercise several units together (e.g. a service plus its DB or HTTP layer). Vitest runs these through the same runner; choose an environment such as `node` or `jsdom`/`happy-dom` for DOM-dependent code.
|
|
35
|
+
- **End-to-end (e2e) tests** drive a real browser through real user journeys. Playwright is "an end-to-end test framework for modern web apps" that runs across Chromium, Firefox, and WebKit.
|
|
36
|
+
- **Vitest is Vite-native:** it reads your `vite.config.*` by default, so existing Vite plugins and aliases work in tests out of the box (requires Vite >=6 and Node >=20).
|
|
37
|
+
- **Playwright runs cross-browser in parallel,** headless by default, with a headed mode and an interactive UI Mode for debugging, plus an HTML reporter.
|
|
38
|
+
- **Auto-waiting:** Playwright waits for elements to be actionable before acting, reducing flaky timing-based failures common in older e2e tools.
|
|
39
|
+
|
|
40
|
+
## Best practices
|
|
41
|
+
- Run unit/integration tests with Vitest in watch mode during development (`vitest`) and once in CI (`vitest run`).
|
|
42
|
+
- Keep e2e tests few and focused on critical paths; they are the slow, broad top of the pyramid.
|
|
43
|
+
- Prefer Playwright's web-first locators and auto-waiting assertions over manual sleeps to avoid flaky tests.
|
|
44
|
+
- Run Playwright across the browsers your users actually use; it is supported on Windows, Linux, and macOS, locally or in CI.
|
|
45
|
+
|
|
46
|
+
## Common pitfalls
|
|
47
|
+
- Using Playwright (or any e2e tool) for logic that a Vitest unit test could check → push the assertion down to the cheapest layer.
|
|
48
|
+
- Mixing the `@vitest/browser` Playwright provider with a separate `@playwright/test` install in one project can conflict → pick one driver per project (per upstream issues).
|
|
49
|
+
- Forgetting to select a DOM environment in Vitest for component/DOM tests → set `environment: 'jsdom'` (or `happy-dom`) so `document` exists.
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
```ts
|
|
53
|
+
// Vitest unit test — sum.test.ts
|
|
54
|
+
import { expect, test } from 'vitest'
|
|
55
|
+
import { sum } from './sum'
|
|
56
|
+
test('adds numbers', () => {
|
|
57
|
+
expect(sum(2, 3)).toBe(5)
|
|
58
|
+
})
|
|
59
|
+
```
|
|
60
|
+
```ts
|
|
61
|
+
// Playwright e2e test — example.spec.ts
|
|
62
|
+
import { test, expect } from '@playwright/test'
|
|
63
|
+
test('homepage has title', async ({ page }) => {
|
|
64
|
+
await page.goto('https://example.com')
|
|
65
|
+
await expect(page).toHaveTitle(/Example/)
|
|
66
|
+
})
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Further reading
|
|
70
|
+
- Vitest config reference: https://vitest.dev/config/
|
|
71
|
+
- Playwright writing tests: https://playwright.dev/docs/writing-tests
|
|
72
|
+
|
|
73
|
+
## Related skills
|
|
74
|
+
- ../testing-strategy-pyramid — how many tests to write per layer
|
|
75
|
+
- ../tdd-and-coverage — red-green-refactor and measuring coverage
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: c
|
|
3
|
+
description: C is a low-level, statically typed, compiled systems programming language (ISO/IEC 9899, latest C23) used for OS kernels, embedded firmware, and performance-critical code; consult when writing or debugging C, choosing a compiler (gcc/clang), managing pointers, memory, undefined behavior, build flags, or standard-library usage.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [c, c23, gcc, clang, systems, compiled, iso-9899]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://en.cppreference.com/w/c
|
|
9
|
+
- https://www.iso-9899.info/wiki/The_Standard
|
|
10
|
+
- https://gcc.gnu.org/
|
|
11
|
+
verified: 2026-06-17
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# C
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
C is a small, statically typed, compiled language standardized by ISO/IEC 9899 (current revision C23, published 2024) that maps closely to the machine: manual memory, pointers, and no runtime. It powers operating systems, embedded firmware, language runtimes, and libraries. Read this when writing or debugging C, picking compiler flags, reasoning about undefined behavior, or managing memory and pointers.
|
|
18
|
+
|
|
19
|
+
## Official sources
|
|
20
|
+
- Docs: https://en.cppreference.com/w/c
|
|
21
|
+
- Repo: https://gcc.gnu.org/git.html (GCC) / https://github.com/llvm/llvm-project (Clang)
|
|
22
|
+
- Install: https://gcc.gnu.org/install/
|
|
23
|
+
|
|
24
|
+
## Install / setup
|
|
25
|
+
```bash
|
|
26
|
+
# Debian/Ubuntu: install the GNU toolchain, then compile to C23
|
|
27
|
+
sudo apt install build-essential
|
|
28
|
+
gcc -std=c23 -Wall -Wextra -O2 hello.c -o hello
|
|
29
|
+
```
|
|
30
|
+
Toolchain per https://gcc.gnu.org/install/ ; `-std=c23` flag per https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
|
|
31
|
+
|
|
32
|
+
## Core concepts
|
|
33
|
+
- **Pointers** — variables holding memory addresses; foundation for arrays, strings, and indirection.
|
|
34
|
+
- **Manual memory** — `malloc`/`calloc`/`realloc`/`free`; no GC, so leaks and double-frees are caller's responsibility.
|
|
35
|
+
- **Undefined behavior (UB)** — out-of-bounds access, signed overflow, use-after-free; the compiler may assume UB never happens.
|
|
36
|
+
- **Translation units & headers** — `.c` files compiled separately; `.h` headers declare shared interfaces; the preprocessor handles `#include`/`#define`.
|
|
37
|
+
- **Standard library** — `<stdio.h>`, `<stdlib.h>`, `<string.h>`, `<stdint.h>` for fixed-width ints.
|
|
38
|
+
- **`const` / `volatile` / `restrict`** — qualifiers controlling mutability, optimization barriers, and aliasing.
|
|
39
|
+
- **C23 additions** — `bool`/`true`/`false`/`nullptr` keywords, `constexpr`, `typeof`, `[[attributes]]`.
|
|
40
|
+
|
|
41
|
+
## Best practices
|
|
42
|
+
- Compile with `-Wall -Wextra` and treat warnings as errors (`-Werror`) (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html).
|
|
43
|
+
- Use sanitizers during development: `-fsanitize=address,undefined` to catch memory and UB bugs (https://clang.llvm.org/docs/AddressSanitizer.html).
|
|
44
|
+
- Prefer fixed-width types from `<stdint.h>` (`int32_t`, `size_t`) over assuming `int` width (https://en.cppreference.com/w/c/types/integer).
|
|
45
|
+
- Always check return values of `malloc`, `fopen`, and I/O calls; free every allocation exactly once.
|
|
46
|
+
|
|
47
|
+
## Common pitfalls
|
|
48
|
+
- Reading/writing past array bounds → use ASan and validate indices; never rely on UB.
|
|
49
|
+
- Forgetting to null-terminate strings or off-by-one in buffer sizes → use `snprintf` and size the buffer for the terminator.
|
|
50
|
+
- Returning a pointer to a stack local → allocate on the heap or pass a caller-owned buffer.
|
|
51
|
+
|
|
52
|
+
## Examples
|
|
53
|
+
```c
|
|
54
|
+
#include <stdio.h>
|
|
55
|
+
#include <stdlib.h>
|
|
56
|
+
|
|
57
|
+
int main(void) {
|
|
58
|
+
int *xs = malloc(3 * sizeof *xs);
|
|
59
|
+
if (!xs) return EXIT_FAILURE;
|
|
60
|
+
for (int i = 0; i < 3; i++) xs[i] = i * i;
|
|
61
|
+
for (int i = 0; i < 3; i++) printf("%d\n", xs[i]);
|
|
62
|
+
free(xs);
|
|
63
|
+
return EXIT_SUCCESS;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Further reading
|
|
68
|
+
- https://en.cppreference.com/w/c — community C standard-library and language reference
|
|
69
|
+
- https://gcc.gnu.org/onlinedocs/gcc/ — GCC command and option documentation
|
|
70
|
+
- https://www.iso-9899.info/wiki/The_Standard — index of C standard editions and public working drafts
|
|
71
|
+
|
|
72
|
+
## Related skills
|
|
73
|
+
- ../objectivec — Objective-C is a strict superset of C with Smalltalk-style messaging
|
|
74
|
+
- ../lua — Lua is implemented in pure ISO C and embeds via the C API
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clojure
|
|
3
|
+
description: Clojure is a dynamic, functional Lisp dialect on the JVM with immutable persistent data structures and strong concurrency support; consult when writing Clojure, using the Clojure CLI/deps.edn or Leiningen, working with the REPL, transducers, atoms/refs/agents, or interop with Java and ClojureScript.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [clojure, lisp, jvm, functional, repl, deps-edn, clojurescript]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://clojure.org/
|
|
9
|
+
- https://github.com/clojure/clojure
|
|
10
|
+
- https://clojure.org/guides/install_clojure
|
|
11
|
+
verified: 2026-06-17
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Clojure
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
Clojure is a dynamic, functional Lisp that compiles to JVM bytecode (with ClojureScript targeting JavaScript), built around immutable persistent data structures and a REPL-driven workflow. It emphasizes pure functions, explicit state, and easy Java interop. Read this when writing Clojure, setting up the CLI/deps.edn, using the REPL, or reasoning about its concurrency primitives.
|
|
18
|
+
|
|
19
|
+
## Official sources
|
|
20
|
+
- Docs: https://clojure.org/
|
|
21
|
+
- Repo: https://github.com/clojure/clojure
|
|
22
|
+
- Install: https://clojure.org/guides/install_clojure
|
|
23
|
+
|
|
24
|
+
## Install / setup
|
|
25
|
+
```bash
|
|
26
|
+
# macOS (Homebrew); Java 11+ required
|
|
27
|
+
brew install clojure/tools/clojure
|
|
28
|
+
clj # start a REPL
|
|
29
|
+
```
|
|
30
|
+
Command per https://clojure.org/guides/install_clojure (Linux uses the `linux-install.sh` script from the same page).
|
|
31
|
+
|
|
32
|
+
## Core concepts
|
|
33
|
+
- **Immutable persistent data structures** — lists, vectors, maps, sets are values; "updates" return new structures via structural sharing.
|
|
34
|
+
- **REPL-driven development** — evaluate forms interactively against a running program; the core of the Clojure workflow.
|
|
35
|
+
- **Homoiconicity & macros** — code is data (s-expressions); `defmacro` transforms forms at compile time.
|
|
36
|
+
- **deps.edn & the CLI** — `clj`/`clojure` resolve dependencies from `deps.edn`; tools.deps is the official build/run mechanism.
|
|
37
|
+
- **Sequences & laziness** — the `seq` abstraction plus lazy sequences over collections; `map`/`filter`/`reduce` are universal.
|
|
38
|
+
- **Concurrency primitives** — `atom` (uncoordinated sync state), `ref`+`dosync` (STM), `agent` (async), `volatile`.
|
|
39
|
+
- **Java interop** — call any Java via `(.method obj)`, `(Class/staticMethod)`, and `(new Class)` / `Class.`.
|
|
40
|
+
- **Transducers** — composable, source-independent transformations decoupled from input/output collections.
|
|
41
|
+
|
|
42
|
+
## Best practices
|
|
43
|
+
- Drive development from the REPL; reload changed namespaces rather than restarting (https://clojure.org/guides/repl/introduction).
|
|
44
|
+
- Prefer pure functions on immutable data; isolate state in `atom`/`ref` and mutate explicitly (https://clojure.org/reference/atoms).
|
|
45
|
+
- Use `deps.edn` aliases for tasks (test, build, run) instead of ad-hoc scripts (https://clojure.org/guides/deps_and_cli).
|
|
46
|
+
- Add type/shape checks with `clojure.spec` at boundaries (https://clojure.org/guides/spec).
|
|
47
|
+
|
|
48
|
+
## Common pitfalls
|
|
49
|
+
- Holding the head of a large lazy seq → memory blowup; consume eagerly with `doall`/`reduce` or avoid retaining the binding.
|
|
50
|
+
- Expecting side effects inside lazy `map` to run → use `doseq`/`run!` for effects, not lazy sequences.
|
|
51
|
+
- Confusing `=` (value equality) with `identical?` (reference) on immutable values → use `=`.
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
```clojure
|
|
55
|
+
(defn word-freq [text]
|
|
56
|
+
(->> (re-seq #"\w+" text)
|
|
57
|
+
(map clojure.string/lower-case)
|
|
58
|
+
(frequencies)
|
|
59
|
+
(sort-by val >)))
|
|
60
|
+
|
|
61
|
+
(word-freq "the cat the dog the cat")
|
|
62
|
+
;; => ([\"the\" 3] [\"cat\" 2] [\"dog\" 1])
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Further reading
|
|
66
|
+
- https://clojure.org/reference/documentation — official language reference index
|
|
67
|
+
- https://clojuredocs.org/ — community examples for core functions
|
|
68
|
+
- https://clojure.org/guides/deps_and_cli — deps.edn and CLI guide
|
|
69
|
+
|
|
70
|
+
## Related skills
|
|
71
|
+
- ../haskell — another functional language emphasizing immutability and pure functions
|
|
72
|
+
- ../erlang — shares a focus on concurrency and the actor/process model
|
|
73
|
+
- ../lua — fellow dynamically typed embeddable language
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cpp
|
|
3
|
+
description: High-performance, statically typed systems language with zero-overhead abstractions; consult for C++ syntax, RAII, and setup.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [cpp, systems, performance, native, compiled]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://en.cppreference.com/
|
|
9
|
+
- https://github.com/cplusplus/draft
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# C++
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
C++ is a statically typed, compiled systems programming language offering low-level control and high performance alongside high-level abstractions (classes, templates, the standard library) with a zero-overhead philosophy. It is standardized by ISO/IEC JTC1/SC22/WG21, with C++23 the most recent published standard and C++26 in progress. Read this when writing performance-critical native code, managing manual resources, or setting up a C++ toolchain.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Docs (community reference): https://en.cppreference.com/
|
|
20
|
+
- Repo (standard draft sources): https://github.com/cplusplus/draft
|
|
21
|
+
- Get started: https://isocpp.org/get-started
|
|
22
|
+
|
|
23
|
+
## Install / setup
|
|
24
|
+
C++ has no single installer; you install a compiler. The official ISO C++ "Get Started" page lists free compilers including GCC (`g++`), Clang, and Visual C++ Community. Typical install of GCC on Debian/Ubuntu:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
sudo apt install g++
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Source / recommended compilers: https://isocpp.org/get-started
|
|
31
|
+
|
|
32
|
+
## Core concepts
|
|
33
|
+
- RAII (Resource Acquisition Is Initialization) — tie resource lifetime to object scope so destructors release resources deterministically.
|
|
34
|
+
- Value semantics and the rule of move — objects are copied by default; move semantics (`std::move`, move constructors) transfer ownership efficiently.
|
|
35
|
+
- Templates and generic programming — compile-time polymorphism over types; the STL (containers, algorithms, iterators) is built on them.
|
|
36
|
+
- Smart pointers — `std::unique_ptr` and `std::shared_ptr` express ownership and automate deallocation, replacing raw `new`/`delete`.
|
|
37
|
+
- The standard library — containers (`vector`, `map`), algorithms, strings, and ranges (cppreference is the canonical reference).
|
|
38
|
+
- Undefined behavior — the standard leaves some operations (out-of-bounds access, signed overflow, use-after-free) with no defined meaning.
|
|
39
|
+
|
|
40
|
+
## Best practices
|
|
41
|
+
- Prefer RAII and smart pointers over manual `new`/`delete` to avoid leaks and double-frees (per the C++ Core Guidelines, linked from isocpp.org).
|
|
42
|
+
- Use standard-library containers and algorithms instead of hand-rolled loops and C arrays.
|
|
43
|
+
- Pass large objects by `const&`; use move semantics to avoid needless copies.
|
|
44
|
+
- Compile with warnings on (`-Wall -Wextra`) and target a recent standard (e.g. `-std=c++23`).
|
|
45
|
+
|
|
46
|
+
## Common pitfalls
|
|
47
|
+
- Dangling pointers/references from use-after-free or returning references to locals → use smart pointers and value semantics; this is undefined behavior.
|
|
48
|
+
- Out-of-bounds container/array access → undefined behavior; use bounds-checked access (`.at()`) or `std::span`/ranges where appropriate.
|
|
49
|
+
- Manual memory management with raw `new`/`delete` leaking on early return/exception → use `unique_ptr`/`shared_ptr` and RAII.
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
```cpp
|
|
53
|
+
#include <memory>
|
|
54
|
+
#include <string>
|
|
55
|
+
#include <iostream>
|
|
56
|
+
|
|
57
|
+
struct Greeter {
|
|
58
|
+
std::string greet(const std::string& name) const {
|
|
59
|
+
return "Hello, " + name;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
int main() {
|
|
64
|
+
auto g = std::make_unique<Greeter>(); // RAII: freed automatically
|
|
65
|
+
std::cout << g->greet("ada") << '\n';
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Further reading
|
|
70
|
+
- Language and library reference: https://en.cppreference.com/
|
|
71
|
+
- ISO C++ home and Core Guidelines: https://isocpp.org/get-started
|
|
72
|
+
|
|
73
|
+
## Related skills
|
|
74
|
+
- ../swift — a memory-safe systems language that interoperates with C/C++
|
|
75
|
+
- ../scala — managed-VM language for contrast with native compilation
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: csharp
|
|
3
|
+
description: Modern .NET object-oriented language compiled by Roslyn; consult for OOP, async/await, LINQ, and the dotnet CLI.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [csharp, dotnet, roslyn, async, linq]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://learn.microsoft.com/en-us/dotnet/csharp/
|
|
9
|
+
- https://github.com/dotnet/roslyn
|
|
10
|
+
- https://dotnet.microsoft.com/download
|
|
11
|
+
verified: 2026-06-16
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# C#
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
C# is a modern, statically typed, object-oriented language for the .NET platform. It is compiled by Roslyn (the open-source .NET compiler platform, which also exposes rich code-analysis APIs) and runs on the cross-platform .NET runtime. It is used for web (ASP.NET Core), desktop, mobile (MAUI), cloud, and game development. Read this for OOP fundamentals, async/await, LINQ, and the dotnet CLI.
|
|
18
|
+
|
|
19
|
+
## Official sources
|
|
20
|
+
- Docs: https://learn.microsoft.com/en-us/dotnet/csharp/
|
|
21
|
+
- Repo (Roslyn compiler): https://github.com/dotnet/roslyn
|
|
22
|
+
- Install / download (.NET SDK): https://dotnet.microsoft.com/download
|
|
23
|
+
|
|
24
|
+
## Install / setup
|
|
25
|
+
Install the .NET SDK from https://dotnet.microsoft.com/download. Then create and run a console project (per https://learn.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code):
|
|
26
|
+
```bash
|
|
27
|
+
dotnet new console -o HelloWorld
|
|
28
|
+
cd HelloWorld
|
|
29
|
+
dotnet run
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Core concepts
|
|
33
|
+
- Classes, structs, and records: reference types (`class`), value types (`struct`), and `record` types for concise immutable data with value equality.
|
|
34
|
+
- Static typing with type inference: `var` infers the compile-time type; generics provide type-safe collections and APIs.
|
|
35
|
+
- Properties and access modifiers: encapsulate fields with auto-properties; `public`/`private`/`protected`/`internal` control visibility.
|
|
36
|
+
- async/await: the Task-based asynchronous pattern for non-blocking I/O; `async` methods return `Task`/`Task<T>`.
|
|
37
|
+
- LINQ: language-integrated query over collections and other sources, using query or method syntax.
|
|
38
|
+
- Nullable reference types: opt-in compiler analysis (`string?`) that flags potential null dereferences.
|
|
39
|
+
- Exceptions and `using`: structured error handling via `try`/`catch`/`finally`; `using` disposes `IDisposable` resources deterministically.
|
|
40
|
+
|
|
41
|
+
## Best practices
|
|
42
|
+
- Enable nullable reference types and address compiler nullability warnings to avoid `NullReferenceException`.
|
|
43
|
+
- Use `async`/`await` for I/O-bound work and avoid blocking on tasks (e.g. `.Result`/`.Wait()`), which can deadlock.
|
|
44
|
+
- Dispose `IDisposable` resources with `using` declarations/statements rather than manual cleanup.
|
|
45
|
+
- Prefer LINQ and immutable `record` types for clear, declarative data handling.
|
|
46
|
+
|
|
47
|
+
## Common pitfalls
|
|
48
|
+
- Blocking on async code with `.Result` or `.Wait()` → can deadlock and wastes threads; `await` instead, all the way up.
|
|
49
|
+
- Dereferencing null references → enable nullable reference types and handle `null` at boundaries.
|
|
50
|
+
- Forgetting to dispose resources (streams, connections) → use `using` to release them deterministically.
|
|
51
|
+
- Catching `Exception` broadly and swallowing it → catch specific exceptions and let unexpected ones propagate.
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
```csharp
|
|
55
|
+
using System;
|
|
56
|
+
using System.Net.Http;
|
|
57
|
+
using System.Threading.Tasks;
|
|
58
|
+
|
|
59
|
+
class Program
|
|
60
|
+
{
|
|
61
|
+
static async Task Main()
|
|
62
|
+
{
|
|
63
|
+
using var client = new HttpClient();
|
|
64
|
+
string body = await client.GetStringAsync("https://example.com");
|
|
65
|
+
Console.WriteLine(body.Length);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Further reading
|
|
71
|
+
- A tour of C#: https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/overview
|
|
72
|
+
- C# language reference: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/
|
|
73
|
+
|
|
74
|
+
## Related skills
|
|
75
|
+
- ../java — another statically typed, object-oriented, VM-hosted language
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dart
|
|
3
|
+
description: Client-optimized, strongly typed language for building apps on any platform (powers Flutter); consult for syntax and setup.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [dart, flutter, client, cross-platform, null-safety]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://dart.dev/guides
|
|
9
|
+
- https://github.com/dart-lang/sdk
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Dart
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Dart is an approachable, portable, and productive language for building high-quality apps on any platform; it is the language behind the Flutter UI toolkit. It is strongly typed with sound null safety and compiles to native machine code (mobile/desktop/backend) or to JavaScript and WebAssembly for the web. Read this when writing Dart, building Flutter apps, or setting up the SDK.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Docs: https://dart.dev/guides
|
|
20
|
+
- Repo: https://github.com/dart-lang/sdk
|
|
21
|
+
- Install / download: https://dart.dev/get-dart
|
|
22
|
+
|
|
23
|
+
## Install / setup
|
|
24
|
+
From the official Get Dart page. macOS via Homebrew, verbatim:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
brew tap dart-lang/dart
|
|
28
|
+
brew install dart
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Windows via Chocolatey, verbatim from the same page:
|
|
32
|
+
|
|
33
|
+
```powershell
|
|
34
|
+
choco install dart-sdk
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Source: https://dart.dev/get-dart (note: the Flutter SDK already includes the full Dart SDK)
|
|
38
|
+
|
|
39
|
+
## Core concepts
|
|
40
|
+
- Sound null safety — types are non-nullable by default; nullable types use `?`, and the compiler guarantees non-null values are never null at runtime.
|
|
41
|
+
- Strong static typing with inference — `var`/`final`/`const` plus full type inference; `dynamic` opts out when needed.
|
|
42
|
+
- Everything is an object — including numbers and functions; functions are first-class values.
|
|
43
|
+
- Async with Futures and Streams — `async`/`await`, `Future<T>`, and `Stream<T>` model single and multiple asynchronous results.
|
|
44
|
+
- Isolates — concurrency via isolated memory units that communicate by message passing (no shared mutable state).
|
|
45
|
+
- AOT and JIT compilation — JIT with hot reload during development, ahead-of-time native or JS/Wasm for release.
|
|
46
|
+
|
|
47
|
+
## Best practices
|
|
48
|
+
- Follow Effective Dart (the official style/usage/design guide on dart.dev) for idiomatic code.
|
|
49
|
+
- Embrace sound null safety: prefer non-nullable types and handle nullability explicitly rather than reaching for `!`.
|
|
50
|
+
- Use `final`/`const` for values that don't change; mark compile-time constants `const`.
|
|
51
|
+
- Use the Dart SDK tooling (`dart analyze`, `dart format`, `dart test`) and pub for packages.
|
|
52
|
+
|
|
53
|
+
## Common pitfalls
|
|
54
|
+
- Overusing the null-assertion operator `!` → throws if the value is null at runtime; prefer null-aware operators (`?.`, `??`) and proper null checks.
|
|
55
|
+
- Assuming shared mutable state across isolates → isolates do not share memory; pass data via messages.
|
|
56
|
+
- Forgetting to `await` a `Future` → the code continues before the async work completes, causing race conditions.
|
|
57
|
+
|
|
58
|
+
## Examples
|
|
59
|
+
```dart
|
|
60
|
+
class Greeter {
|
|
61
|
+
final String prefix;
|
|
62
|
+
const Greeter(this.prefix);
|
|
63
|
+
|
|
64
|
+
String greet(String? name) =>
|
|
65
|
+
'$prefix, ${(name == null || name.isEmpty) ? 'world' : name}';
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void main() {
|
|
69
|
+
const g = Greeter('Hello');
|
|
70
|
+
for (final n in ['ada', 'grace']) {
|
|
71
|
+
print(g.greet(n));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Further reading
|
|
77
|
+
- Language and library guides: https://dart.dev/guides
|
|
78
|
+
- Effective Dart: https://dart.dev/guides (Effective Dart section)
|
|
79
|
+
|
|
80
|
+
## Related skills
|
|
81
|
+
- ../swift — another client-optimized, null-safe app language
|
|
82
|
+
- ../../stacks — Flutter and Dart web frameworks build on this language
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: elixir
|
|
3
|
+
description: Dynamic, functional language on the BEAM (Erlang VM) for scalable, fault-tolerant apps; consult for syntax, OTP, and setup.
|
|
4
|
+
domain: language
|
|
5
|
+
category: language
|
|
6
|
+
tags: [elixir, functional, beam, erlang, concurrency]
|
|
7
|
+
official_sources:
|
|
8
|
+
- https://elixir-lang.org/docs.html
|
|
9
|
+
- https://github.com/elixir-lang/elixir
|
|
10
|
+
verified: 2026-06-16
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Elixir
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
Elixir is a dynamic, functional language designed for building scalable and maintainable applications, running on the Erlang VM (BEAM) and inheriting its lightweight-process concurrency and fault tolerance. It pairs an approachable Ruby-influenced syntax with OTP's battle-tested distribution and supervision model. Read this when writing Elixir, structuring OTP applications, or setting up the toolchain.
|
|
17
|
+
|
|
18
|
+
## Official sources
|
|
19
|
+
- Docs: https://elixir-lang.org/docs.html
|
|
20
|
+
- Repo: https://github.com/elixir-lang/elixir
|
|
21
|
+
- Install / download: https://elixir-lang.org/install.html
|
|
22
|
+
|
|
23
|
+
## Install / setup
|
|
24
|
+
The official install page lists install scripts as the quickest method. Verbatim (Bash):
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
curl -fsSO https://elixir-lang.org/install.sh && sh install.sh elixir@1.20.1 otp@28.4
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
PowerShell (Windows), verbatim from the same page:
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
33
|
+
curl.exe -fsSO https://elixir-lang.org/install.bat && .\install.bat elixir@1.20.1 otp@28.4
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Source: https://elixir-lang.org/install.html (Homebrew alternative: `brew install elixir`)
|
|
37
|
+
|
|
38
|
+
## Core concepts
|
|
39
|
+
- Immutability — data is never mutated in place; functions return new transformed values.
|
|
40
|
+
- Pattern matching — the `=` match operator and function-head matching destructure and branch on data shape.
|
|
41
|
+
- The pipe operator `|>` — threads a value through a series of function calls for readable data pipelines.
|
|
42
|
+
- Processes and the actor model — lightweight BEAM processes communicate by message passing, not shared memory.
|
|
43
|
+
- OTP behaviours — GenServer, Supervisor, and Application provide standard patterns for stateful, supervised, fault-tolerant systems.
|
|
44
|
+
- Mix — the build tool for creating projects, running tasks, managing dependencies (Hex), and testing.
|
|
45
|
+
|
|
46
|
+
## Best practices
|
|
47
|
+
- Embrace the "let it crash" philosophy: supervise processes so failures restart cleanly rather than defensively guarding every error.
|
|
48
|
+
- Use pattern matching in function heads instead of nested conditionals for clear, declarative branching.
|
|
49
|
+
- Structure work into small pure functions and compose them with the pipe operator.
|
|
50
|
+
- Use Mix and the Hex package manager for dependencies and project tasks.
|
|
51
|
+
|
|
52
|
+
## Common pitfalls
|
|
53
|
+
- Treating BEAM processes like OS threads or assuming shared mutable state → state lives inside a process and is changed only via messages.
|
|
54
|
+
- Overusing `try/rescue` for control flow → prefer pattern matching and supervisors ("let it crash").
|
|
55
|
+
- Blocking a GenServer's single message loop with long synchronous work → offload heavy work to a separate process or Task.
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
```elixir
|
|
59
|
+
defmodule Greeter do
|
|
60
|
+
def greet(name), do: "Hello, #{name}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
["ada", "grace"]
|
|
64
|
+
|> Enum.map(&String.capitalize/1)
|
|
65
|
+
|> Enum.each(&IO.puts(Greeter.greet(&1)))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Further reading
|
|
69
|
+
- Getting started & guides: https://elixir-lang.org/docs.html
|
|
70
|
+
- Installation details and version managers: https://elixir-lang.org/install.html
|
|
71
|
+
|
|
72
|
+
## Related skills
|
|
73
|
+
- ../ruby — syntactic inspiration for Elixir
|
|
74
|
+
- ../scala — another language emphasizing functional programming on a managed VM
|