cloudron 7.0.2 → 7.0.3

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/bin/cloudron CHANGED
@@ -165,6 +165,7 @@ program.command('install')
165
165
  .option('-a, --alias-domains [domain,...]', 'Alias domains')
166
166
  .option('-m, --memory-limit [domain,...]', 'Memory Limit (e.g 1.5G, 512M)')
167
167
  .option('--appstore-id <appid[@version]>', 'Use app from the store')
168
+ .option('--versions-url <url>', 'Install community app from CloudronVersions.json URL')
168
169
  .option('--no-sso', 'Disable Cloudron SSO [false]')
169
170
  .option('--debug [cmd...]', 'Enable debug mode', false)
170
171
  .option('--readonly', 'Mount filesystem readonly. Default is read/write in debug mode.')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloudron",
3
- "version": "7.0.2",
3
+ "version": "7.0.3",
4
4
  "license": "MIT",
5
5
  "description": "Cloudron Commandline Tool",
6
6
  "type": "module",
package/src/actions.js CHANGED
@@ -103,35 +103,13 @@ async function stopActiveTask(app, options) {
103
103
  if (response.status !== 204) throw `Failed to stop active task: ${requestError(response)}`;
104
104
  }
105
105
 
106
- async function selectAppWithRepository(repository, options) {
107
- assert.strictEqual(typeof repository, 'string');
108
- assert.strictEqual(typeof options, 'object');
109
-
110
- const response = await createRequest('GET', '/api/v1/apps', options);
111
- if (response.status !== 200) throw new Error(`Failed to install app: ${requestError(response)}`);
112
-
113
- const matchingApps = response.body.apps.filter(function (app) {
114
- return !app.appStoreId && app.manifest.dockerImage.startsWith(repository); // never select apps from the store
115
- });
116
-
117
- if (matchingApps.length === 0) return [ ];
118
- if (matchingApps.length === 1) return matchingApps[0];
119
-
120
- console.log();
121
- console.log('Available apps using same repository %s:', repository);
122
- matchingApps.sort(function (a, b) { return a.fqdn < b.fqdn ? -1 : 1; });
123
- matchingApps.forEach(function (app, index) {
124
- console.log('[%s]\t%s', index, app.fqdn);
125
- });
126
-
127
- let index;
128
- while (true) {
129
- index = parseInt(await readline.question('Choose app [0-' + (matchingApps.length-1) + ']: ', {}), 10);
130
- if (isNaN(index) || index < 0 || index > matchingApps.length-1) console.log('Invalid selection');
131
- else break;
132
- }
106
+ function saveCwdAppId(appId, manifestFilePath) {
107
+ if (!manifestFilePath) return;
133
108
 
134
- return matchingApps[index];
109
+ const sourceDir = path.dirname(manifestFilePath);
110
+ const cwdConfig = config.getCwdConfig(sourceDir);
111
+ cwdConfig.appId = appId;
112
+ config.setCwdConfig(sourceDir, cwdConfig);
135
113
  }
136
114
 
137
115
  // appId may be the appId or the location
@@ -140,20 +118,19 @@ async function getApp(options) {
140
118
 
141
119
  const app = options.app || null;
142
120
 
143
- if (!app) { // determine based on repository name given during 'build'
121
+ if (!app) {
144
122
  const manifestFilePath = locateManifest();
145
-
146
123
  if (!manifestFilePath) throw new Error(NO_APP_FOUND_ERROR_STRING);
147
124
 
148
125
  const sourceDir = path.dirname(manifestFilePath);
149
- const appConfig = config.getAppBuildConfig(sourceDir);
126
+ const cwdConfig = config.getCwdConfig(sourceDir);
150
127
 
151
- if (!appConfig.repository) throw new Error(NO_APP_FOUND_ERROR_STRING);
128
+ if (!cwdConfig.appId) throw new Error(NO_APP_FOUND_ERROR_STRING);
152
129
 
153
- const [error, result] = await safe(selectAppWithRepository(appConfig.repository, options));
154
- if (error || result.length === 0) return null;
130
+ const response = await createRequest('GET', `/api/v1/apps/${cwdConfig.appId}`, options);
131
+ if (response.status !== 200) throw new Error(NO_APP_FOUND_ERROR_STRING);
155
132
 
156
- return result;
133
+ return response.body;
157
134
  } else if (app.match(/.{8}-.{4}-.{4}-.{4}-.{8}/)) { // it is an id
158
135
  const response = await createRequest('GET', `/api/v1/apps/${app}`, options);
159
136
  if (response.status !== 200) throw new Error(`Failed to get app: ${requestError(response)}`);
@@ -554,34 +531,46 @@ async function install(localOptions, cmd) {
554
531
  const options = cmd.optsWithGlobals();
555
532
 
556
533
  try {
557
- const result = await getManifest(options.appstoreId || '');
558
- const { manifest, manifestFilePath } = result;
559
-
534
+ let manifest = null, manifestFilePath = null, versionsUrl = null;
560
535
  let sourceArchiveFilePath = null; // will be set if we need to send a tarball
561
536
 
562
- if (!manifest.dockerImage) { // not a manifest from appstore
563
- const sourceDir = path.dirname(manifestFilePath);
564
- const image = options.image || config.getAppBuildConfig(sourceDir).dockerImage;
537
+ if (options.versionsUrl) {
538
+ const [url, version] = options.versionsUrl.split('@');
539
+ const request = createRequest('GET', `/api/v1/community/app?url=${encodeURIComponent(url)}&version=${encodeURIComponent(version || 'latest')}`, options);
540
+ const response = await request;
541
+ if (response.status !== 200) return exit(`Failed to get community app: ${requestError(response)}`);
565
542
 
566
- if (!image) {
567
- console.log('No build detected. This package will be built on the server.');
543
+ manifest = response.body.manifest;
544
+ versionsUrl = response.body.versionsUrl;
545
+ } else {
546
+ const result = await getManifest(options.appstoreId || '');
547
+ manifest = result.manifest;
548
+ manifestFilePath = result.manifestFilePath;
568
549
 
569
- const dockerignoreFilePath = path.join(sourceDir, '.dockerignore');
570
- const ignoreMatcher = dockerignoreMatcher(dockerignoreFilePath);
550
+ if (!manifest.dockerImage) { // not a manifest from appstore
551
+ const sourceDir = path.dirname(manifestFilePath);
552
+ const image = options.image || config.getCwdConfig(sourceDir).dockerImage;
571
553
 
572
- const tarStream = tar.pack(sourceDir, {
573
- ignore: function (name) {
574
- return ignoreMatcher(name.slice(sourceDir.length + 1)); // make name as relative path
575
- }
576
- });
554
+ if (!image) {
555
+ console.log('No build detected. This package will be built on the server.');
577
556
 
578
- sourceArchiveFilePath = path.join(os.tmpdir(), `cloudron-source-${Date.now()}.tar`);
579
- const sourceArchiveStream = fs.createWriteStream(sourceArchiveFilePath);
557
+ const dockerignoreFilePath = path.join(sourceDir, '.dockerignore');
558
+ const ignoreMatcher = dockerignoreMatcher(dockerignoreFilePath);
580
559
 
581
- const [tarError] = await safe(stream.pipeline(tarStream, sourceArchiveStream));
582
- if (tarError) return exit(`Could not create source archive: ${tarError.message}`);
583
- } else {
584
- manifest.dockerImage = image;
560
+ const tarStream = tar.pack(sourceDir, {
561
+ ignore: function (name) {
562
+ return ignoreMatcher(name.slice(sourceDir.length + 1)); // make name as relative path
563
+ }
564
+ });
565
+
566
+ sourceArchiveFilePath = path.join(os.tmpdir(), `cloudron-source-${Date.now()}.tar`);
567
+ const sourceArchiveStream = fs.createWriteStream(sourceArchiveFilePath);
568
+
569
+ const [tarError] = await safe(stream.pipeline(tarStream, sourceArchiveStream));
570
+ if (tarError) return exit(`Could not create source archive: ${tarError.message}`);
571
+ } else {
572
+ manifest.dockerImage = image;
573
+ }
585
574
  }
586
575
  }
587
576
 
@@ -600,10 +589,10 @@ async function install(localOptions, cmd) {
600
589
  const tmp = kv.split('=');
601
590
  secondaryDomains[tmp[0]] = await selectDomain(tmp[1], options);
602
591
  }
603
- } else {
592
+ } else if (manifest) {
604
593
  secondaryDomains = await querySecondaryDomains(null /* existing app */, manifest, options);
605
594
  }
606
- } else if (manifest.httpPorts) { // just put in defaults
595
+ } else if (manifest && manifest.httpPorts) { // just put in defaults
607
596
  for (const env in manifest.httpPorts) {
608
597
  secondaryDomains[env] = await selectDomain(manifest.httpPorts[env].defaultValue, options);
609
598
  }
@@ -629,10 +618,10 @@ async function install(localOptions, cmd) {
629
618
  if (isNaN(parseInt(tmp[1], 10))) return; // disable the port
630
619
  ports[tmp[0]] = parseInt(tmp[1], 10);
631
620
  });
632
- } else {
621
+ } else if (manifest) {
633
622
  ports = await queryPortBindings(null /* existing app */, manifest);
634
623
  }
635
- } else { // just put in defaults
624
+ } else if (manifest) { // just put in defaults
636
625
  const allPorts = Object.assign({}, manifest.tcpPorts, manifest.udpPorts);
637
626
  for (const portName in allPorts) {
638
627
  ports[portName] = allPorts[portName].defaultValue;
@@ -655,7 +644,6 @@ async function install(localOptions, cmd) {
655
644
 
656
645
  const data = {
657
646
  appStoreId: options.appstoreId || '', // note case change
658
- manifest: options.appstoreId ? null : manifest, // cloudron ignores manifest anyway if appStoreId is set
659
647
  location: domainObject.subdomain, // LEGACY
660
648
  subdomain: domainObject.subdomain,
661
649
  domain: domainObject.domain,
@@ -667,8 +655,14 @@ async function install(localOptions, cmd) {
667
655
  env
668
656
  };
669
657
 
658
+ if (versionsUrl) {
659
+ data.versionsUrl = versionsUrl;
660
+ } else {
661
+ data.manifest = options.appstoreId ? null : manifest; // cloudron ignores manifest anyway if appStoreId is set
662
+ }
663
+
670
664
  // the sso only applies for apps which allow optional sso
671
- if (manifest.optionalSso) data.sso = options.sso;
665
+ if (manifest && manifest.optionalSso) data.sso = options.sso;
672
666
 
673
667
  if (options.debug) { // 'true' when no args. otherwise, array
674
668
  const debugCmd = options.debug === true ? [ '/bin/bash', '-c', 'echo "Repair mode. Use the webterminal or cloudron exec to repair. Sleeping" && sleep infinity' ] : options.debug;
@@ -680,7 +674,7 @@ async function install(localOptions, cmd) {
680
674
  options.wait = false; // in debug mode, health check never succeeds
681
675
  }
682
676
 
683
- if (!options.appstoreId && manifest.icon) {
677
+ if (!options.appstoreId && !options.versionsUrl && manifest && manifest.icon) {
684
678
  let iconFilename = manifest.icon.slice(0, 7) === 'file://' ? manifest.icon.slice(7) : manifest.icon;
685
679
  iconFilename = path.resolve(path.dirname(manifestFilePath), iconFilename); // resolve filename wrt manifest
686
680
  data.icon = safe.fs.readFileSync(iconFilename, { encoding: 'base64' });
@@ -720,6 +714,8 @@ async function install(localOptions, cmd) {
720
714
 
721
715
  const appId = response.body.id;
722
716
 
717
+ saveCwdAppId(appId, manifestFilePath);
718
+
723
719
  console.log('App is being installed.');
724
720
 
725
721
  if (!options.wait) return;
@@ -841,7 +837,7 @@ async function update(localOptions, cmd) {
841
837
 
842
838
  if (!manifest.dockerImage) { // not a manifest from appstore
843
839
  const sourceDir = path.dirname(manifestFilePath);
844
- const image = options.image || config.getAppBuildConfig(sourceDir).dockerImage;
840
+ const image = options.image || config.getCwdConfig(sourceDir).dockerImage;
845
841
 
846
842
  if (!image) {
847
843
  console.log('No docker image detected. Creating source archive from this folder.');
@@ -900,6 +896,8 @@ async function update(localOptions, cmd) {
900
896
  }
901
897
  if (response.status !== 202) return exit(`Failed to update app: ${requestError(response)}`);
902
898
 
899
+ saveCwdAppId(app.id, manifestFilePath);
900
+
903
901
  process.stdout.write('\n => ' + 'Waiting for app to be updated ');
904
902
 
905
903
  await waitForFinishInstallation(app.id, response.body.taskId, options);
@@ -1007,6 +1005,14 @@ async function uninstall(localOptions, cmd) {
1007
1005
  await waitForTask(response.body.taskId, options);
1008
1006
  const response2 = await createRequest('GET', `/api/v1/apps/${app.id}`, options);
1009
1007
  if (response2.status === 404) {
1008
+ const manifestFilePath = locateManifest();
1009
+ if (manifestFilePath) {
1010
+ const sourceDir = path.dirname(manifestFilePath);
1011
+ const cwdConfig = config.getCwdConfig(sourceDir);
1012
+ delete cwdConfig.appId;
1013
+ config.setCwdConfig(sourceDir, cwdConfig);
1014
+ }
1015
+
1010
1016
  console.log('\n\nApp %s successfully uninstalled.', app.fqdn);
1011
1017
  } else if (response2.body.installationState === 'error') {
1012
1018
  console.log('\n\nApp uninstallation failed.\n');
@@ -235,7 +235,7 @@ async function verifyManifest(localOptions, cmd) {
235
235
  const manifest = result.manifest;
236
236
 
237
237
  const sourceDir = path.dirname(manifestFilePath);
238
- const appConfig = config.getAppBuildConfig(sourceDir);
238
+ const appConfig = config.getCwdConfig(sourceDir);
239
239
 
240
240
  // image can be passed in options for buildbot
241
241
  if (options.image) {
@@ -282,7 +282,7 @@ async function upload(localOptions, cmd) {
282
282
  const manifest = result.manifest;
283
283
 
284
284
  const sourceDir = path.dirname(manifestFilePath);
285
- const appConfig = config.getAppBuildConfig(sourceDir);
285
+ const appConfig = config.getCwdConfig(sourceDir);
286
286
 
287
287
  // image can be passed in options for buildbot
288
288
  if (options.image) {
@@ -202,7 +202,7 @@ async function buildLocal(manifest, sourceDir, appConfig, options) {
202
202
 
203
203
  appConfig.dockerImage = dockerImage;
204
204
  appConfig.dockerImageSha256 = match[1]; // stash this separately for now
205
- config.setAppBuildConfig(sourceDir, appConfig);
205
+ config.setCwdConfig(sourceDir, appConfig);
206
206
  }
207
207
 
208
208
  async function buildRemote(manifest, sourceDir, appConfig, options, buildServiceConfig) {
@@ -272,7 +272,7 @@ async function buildRemote(manifest, sourceDir, appConfig, options, buildService
272
272
 
273
273
  appConfig.dockerImage = dockerImage;
274
274
  // appConfig.dockerImageSha256 = match[1]; // stash this separately for now
275
- config.setAppBuildConfig(sourceDir, appConfig);
275
+ config.setCwdConfig(sourceDir, appConfig);
276
276
 
277
277
  console.log(`Docker image: ${dockerImage}`);
278
278
  console.log('\nBuild successful');
@@ -293,7 +293,7 @@ async function build(localOptions, cmd) {
293
293
  const manifest = result.manifest;
294
294
  const sourceDir = path.dirname(manifestFilePath);
295
295
 
296
- const appConfig = config.getAppBuildConfig(sourceDir);
296
+ const appConfig = config.getCwdConfig(sourceDir);
297
297
  const buildServiceConfig = getEffectiveBuildServiceConfig(options);
298
298
 
299
299
  let repository = appConfig.repository;
@@ -310,7 +310,7 @@ async function build(localOptions, cmd) {
310
310
  if (parts.length > 1) exit(`repository should not be a URL. Try again without ${parts[0]}://`);
311
311
 
312
312
  appConfig.repository = repository;
313
- config.setAppBuildConfig(sourceDir, appConfig);
313
+ config.setCwdConfig(sourceDir, appConfig);
314
314
  }
315
315
 
316
316
  appConfig.gitCommit = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim(); // when the build gets saved, save the gitCommit also
@@ -386,7 +386,7 @@ async function clear(/* localOptions, cmd */) {
386
386
 
387
387
  const sourceDir = path.dirname(manifestFilePath);
388
388
 
389
- config.unsetAppBuildConfig(sourceDir);
389
+ config.unsetCwdConfig(sourceDir);
390
390
  }
391
391
 
392
392
  async function info(localOptions, cmd) {
@@ -401,7 +401,7 @@ async function info(localOptions, cmd) {
401
401
  if (!manifestFilePath) return exit();
402
402
 
403
403
  const sourceDir = path.dirname(manifestFilePath);
404
- const appConfig = config.getAppBuildConfig(sourceDir);
404
+ const appConfig = config.getCwdConfig(sourceDir);
405
405
 
406
406
  console.log('Build info');
407
407
  if (appConfig?.dockerImage) {
package/src/config.js CHANGED
@@ -60,9 +60,9 @@ function setAppStoreToken(value) {
60
60
  set(['appStore', appStoreOrigin().replace('https://', ''), 'token'], value);
61
61
  }
62
62
 
63
- const getAppBuildConfig = (p) => get(['apps', p]) || {};
64
- const setAppBuildConfig = (p, c) => set(['apps', p], c);
65
- const unsetAppBuildConfig = (p) => unset(['apps', p]);
63
+ const getCwdConfig = (p) => get(['apps', p]) || {};
64
+ const setCwdConfig = (p, c) => set(['apps', p], c);
65
+ const unsetCwdConfig = (p) => unset(['apps', p]);
66
66
 
67
67
  const getBuildServiceConfig = () => get('buildService') || {};
68
68
  const setBuildServiceConfig = (c) => set('buildService', c);
@@ -94,9 +94,9 @@ export {
94
94
  appStoreOrigin,
95
95
 
96
96
  // per app
97
- getAppBuildConfig,
98
- setAppBuildConfig,
99
- unsetAppBuildConfig,
97
+ getCwdConfig,
98
+ setCwdConfig,
99
+ unsetCwdConfig,
100
100
 
101
101
  // build service
102
102
  getBuildServiceConfig,
@@ -85,7 +85,7 @@ async function addOrUpdate(localOptions, cmd) {
85
85
  const manifest = result.manifest;
86
86
 
87
87
  const sourceDir = path.dirname(manifestFilePath);
88
- const appConfig = config.getAppBuildConfig(sourceDir);
88
+ const appConfig = config.getCwdConfig(sourceDir);
89
89
 
90
90
  if (options.image) {
91
91
  manifest.dockerImage = options.image;
@@ -0,0 +1,549 @@
1
+ auctex/questing,questing 13.2-1.1 all
2
+ integrated document editing environment for TeX etc.
3
+
4
+ bibata-cursor-theme/questing,questing 2.0.6-1 all
5
+ Bibata is open source, compact, and material designed cursor set
6
+
7
+ big-cursor/questing,questing 3.16 all
8
+ larger mouse cursors for X
9
+
10
+ breeze/questing,now 4:6.4.5-0ubuntu1 amd64 [installed,automatic]
11
+ Default Plasma theme (Metapackage)
12
+
13
+ breeze-cursor-theme/questing,questing,now 4:6.4.5-0ubuntu1 all [installed,automatic]
14
+ Default Plasma cursor theme
15
+
16
+ budgie-hotcorners-applet/questing 1.9.0-1 amd64
17
+ Applet providing hotcorners capabilities for the Budgie Desktop
18
+
19
+ cairo-dock-showmouse-plug-in/questing 3.5.1-1build1 amd64
20
+ Showmouse plug-in Cairo-dock
21
+
22
+ chameleon-cursor-theme/questing,questing 0.5-8 all
23
+ modern but not gaudy X11 mouse theme
24
+
25
+ comixcursors-lefthanded/questing,questing 0.10.0-1 all
26
+ X11 mouse pointer themes with a comic art feeling (LH, translucent)
27
+
28
+ comixcursors-lefthanded-opaque/questing,questing 0.10.0-1 all
29
+ X11 mouse pointer themes with a comic art feeling (LH, opaque)
30
+
31
+ comixcursors-righthanded/questing,questing 0.10.0-1 all
32
+ X11 mouse pointer themes with a comic art feeling (RH, translucent)
33
+
34
+ comixcursors-righthanded-opaque/questing,questing 0.10.0-1 all
35
+ X11 mouse pointer themes with a comic art feeling (RH, opaque)
36
+
37
+ crystalcursors/questing,questing 1.1.1-14.1 all
38
+ X11 mouse theme with the crystal look&feel
39
+
40
+ cursor/unknown,now 2.5.26-1772083177 amd64 [installed]
41
+ The AI Code Editor.
42
+
43
+ cursor-nightly/unknown 2.7.0-pre.5.patch.0-1772235562 amd64
44
+ The AI Code Editor.
45
+
46
+ cursor-sandbox-apparmor/unknown,unknown,unknown,now 0.2.0 all [installed]
47
+ AppArmor profile for Cursor sandbox helper (Enterprise)
48
+
49
+ dangen/questing 0.5-7 amd64
50
+ shoot 'em up game where accurate shooting matters
51
+
52
+ dde-qt5integration/questing 5.7.12-1build1 amd64
53
+ Qt5 theme integration for Deepin application
54
+
55
+ deepin-icon-theme/questing,questing 2025.03.27-1 all
56
+ Icon Theme for Deepin software and Deepin Desktop Environment
57
+
58
+ dmz-cursor-theme/questing,questing,now 0.4.5.3 all [installed,automatic]
59
+ Style neutral, scalable cursor theme
60
+
61
+ e-wrapper/questing,questing 0.2-1 all
62
+ invoke your editor, with optional file:lineno handling
63
+
64
+ elpa-bar-cursor/questing,questing 2.0-2 all
65
+ switch Emacs block cursor to a bar
66
+
67
+ elpa-beacon/questing,questing 1.3.4-3 all
68
+ highlight the cursor whenever the window scrolls
69
+
70
+ elpa-cfrs/questing,questing 1.6.0-4 all
71
+ Child-frame based read-string for Emacs
72
+
73
+ elpa-crdt/questing,questing 0.3.5-4 all
74
+ collaborative editing environment for Emacs
75
+
76
+ elpa-expand-region/questing,questing 1.0.0-2 all
77
+ Increase selected region in Emacs by semantic units
78
+
79
+ elpa-org-appear/questing,questing 0.3.0-3 all
80
+ auto-toggle visibility of org mode elements
81
+
82
+ elpa-php-mode/questing,questing 1.27.0-1 all
83
+ PHP Mode for GNU Emacs
84
+
85
+ fierce/questing,questing 1.6.0-1 all
86
+ Domain DNS scanner
87
+
88
+ fonts-texgyre/questing,questing 20180621-6 all
89
+ OpenType fonts based on URW Fonts
90
+
91
+ fuse-emulator-gtk/questing 1.6.0+dfsg1-2build4 amd64
92
+ The Free Unix Spectrum Emulator (GTK version)
93
+
94
+ fuse-emulator-sdl/questing 1.6.0+dfsg1-2build4 amd64
95
+ The Free Unix Spectrum Emulator (SDL version)
96
+
97
+ gdl-astrolib/questing,questing 2022.09.12+dfsg-2 all
98
+ Low-level astronomy software for GDL
99
+
100
+ geany-plugin-addons/questing 2.1+dfsg-2 amd64
101
+ miscellaneous plugins for Geany
102
+
103
+ geany-plugin-autoclose/questing 2.1+dfsg-2 amd64
104
+ auto-closing plugin for Geany
105
+
106
+ geany-plugin-automark/questing 2.1+dfsg-2 amd64
107
+ auto-mark plugin for Geany
108
+
109
+ geany-plugin-doc/questing 2.1+dfsg-2 amd64
110
+ documentation plugin for Geany
111
+
112
+ geany-plugin-pairtaghighlighter/questing 2.1+dfsg-2 amd64
113
+ tag pair highlighter plugin for Geany
114
+
115
+ gedit-latex-plugin/questing,questing 46.2.2-1 all
116
+ gedit plugin for composing and compiling LaTeX documents
117
+
118
+ gnome-settings-daemon/questing,now 49.0-1ubuntu3 amd64 [installed,automatic]
119
+ daemon handling the GNOME session settings
120
+
121
+ golang-github-atomicgo-cursor-dev/questing,questing 0.2.0-2 all
122
+ Move the terminal cursor in any direction on every operating system (library)
123
+
124
+ golang-github-bmatsuo-lmdb-go-dev/questing,questing 1.8.0+git20170215.a14b5a3-4build1 all
125
+ Bindings for the LMDB C library
126
+
127
+ golang-github-jaguilar-vt100-dev/questing,questing 0.0~git20201024.81de19c-2 all
128
+ raw-mode vt100 screen reader
129
+
130
+ golang-github-konsorten-go-windows-terminal-sequences-dev/questing,questing 1.0.2-3 all
131
+ Enable support for Windows Terminal Colors
132
+
133
+ golang-github-tonistiigi-vt100-dev/questing,questing 0.0~git20240514.90bafcd-2 all
134
+ Raw-mode vt100 screen reader (library)
135
+
136
+ golang-github-vmihailenco-msgpack.v5-dev/questing,questing 5.4.1-1 all
137
+ MessagePack (msgpack.org) encoding for Golang (library)
138
+
139
+ gt5/questing,questing 1.5.0~20111220+bzr29-4 all
140
+ shell program to display visual disk usage with navigation
141
+
142
+ human-theme/questing,questing 0.39.3 all
143
+ Human theme
144
+
145
+ hyprcursor-util/questing 0.1.11-1 amd64
146
+ Utility to manipulate hyprcusor and xcursor themes
147
+
148
+ icoutils/questing 0.32.3-6 amd64
149
+ Create and extract MS Windows icons and cursors
150
+
151
+ inspectrum/questing 0.3.1-1build2 amd64
152
+ tool for visualising captured radio signals
153
+
154
+ journal-brief/questing,questing 1.1.8-3 all
155
+ Show interesting new systemd journal entries
156
+
157
+ kakoune/questing 2024.05.18-2ubuntu1 amd64
158
+ Vim-inspired, selection-oriented code editor
159
+
160
+ keynav/questing 0.20180421~git6505bd0d-3.1 amd64
161
+ keyboard-driven mouse cursor mover
162
+
163
+ kmousetool/questing,now 4:25.08.1-0ubuntu1 amd64 [installed,automatic]
164
+ mouse manipulation tool for the disabled
165
+
166
+ knot-resolver/questing 5.7.5-1 amd64
167
+ caching, DNSSEC-validating DNS resolver
168
+
169
+ libansi-terminal-ocaml/questing 0.8.5-5build4 amd64
170
+ colors and cursor movements for OCaml applications (runtime files)
171
+
172
+ libansi-terminal-ocaml-dev/questing 0.8.5-5build4 amd64
173
+ colors and cursor movements for OCaml applications (dev files)
174
+
175
+ libcatalyst-view-csv-perl/questing,questing 1.8-1 all
176
+ CSV view class for the Catalyst web framework
177
+
178
+ libdbix-class-cursor-cached-perl/questing,questing 1.001004-3 all
179
+ cursor object with built-in caching support
180
+
181
+ libghc-ansi-terminal-dev/questing 1.0.2-1 amd64
182
+ Simple ANSI terminal support, with Windows compatibility
183
+
184
+ libghc-ansi-terminal-doc/questing,questing 1.0.2-1 all
185
+ Simple ANSI terminal support, with Windows compatibility; documentation
186
+
187
+ libghc-ansi-terminal-prof/questing 1.0.2-1 amd64
188
+ Simple ANSI terminal support, with Windows compatibility; profiling libraries
189
+
190
+ libghc-terminal-progress-bar-dev/questing 0.4.2-2 amd64
191
+ A simple progress bar in the terminal
192
+
193
+ libghc-terminal-progress-bar-doc/questing,questing 0.4.2-2 all
194
+ A simple progress bar in the terminal; documentation
195
+
196
+ libghc-terminal-progress-bar-prof/questing 0.4.2-2 amd64
197
+ A simple progress bar in the terminal; profiling libraries
198
+
199
+ libhyprcursor-dev/questing 0.1.11-1 amd64
200
+ hyprland cursor format, library and utilities (headers)
201
+
202
+ libhyprcursor0/questing 0.1.11-1 amd64
203
+ hyprland cursor format, library and utilities
204
+
205
+ libmonospaceif-dev/questing 0.7.15-2.1 amd64
206
+ Interface translating libfizmo output into monospaced text
207
+
208
+ libmygui-dev/questing 3.4.2+dfsg-1.1build1 amd64
209
+ Fast, simple and flexible GUI for OpenMW - development files
210
+
211
+ libmygui.ogreplatform0debian1t64/questing 3.4.2+dfsg-1.1build1 amd64
212
+ Fast, simple and flexible GUI - Ogre interface
213
+
214
+ libmygui.opengl3platform0debian1t64/questing 3.4.2+dfsg-1.1build1 amd64
215
+ Fast, simple and flexible GUI - OpenGL3 interface
216
+
217
+ libmygui.openglplatform0debian1t64/questing 3.4.2+dfsg-1.1build1 amd64
218
+ Fast, simple and flexible GUI - OpenGL interface
219
+
220
+ libmyguiengine3debian1t64/questing 3.4.2+dfsg-1.1build1 amd64
221
+ Fast, simple and flexible GUI - shared library
222
+
223
+ libodbccr2/questing,now 2.3.12-2ubuntu2 amd64 [installed,automatic]
224
+ ODBC Cursor library for Unix
225
+
226
+ libpaperclips-java/questing,questing 1.0.4-3 all
227
+ Simplified Java Printing Support for SWT
228
+
229
+ libpaperclips-java-doc/questing,questing 1.0.4-3 all
230
+ Documentation for libpaperclips-java
231
+
232
+ librust-cursor-icon-dev/questing 1.1.0-2 amd64
233
+ Cross platform cursor icon type - Rust source code
234
+
235
+ librust-hickory-recursor-dev/questing 0.24.1-1 amd64
236
+ *WARNING* This library is experimental - Rust source code
237
+
238
+ librust-regex-cursor-dev/questing 0.1.4-1 amd64
239
+ Regex fork that can search discontiguous haystacks - Rust source code
240
+
241
+ librust-wayland-cursor-0.29-dev/questing 0.29.5-6 amd64
242
+ Bindings to libwayland-cursor - Rust source code
243
+
244
+ librust-wayland-cursor-dev/questing 0.31.11-1 amd64
245
+ Bindings to libwayland-cursor - Rust source code
246
+
247
+ librust-xcursor-dev/questing 0.3.4-1 amd64
248
+ Loading XCursor themes - Rust source code
249
+
250
+ libstartup-notification0/questing,now 0.12-8 amd64 [installed,automatic]
251
+ library for program launch feedback (shared library)
252
+
253
+ libstartup-notification0-dev/questing 0.12-8 amd64
254
+ library for program launch feedback (development headers)
255
+
256
+ libt3key-bin/questing 0.2.10-1.1 amd64
257
+ Utilities for working with libt3key terminal descriptions
258
+
259
+ libt3key-dev/questing 0.2.10-1.1 amd64
260
+ Development files for libt3key
261
+
262
+ libt3key1/questing 0.2.10-1.1 amd64
263
+ Terminal key sequence database library
264
+
265
+ libtickit-widget-entry-plugin-completion-perl/questing,questing 0.02-1 all
266
+ word-completion plugin for Tickit::Widget::Entry
267
+
268
+ libwayland-cursor++1/questing 1.0.0-6 amd64
269
+ wayland compositor infrastructure - cursor library C++ bindings
270
+
271
+ libwayland-cursor0/questing,now 1.24.0-1build1 amd64 [installed,automatic]
272
+ wayland compositor infrastructure - cursor library
273
+
274
+ libx11-protocol-other-perl/questing,questing 31-1 all
275
+ miscellaneous X11::Protocol helpers
276
+
277
+ libxcb-cursor-dev/questing 0.1.5-1 amd64
278
+ utility libraries for X C Binding -- cursor, development files
279
+
280
+ libxcb-cursor0/questing,now 0.1.5-1 amd64 [installed]
281
+ utility libraries for X C Binding -- cursor
282
+
283
+ libxcursor-dev/questing 1:1.2.3-1 amd64
284
+ X cursor management library (development files)
285
+
286
+ libxcursor1/questing,now 1:1.2.3-1 amd64 [installed,automatic]
287
+ X cursor management library
288
+
289
+ libxfixes-dev/questing 1:6.0.0-2build1 amd64
290
+ X11 miscellaneous 'fixes' extension library (development headers)
291
+
292
+ libxfixes3/questing,now 1:6.0.0-2build1 amd64 [installed,automatic]
293
+ X11 miscellaneous 'fixes' extension library
294
+
295
+ libxmlbeans-java/questing,questing 4.0.0-2 all
296
+ Java library for accessing XML by binding it to Java types
297
+
298
+ libzed-ocaml/questing 3.2.3-1build6 amd64
299
+ abstract engine for text edition in OCaml (runtime)
300
+
301
+ libzed-ocaml-dev/questing 3.2.3-1build6 amd64
302
+ abstract engine for text edition in OCaml (development tools)
303
+
304
+ liquidwar/questing 5.6.5-2.1 amd64
305
+ truly original multiplayer wargame
306
+
307
+ liquidwar-data/questing,questing 5.6.5-2.1 all
308
+ data files for Liquid War
309
+
310
+ liquidwar-server/questing 5.6.5-2.1 amd64
311
+ Liquid War server
312
+
313
+ mate-settings-daemon/questing 1.26.1-1.2 amd64
314
+ daemon handling the MATE session settings
315
+
316
+ mate-settings-daemon-common/questing,questing 1.26.1-1.2 all
317
+ daemon handling the MATE session settings (common files)
318
+
319
+ mate-settings-daemon-dev/questing 1.26.1-1.2 amd64
320
+ daemon handling the MATE session settings (development files)
321
+
322
+ mle/questing 1.7.2-1 amd64
323
+ flexible terminal-based editor
324
+
325
+ mygui-doc/questing,questing 3.4.2+dfsg-1.1build1 all
326
+ API documentations for MyGUI library
327
+
328
+ nim-lapper-dev/questing,questing 0.1.8-1 all
329
+ simple, fast interval searches for nim
330
+
331
+ node-ansi/questing,questing 0.3.1-2 all
332
+ Advanced ANSI formatting tool for Node.js
333
+
334
+ node-ansi-escapes/questing,questing 5.0.0+really.4.3.1-1 all
335
+ ANSI escape codes for manipulating the terminal
336
+
337
+ node-charm/questing,questing 1.0.2-3 all
338
+ ansi control sequences for terminal cursor hopping and colors
339
+
340
+ node-cli-cursor/questing,questing 4.0.0-3 all
341
+ Toggle the CLI cursor
342
+
343
+ node-console-control-strings/questing,questing 1.1.0-3 all
344
+ cross-platform tested terminal/console command strings
345
+
346
+ node-restore-cursor/questing,questing 4.0.0-4 all
347
+ Gracefully restore the CLI cursor on exit
348
+
349
+ node-y-codemirror/questing,questing 3.0.1-2 all
350
+ node-yjs binding to a CodeMirror editor
351
+
352
+ node-yjs/questing,questing 13.6.8-1 all
353
+ CRDT framework with a powerful abstraction of shared data
354
+
355
+ obs-advanced-scene-switcher/questing 1.29.2-1ubuntu1 amd64
356
+ plugin for OBS Studio to improve the scene switching
357
+
358
+ oneko/questing 1.2.sakura.6-16 amd64
359
+ cat chases the cursor (now a mouse) around the screen
360
+
361
+ oxygen-cursor-theme/questing,questing 0.0.2012-06-kde4.8-6ubuntu1 all
362
+ Oxygen mouse cursor theme
363
+
364
+ oxygen-cursor-theme-extra/questing,questing 0.0.2012-06-kde4.8-6ubuntu1 all
365
+ Oxygen mouse cursor theme - extra colors
366
+
367
+ pacvim/questing 1.1.1-1.1 amd64
368
+ pacman game concept with vim command
369
+
370
+ paje.app/questing 1.98-2build1 amd64
371
+ generic visualization tool (Gantt chart and more)
372
+
373
+ paper-icon-theme/questing,questing 1.5.0+git20200312.aa3e8af-6 all
374
+ simple and modern icon and cursor theme
375
+
376
+ pd-hcs/questing 0.2.1-4build1 amd64
377
+ Pd library of experiments in UNIX, the Pd GUI, and more
378
+
379
+ pdns-recursor/questing 5.2.4-2build2 amd64
380
+ PowerDNS Recursor
381
+
382
+ phinger-cursor-theme/questing,questing 1.1-0ubuntu1 all
383
+ The most over-engineered cursor theme
384
+
385
+ phosh-osk-stub/questing 0.46.0-1 amd64
386
+ An alternative on screen keyboard for Phosh
387
+
388
+ phosh-osk-stub-doc/questing,questing 0.46.0-1 all
389
+ API documentation for Phosh's OSK stub
390
+
391
+ pinfo/questing 0.6.13-2 amd64
392
+ user-friendly console-based viewer for Info document files
393
+
394
+ python-bsddb3-doc/questing,questing 6.2.9-4build1 all
395
+ Documentation for the python Berkeley DB interface module
396
+
397
+ python-psycopg2-doc/questing,questing 2.9.10-1build1 all
398
+ Python module for PostgreSQL (documentation package)
399
+
400
+ python3-ansi/questing,questing 0.1.5-2 all
401
+ cursor movement and graphics - Python 3
402
+
403
+ python3-asyncpg/questing 0.30.0-1.1 amd64
404
+ asyncio PosgtreSQL driver
405
+
406
+ python3-bsddb3/questing 6.2.9-4build1 amd64
407
+ Python interface for Berkeley DB (Python 3.x)
408
+
409
+ python3-consolekit/questing,questing 1.7.2-2 all
410
+ Additional utilities for click
411
+
412
+ python3-easyansi/questing,questing 0.3-4 all
413
+ terminal framework for colors, cursor movements, and drawing
414
+
415
+ python3-mplcursors/questing,questing 0.6-2 all
416
+ Interactive data selection cursors for Matplotlib
417
+
418
+ python3-psycopg2/questing 2.9.10-1build1 amd64
419
+ Python 3 module for PostgreSQL
420
+
421
+ python3-psycopg2cffi/questing 2.9.0-1 amd64
422
+ implementation of the psycopg2 module using cffi
423
+
424
+ python3-tktooltip/questing 3.1.2-1 amd64
425
+ simple yet fully customisable tooltip/pop-up implementation
426
+
427
+ ruby-tty-cursor/questing,questing 0.7.1-2 all
428
+ Library to help move the terminal cursor around and manipulate text
429
+
430
+ sabily-themes/questing,questing 1.7build1 all
431
+ Sabily themes
432
+
433
+ slop/questing 7.6-4ubuntu1 amd64
434
+ queries for a selection from the user and prints the region to stdout
435
+
436
+ smenu/questing 1.4.0-1 amd64
437
+ curse-based CLI selection box
438
+
439
+ speakup-doc/questing,questing 3.1.6.dfsg.1-7 all
440
+ Documentation for speakup kernel modules
441
+
442
+ staden/questing 2.0.0+b11-7 amd64
443
+ DNA sequence assembly (Gap4/Gap5), editing and analysis tools
444
+
445
+ staden-common/questing,questing 2.0.0+b11-7 all
446
+ Architecture independent files for Staden
447
+
448
+ tea/questing 63.3.0-1 amd64
449
+ graphical text editor with syntax highlighting
450
+
451
+ teseq/questing 1.1.1-5 amd64
452
+ utility for rendering terminal typescripts human-readable
453
+
454
+ tklib/questing,questing 0.9-1 all
455
+ standard Tk Library
456
+
457
+ topp/questing 2.6.0+cleaned1-4build7 amd64
458
+ set of programs implementing The OpenMS Proteomic Pipeline
459
+
460
+ ubuntume-themes/questing,questing 1.7build1 all
461
+ Sabily themes (transitional package)
462
+
463
+ ukui-settings-daemon/questing 4.0.0.2-1 amd64
464
+ daemon handling the UKUI session settings
465
+
466
+ ukui-settings-daemon-common/questing,questing 4.0.0.2-1 all
467
+ daemon handling the UKUI session settings (common files)
468
+
469
+ unclutter/questing 8-26 amd64
470
+ hides the mouse cursor in X after a period of inactivity
471
+
472
+ unclutter-xfixes/questing 1.6-1build2 amd64
473
+ hide the X mouse cursor after a period of inactivity, using XFixes
474
+
475
+ unity-settings-daemon/questing 15.04.1+21.10.20220802-0ubuntu6 amd64
476
+ daemon handling the Unity session settings
477
+
478
+ uqm/questing 0.8.0+dfsg-3.2 amd64
479
+ The Ur-Quan Masters - An inter-galactic adventure game
480
+
481
+ uqm-content/questing,questing 0.8.0+deb-1 all
482
+ The Ur-Quan Masters - Game data files
483
+
484
+ uqm-music/questing,questing 0.8.0+deb-1 all
485
+ The Ur-Quan Masters - Game music files
486
+
487
+ uqm-russian/questing,questing 1.0.2-6 all
488
+ Russian addon for 'The Ur-Quan Masters' game
489
+
490
+ uqm-voice/questing,questing 0.8.0+deb-1 all
491
+ The Ur-Quan Masters - Voice files
492
+
493
+ val-and-rick/questing 0.1a.dfsg1-7build1 amd64
494
+ shooter game
495
+
496
+ val-and-rick-data/questing,questing 0.1a.dfsg1-7build1 all
497
+ shooter game - game data
498
+
499
+ vim-textobj-user/questing,questing 0.7.6-3 all
500
+ Vim plugin for user-defined text objects
501
+
502
+ vis/questing 0.9-1 amd64
503
+ Modern, legacy free, simple yet efficient vim-like editor
504
+
505
+ wmdrawer/questing 0.10.5-6.1build2 amd64
506
+ Window Maker dockapp providing a drawer to launch applications
507
+
508
+ wmfire/questing 1.2.4-8 amd64
509
+ very cool fiery way of showing your CPU usage
510
+
511
+ x11-apps/questing,now 7.7+11build3 amd64 [installed,automatic]
512
+ X applications
513
+
514
+ xbanish/questing 1.8-1 amd64
515
+ banish the mouse cursor when typing, show it again when the mouse moves
516
+
517
+ xbattbar/questing 1.4.9-2 amd64
518
+ Display battery status in X11
519
+
520
+ xcur2png/questing 0.7.1-1.1 amd64
521
+ program to convert X cursors into PNG images
522
+
523
+ xcursor-themes/questing,questing,now 1.0.6-0ubuntu1 all [installed,automatic]
524
+ Base X cursor themes
525
+
526
+ xfce4-eyes-plugin/questing 4.6.2-1 amd64
527
+ eyes that follow your mouse for the Xfce4 panel
528
+
529
+ xfoil/questing 6.99.dfsg+1-3 amd64
530
+ program for the design and analysis of subsonic airfoils
531
+
532
+ xgterm/questing 2.2+dfsg-1 amd64
533
+ Terminal emulator to work with IRAF
534
+
535
+ xidle/questing 20200802 amd64
536
+ run program after inactivity or edge sensitive
537
+
538
+ xmlbeans/questing,questing 4.0.0-2 all
539
+ Java library for accessing XML by binding it to Java types - tools
540
+
541
+ xwit/questing 3.4-16 amd64
542
+ collection of simple routines to call some X11 functions
543
+
544
+ yorick-curses/questing 0.1-7 amd64
545
+ interface to the (n)curses library for the Yorick language
546
+
547
+ zsh-autosuggestions/questing,questing 0.7.1-1 all
548
+ Fish-like fast/unobtrusive autosuggestions for zsh
549
+